Skip to content

Commit 8399fcd

Browse files
committed
Added git email in CI
1 parent f789b0f commit 8399fcd

File tree

1 file changed

+67
-43
lines changed

1 file changed

+67
-43
lines changed

src/utils/common.rs

Lines changed: 67 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -384,71 +384,95 @@ fn get_cumulative_pr_files(
384384
pub fn checkout(
385385
clone_url: &str,
386386
clone_path: &str,
387-
base_branch: Option<&str>,
387+
branch: Option<&str>,
388388
pr_branch: Option<&str>,
389389
) -> Result<(), Box<dyn std::error::Error>> {
390-
// Clone the repository
390+
// Clone the repository; use the specified branch or default branch if `branch` is None
391391
let mut clone_cmd = Command::new("git");
392392
clone_cmd.arg("clone").arg(clone_url).arg(clone_path);
393-
394-
if let Some(branch) = base_branch {
395-
clone_cmd.arg("--branch").arg(branch);
393+
if let Some(branch_name) = branch {
394+
clone_cmd.arg("--branch").arg(branch_name);
396395
}
397-
398396
let output = clone_cmd.output()?;
399397
if !output.status.success() {
400398
let error_msg = String::from_utf8_lossy(&output.stderr);
401399
return Err(format!("Failed to clone repository: {}", error_msg).into());
402400
}
403401

402+
// Set the working directory to the cloned path
404403
let cloned_path = Path::new(clone_path).canonicalize()?;
405404
env::set_current_dir(&cloned_path)?;
406405

407-
// Get the list of changed files
408-
let changed_files = match (base_branch, pr_branch) {
409-
(Some(base), Some(pr)) => {
410-
let fetch_output = Command::new("git")
411-
.args(&["fetch", "origin", pr])
412-
.output()?;
413-
if !fetch_output.status.success() {
414-
let error_msg = String::from_utf8_lossy(&fetch_output.stderr);
415-
return Err(format!("Failed to fetch PR branch: {}", error_msg).into());
416-
}
417-
get_cumulative_pr_files(Some(base), Some(&format!("origin/{}", pr)))?
418-
}
419-
(Some(base), None) => {
420-
let output = Command::new("git")
421-
.args(&["ls-tree", "-r", "--name-only", base])
422-
.output()?;
423-
if !output.status.success() {
424-
let error_msg = String::from_utf8_lossy(&output.stderr);
425-
return Err(format!("Failed to list files in base branch: {}", error_msg).into());
426-
}
406+
// Configure Git user for commits in this repository
407+
Command::new("git")
408+
.args(&["config", "user.email", "ci@hela.int"])
409+
.output()?;
410+
Command::new("git")
411+
.args(&["config", "user.name", "CI Bot"])
412+
.output()?;
427413

428-
String::from_utf8_lossy(&output.stdout)
429-
.lines()
430-
.map(String::from)
431-
.collect()
414+
// If a pr_branch is provided, fetch it as a local branch and compare with the base branch
415+
if let Some(pr_branch_name) = pr_branch {
416+
// Fetch the PR branch and create a local branch
417+
let fetch_output = Command::new("git")
418+
.args(&[
419+
"fetch",
420+
"origin",
421+
&format!("{}:{}", pr_branch_name, pr_branch_name),
422+
])
423+
.output()?;
424+
if !fetch_output.status.success() {
425+
let error_msg = String::from_utf8_lossy(&fetch_output.stderr);
426+
return Err(format!(
427+
"Failed to fetch PR branch '{}': {}",
428+
pr_branch_name, error_msg
429+
)
430+
.into());
432431
}
433-
(None, _) => {
434-
return Err("At least base_branch must be specified.".into());
432+
433+
// Perform a diff between `branch` (or the default branch) and `pr_branch`
434+
let base_branch = branch.unwrap_or("HEAD");
435+
let diff_output = Command::new("git")
436+
.args(&["diff", "--name-only", base_branch, pr_branch_name])
437+
.output()?;
438+
439+
if !diff_output.status.success() {
440+
let error_msg = String::from_utf8_lossy(&diff_output.stderr);
441+
return Err(format!("Failed to diff branches: {}", error_msg).into());
435442
}
436-
};
437443

438-
let mut file_commit_map: HashMap<String, String> = HashMap::new();
439-
for file in &changed_files {
440-
file_commit_map.insert(file.clone(), "PR-final".to_string());
441-
}
444+
// Parse the diff output
445+
let changed_files = String::from_utf8_lossy(&diff_output.stdout)
446+
.lines()
447+
.map(String::from)
448+
.collect::<Vec<String>>();
442449

443-
println!("Changed files:\n{:?}", changed_files);
450+
println!(
451+
"Changed files in PR branch '{}': {:?}",
452+
pr_branch_name, changed_files
453+
);
454+
} else {
455+
// If no PR branch, list all files in the base branch
456+
let list_output = Command::new("git")
457+
.args(&["ls-tree", "-r", "--name-only", "HEAD"])
458+
.output()?;
444459

445-
// Now proceed with deletion based on the changed files
446-
let files_str = changed_files.join("\n");
447-
delete_except(&files_str, &cloned_path)?;
460+
if !list_output.status.success() {
461+
let error_msg = String::from_utf8_lossy(&list_output.stderr);
462+
return Err(format!("Failed to list files in base branch: {}", error_msg).into());
463+
}
448464

449-
delete_empty_directories(&cloned_path)?;
465+
let files = String::from_utf8_lossy(&list_output.stdout)
466+
.lines()
467+
.map(String::from)
468+
.collect::<Vec<String>>();
450469

451-
save_commit_map(&file_commit_map)?;
470+
println!(
471+
"Files in branch '{}': {:?}",
472+
branch.unwrap_or("default branch"),
473+
files
474+
);
475+
}
452476

453477
Ok(())
454478
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy