मैं गिट रिपॉजिटरी में एक जंग परियोजना होस्ट करता हूं और मैं इसे कुछ कमांड पर संस्करण प्रिंट करना चाहता हूं। मैं प्रोग्राम में संस्करण कैसे शामिल कर सकता हूं? मैंने सोचा था कि निर्माण स्क्रिप्ट वातावरण चर जो इस परियोजना का संयोजित करते समय इस्तेमाल किया जा सकता सेट कर सकते हैं कि, लेकिन यह काम नहीं करता है:गस्ट प्रतिबद्ध हैश को जंग प्रोग्राम में स्ट्रिंग के रूप में शामिल करें
build.rs:
use std::env;
fn get_git_hash() -> Option<String> {
use std::process::Command;
let branch = Command::new("git")
.arg("rev-parse")
.arg("--abbrev-ref")
.arg("HEAD")
.output();
if let Ok(branch_output) = branch {
let branch_string = String::from_utf8_lossy(&branch_output.stdout);
let commit = Command::new("git")
.arg("rev-parse")
.arg("--verify")
.arg("HEAD")
.output();
if let Ok(commit_output) = commit {
let commit_string = String::from_utf8_lossy(&commit_output.stdout);
return Some(format!("{}, {}",
branch_string.lines().next().unwrap_or(""),
commit_string.lines().next().unwrap_or("")))
} else {
panic!("Can not get git commit: {}", commit_output.unwrap_err());
}
} else {
panic!("Can not get git branch: {}", branch.unwrap_err());
}
None
}
fn main() {
if let Some(git) = get_git_hash() {
env::set_var("GIT_HASH", git);
}
}
src/main.rs:
pub const GIT_HASH: &'static str = env!("GIT_HASH");
fm main() {
println!("Git hash: {}", GIT_HASH);
}
त्रुटि संदेश:
error: environment variable `GIT_HASH` not defined
--> src/main.rs:10:25
|
10 | pub const GIT_HASH: &'static str = env!("GIT_HASH");
|
^^^^^^^^^^^^^^^^
क्या संकलन समय पर ऐसे डेटा को पास करने का कोई तरीका है? यदि पर्यावरण चर के साथ नहीं है तो मैं बिल्ड स्क्रिप्ट और स्रोत कोड के बीच संवाद कैसे कर सकता हूं? मैं केवल कुछ फाइलों को डेटा लिखने के बारे में सोच सकता हूं, लेकिन मुझे लगता है कि यह इस मामले के लिए अधिक है।
मुझे कॉन्फ़िगर ध्वज संस्करण का एक उदाहरण देखना अच्छा लगेगा। हालांकि एक गिट हैश को केवल 40 वर्ण होने की जरूरत है। – Shepmaster
** अन्य, गैर-बाल प्रक्रियाओं में ** मुझे लगता है कि यहां महसूस करने की महत्वपूर्ण बात है। बिल्ड स्क्रिप्ट लाइब्रेरी के संकलन से पहले * * * * के आसपास * चलाया जाता है। – Shepmaster
@ शेमपस्टर: एक ध्वज केवल आपको एक बिट देता है, हालांकि। आपके पास '# [cfg (bit_0)] const का कुछ है BIT_0: u8 = 1; # [सीएफजी (नहीं (bit_0))] const BIT_0: u8 = 0; '160 बार। मैं * पिछले कुछ में अतीत में कुछ भी कर सकता हूं ... \ ** सीटी * \ * –