Skip to content

Commit

Permalink
Rollup merge of rust-lang#106106 - jyn514:remote-tracking-branch, r=M…
Browse files Browse the repository at this point in the history
…ark-Simulacrum

Pass `branch.{branch}.remote=origin` to `git submodule update`

This works around a bug in git itself.
Fixes rust-lang#101144.
  • Loading branch information
compiler-errors authored Jan 29, 2023
2 parents e972bc8 + 6a3ebe6 commit 6cdc68f
Showing 1 changed file with 23 additions and 3 deletions.
26 changes: 23 additions & 3 deletions src/bootstrap/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ use std::fs::{self, File};
use std::io;
use std::io::ErrorKind;
use std::path::{Path, PathBuf};
use std::process::Command;
use std::process::{Command, Stdio};
use std::str;

use build_helper::ci::CiEnv;
Expand Down Expand Up @@ -662,12 +662,32 @@ impl Build {

// Try passing `--progress` to start, then run git again without if that fails.
let update = |progress: bool| {
let mut git = Command::new("git");
// Git is buggy and will try to fetch submodules from the tracking branch for *this* repository,
// even though that has no relation to the upstream for the submodule.
let current_branch = {
let output = self
.config
.git()
.args(["symbolic-ref", "--short", "HEAD"])
.stderr(Stdio::inherit())
.output();
let output = t!(output);
if output.status.success() {
Some(String::from_utf8(output.stdout).unwrap().trim().to_owned())
} else {
None
}
};

let mut git = self.config.git();
if let Some(branch) = current_branch {
git.arg("-c").arg(format!("branch.{branch}.remote=origin"));
}
git.args(&["submodule", "update", "--init", "--recursive", "--depth=1"]);
if progress {
git.arg("--progress");
}
git.arg(relative_path).current_dir(&self.config.src);
git.arg(relative_path);
git
};
// NOTE: doesn't use `try_run` because this shouldn't print an error if it fails.
Expand Down

0 comments on commit 6cdc68f

Please sign in to comment.