-
Notifications
You must be signed in to change notification settings - Fork 14.1k
Add full git commit hash to release channel manifests #44218
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
de038b7
9abc549
9412fd7
f912d77
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -364,7 +364,9 @@ impl Step for Rustc { | |
| cp("README.md"); | ||
| // tiny morsel of metadata is used by rust-packaging | ||
| let version = build.rust_version(); | ||
| let sha = build.rust_sha().unwrap_or(""); | ||
| t!(t!(File::create(overlay.join("version"))).write_all(version.as_bytes())); | ||
| t!(t!(File::create(overlay.join("git-commit-hash"))).write_all(sha.as_bytes())); | ||
|
||
|
|
||
| // On MinGW we've got a few runtime DLL dependencies that we need to | ||
| // include. The first argument to this script is where to put these DLLs | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -107,6 +107,7 @@ static MINGW: &'static [&'static str] = &[ | |
| struct Manifest { | ||
| manifest_version: String, | ||
| date: String, | ||
| git_commit_hash: String, | ||
|
||
| pkg: BTreeMap<String, Package>, | ||
| } | ||
|
|
||
|
|
@@ -205,15 +206,10 @@ impl Builder { | |
|
|
||
| self.digest_and_sign(); | ||
| let manifest = self.build_manifest(); | ||
| let filename = format!("channel-rust-{}.toml", self.rust_release); | ||
| self.write_manifest(&toml::to_string(&manifest).unwrap(), &filename); | ||
|
|
||
| let filename = format!("channel-rust-{}-date.txt", self.rust_release); | ||
| self.write_date_stamp(&manifest.date, &filename); | ||
| self.write_channel_files(&self.rust_release, &manifest); | ||
|
|
||
| if self.rust_release != "beta" && self.rust_release != "nightly" { | ||
| self.write_manifest(&toml::to_string(&manifest).unwrap(), "channel-rust-stable.toml"); | ||
| self.write_date_stamp(&manifest.date, "channel-rust-stable-date.txt"); | ||
| self.write_channel_files("stable", &manifest); | ||
| } | ||
| } | ||
|
|
||
|
|
@@ -230,6 +226,7 @@ impl Builder { | |
| let mut manifest = Manifest { | ||
| manifest_version: "2".to_string(), | ||
| date: self.date.to_string(), | ||
| git_commit_hash: self.git_commit_hash("rust", "x86_64-unknown-linux-gnu"), | ||
| pkg: BTreeMap::new(), | ||
| }; | ||
|
|
||
|
|
@@ -382,14 +379,31 @@ impl Builder { | |
| .arg(self.input.join(&filename)) | ||
| .arg(format!("{}/version", filename.replace(".tar.gz", ""))) | ||
| .arg("-O"); | ||
| let version = t!(cmd.output()); | ||
| if !version.status.success() { | ||
| let output = t!(cmd.output()); | ||
| if !output.status.success() { | ||
| panic!("failed to learn version:\n\n{:?}\n\n{}\n\n{}", | ||
| cmd, | ||
| String::from_utf8_lossy(&version.stdout), | ||
| String::from_utf8_lossy(&version.stderr)); | ||
| String::from_utf8_lossy(&output.stdout), | ||
| String::from_utf8_lossy(&output.stderr)); | ||
| } | ||
| String::from_utf8_lossy(&output.stdout).trim().to_string() | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe I'm not quite following, but why the changes to
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I changed a variable name before copy/pasting the method, but it’s otherwise unchanged. I can revert that if you prefer. |
||
| } | ||
|
|
||
| fn git_commit_hash(&self, component: &str, target: &str) -> String { | ||
| let mut cmd = Command::new("tar"); | ||
| let filename = self.filename(component, target); | ||
| cmd.arg("xf") | ||
| .arg(self.input.join(&filename)) | ||
| .arg(format!("{}/git-commit-hash", filename.replace(".tar.gz", ""))) | ||
| .arg("-O"); | ||
| let output = t!(cmd.output()); | ||
| if !output.status.success() { | ||
| panic!("failed to learn git commit hash:\n\n{:?}\n\n{}\n\n{}", | ||
| cmd, | ||
| String::from_utf8_lossy(&output.stdout), | ||
| String::from_utf8_lossy(&output.stderr)); | ||
| } | ||
| String::from_utf8_lossy(&version.stdout).trim().to_string() | ||
| String::from_utf8_lossy(&output.stdout).trim().to_string() | ||
| } | ||
|
|
||
| fn hash(&self, path: &Path) -> String { | ||
|
|
@@ -425,16 +439,15 @@ impl Builder { | |
| assert!(t!(child.wait()).success()); | ||
| } | ||
|
|
||
| fn write_manifest(&self, manifest: &str, name: &str) { | ||
| let dst = self.output.join(name); | ||
| t!(t!(File::create(&dst)).write_all(manifest.as_bytes())); | ||
| self.hash(&dst); | ||
| self.sign(&dst); | ||
| fn write_channel_files(&self, channel_name: &str, manifest: &Manifest) { | ||
| self.write(&toml::to_string(&manifest).unwrap(), channel_name, ".toml"); | ||
| self.write(&manifest.date, channel_name, "-date.txt"); | ||
| self.write(&manifest.git_commit_hash, channel_name, "-git-commit-hash.txt"); | ||
|
||
| } | ||
|
|
||
| fn write_date_stamp(&self, date: &str, name: &str) { | ||
| let dst = self.output.join(name); | ||
| t!(t!(File::create(&dst)).write_all(date.as_bytes())); | ||
| fn write(&self, contents: &str, channel_name: &str, suffix: &str) { | ||
| let dst = self.output.join(format!("channel-rust-{}{}", channel_name, suffix)); | ||
| t!(t!(File::create(&dst)).write_all(contents.as_bytes())); | ||
| self.hash(&dst); | ||
| self.sign(&dst); | ||
| } | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<unknown>seems better to me than an empty string, but I'm not sure if it'll work well with other logic. Perhaps we could not create the file if we don't know it instead? Empty files are somewhat painful to debug...There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I made this omit the file at first, but then I didn’t know how to separate “this tarball does not contain this file” from other kinds of errors in
Command::new("tar").arg("xf") …Any suggestion?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe it should be an error to try to build a manifest with
ignore-git = true?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Switched to not including the file when the info is missing.