summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2024-08-10 12:33:17 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2024-08-10 12:33:17 -0400
commit8a84fc99ac34da6e6d950ddf37abebb7a0570a2e (patch)
tree4a2c5f6952f5544e6d025f61c79956a9d64be28f
parent439c0e8495577c58e1fd612e2cd6bbc76ba457af (diff)
ci: fix branches from different users conflicting
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--src/bin/cgi.rs7
-rw-r--r--src/bin/gen-job-list.rs32
2 files changed, 24 insertions, 15 deletions
diff --git a/src/bin/cgi.rs b/src/bin/cgi.rs
index 8a0ab36..8b27b71 100644
--- a/src/bin/cgi.rs
+++ b/src/bin/cgi.rs
@@ -134,8 +134,11 @@ fn branch_get_results(ci: &Ci) -> Result<Vec<CommitResults>, String> {
let mut nr_commits = 0;
let mut ret: Vec<CommitResults> = Vec::new();
- let branch_or_commit =
- ci.commit.as_ref().or(ci.branch.as_ref()).unwrap();
+ let branch_or_commit = if let Some(ref commit) = ci.commit {
+ commit.to_string()
+ } else {
+ ci.user.as_ref().unwrap().to_string() + "/" + ci.branch.as_ref().unwrap()
+ };
let mut walk = ci.repo.revwalk().unwrap();
let reference = git_get_commit(&ci.repo, branch_or_commit.clone());
diff --git a/src/bin/gen-job-list.rs b/src/bin/gen-job-list.rs
index 16ab3bd..17cee94 100644
--- a/src/bin/gen-job-list.rs
+++ b/src/bin/gen-job-list.rs
@@ -83,6 +83,7 @@ fn have_result(results: &TestResultsMap, subtest: &str) -> bool {
fn branch_test_jobs(rc: &CiConfig,
durations: Option<&[u8]>,
repo: &git2::Repository,
+ user: &str,
branch: &str,
test_group: &RcTestGroup,
test_path: &Path,
@@ -98,16 +99,18 @@ fn branch_test_jobs(rc: &CiConfig,
branch, test_path, subtests)
}
+ let userbranch = user.to_string() + "/" + branch;
+
let mut walk = repo.revwalk().unwrap();
- let reference = git_get_commit(&repo, branch.to_string());
+ let reference = git_get_commit(&repo, userbranch.clone());
if reference.is_err() {
- eprintln!("branch {} not found", branch);
+ eprintln!("branch {} not found", &userbranch);
return ret;
}
let reference = reference.unwrap();
if let Err(e) = walk.push(reference.id()) {
- eprintln!("Error walking {}: {}", branch, e);
+ eprintln!("Error walking {}: {}", &userbranch, e);
return ret;
}
@@ -173,13 +176,14 @@ fn branch_test_jobs(rc: &CiConfig,
fn user_test_jobs(rc: &CiConfig,
durations: Option<&[u8]>,
repo: &git2::Repository,
- user: &Userrc,
+ user: &str,
+ userconfig: &Userrc,
verbose: bool) -> Vec<TestJob> {
- let mut ret: Vec<_> = user.branch.iter()
+ let mut ret: Vec<_> = userconfig.branch.iter()
.flat_map(move |(branch, branchconfig)| branchconfig.tests.iter()
- .filter_map(|i| user.test_group.get(i)).map(move |testgroup| (branch, testgroup)))
+ .filter_map(|i| userconfig.test_group.get(i)).map(move |testgroup| (branch, testgroup)))
.flat_map(move |(branch, testgroup)| testgroup.tests.iter()
- .flat_map(move |test| branch_test_jobs(rc, durations, repo, &branch, &testgroup, &test, verbose)))
+ .flat_map(move |test| branch_test_jobs(rc, durations, repo, user, &branch, &testgroup, &test, verbose)))
.collect();
/* sort by commit, dedup */
@@ -194,8 +198,9 @@ fn rc_test_jobs(rc: &CiConfig,
repo: &git2::Repository,
verbose: bool) -> Vec<TestJob> {
let mut ret: Vec<_> = rc.users.iter()
- .filter_map(|u| u.1.as_ref().ok())
- .flat_map(|user| user_test_jobs(rc, durations, repo, &user, verbose))
+ .filter(|u| u.1.is_ok())
+ .map(|(user, userconfig)| (user, userconfig.as_ref().unwrap()))
+ .flat_map(|(user, userconfig)| user_test_jobs(rc, durations, repo, &user, &userconfig, verbose))
.collect();
/* sort by commit, dedup */
@@ -237,7 +242,7 @@ fn write_test_jobs(rc: &CiConfig, jobs_in: Vec<TestJob>, verbose: bool) -> anyho
fn fetch_remotes(rc: &CiConfig, repo: &git2::Repository) -> anyhow::Result<bool> {
fn fetch_branch(rc: &CiConfig, repo: &git2::Repository,
- branch: &str, branchconfig: &RcBranch) -> Result<(), git2::Error> {
+ user: &str, branch: &str, branchconfig: &RcBranch) -> Result<(), git2::Error> {
let fetch = branchconfig.fetch
.split_whitespace()
.map(|i| OsStr::new(i));
@@ -261,7 +266,7 @@ fn fetch_remotes(rc: &CiConfig, repo: &git2::Repository) -> anyhow::Result<bool>
.peel_to_commit()
.map_err(|e| { eprintln!("error getting FETCH_HEAD: {}", e); e})?;
- repo.branch(branch, &fetch_head, true)?;
+ repo.branch(&(user.to_string() + "/" + branch), &fetch_head, true)?;
Ok(())
}
@@ -280,9 +285,10 @@ fn fetch_remotes(rc: &CiConfig, repo: &git2::Repository) -> anyhow::Result<bool>
let mut filelock = FileLock::lock(lockfile, false, FileOptions::new().create(true).write(true))?;
eprint!("Fetching remotes...");
- for userconfig in rc.users.iter().filter_map(|u| u.1.as_ref().ok()) {
+ for (user, userconfig) in rc.users.iter().filter(|u| u.1.is_ok())
+ .map(|(user, userconfig)| (user, userconfig.as_ref().unwrap())) {
for (branch, branchconfig) in &userconfig.branch {
- fetch_branch(rc, repo, branch, branchconfig).ok();
+ fetch_branch(rc, repo, user, branch, branchconfig).ok();
}
}
eprintln!(" done");