MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / parse_squash_merge_format

Function parse_squash_merge_format

atomic-cli/src/commands/git/parallel.rs:3555–3584  ·  view source on GitHub ↗

Detect squash merge format from various Git forges. Supported formats: - GitHub: `title (#42)\n\n* commit msg 1\n* commit msg 2` - GitLab: `title\n\nSee merge request group/project!42` - Azure DevOps: `Merged PR 42: title\n\n...`

(message: &str)

Source from the content-addressed store, hash-verified

3553/// - GitLab: `title\n\nSee merge request group/project!42`
3554/// - Azure DevOps: `Merged PR 42: title\n\n...`
3555fn parse_squash_merge_format(message: &str) -> Option<u32> {
3556 let lines: Vec<&str> = message.lines().collect();
3557 if lines.len() < 2 {
3558 return None;
3559 }
3560
3561 // GitHub: first line has (#N), followed by blank line + bullet points
3562 if let Some(pr) = parse_pr_number(lines[0]) {
3563 if lines.len() >= 3 {
3564 let has_bullets = lines[2..].iter().any(|l| l.trim().starts_with("* "));
3565 if has_bullets {
3566 return Some(pr);
3567 }
3568 }
3569 }
3570
3571 // GitLab: body contains "See merge request ...!N"
3572 for line in &lines[1..] {
3573 if line.contains("See merge request") {
3574 return parse_pr_number(line);
3575 }
3576 }
3577
3578 // Azure DevOps: "Merged PR N: title"
3579 if lines[0].starts_with("Merged PR ") {
3580 return parse_pr_number(lines[0]);
3581 }
3582
3583 None
3584}
3585
3586// ═══════════════════════════════════════════════════════════════════════
3587// Free Functions for Parallel Parsing

Callers 1

classify_commitFunction · 0.85

Calls 5

parse_pr_numberFunction · 0.85
linesMethod · 0.45
lenMethod · 0.45
iterMethod · 0.45
containsMethod · 0.45

Tested by

no test coverage detected