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:3640–3669  ·  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

3638/// - GitLab: `title\n\nSee merge request group/project!42`
3639/// - Azure DevOps: `Merged PR 42: title\n\n...`
3640fn parse_squash_merge_format(message: &str) -> Option<u32> {
3641 let lines: Vec<&str> = message.lines().collect();
3642 if lines.len() < 2 {
3643 return None;
3644 }
3645
3646 // GitHub: first line has (#N), followed by blank line + bullet points
3647 if let Some(pr) = parse_pr_number(lines[0]) {
3648 if lines.len() >= 3 {
3649 let has_bullets = lines[2..].iter().any(|l| l.trim().starts_with("* "));
3650 if has_bullets {
3651 return Some(pr);
3652 }
3653 }
3654 }
3655
3656 // GitLab: body contains "See merge request ...!N"
3657 for line in &lines[1..] {
3658 if line.contains("See merge request") {
3659 return parse_pr_number(line);
3660 }
3661 }
3662
3663 // Azure DevOps: "Merged PR N: title"
3664 if lines[0].starts_with("Merged PR ") {
3665 return parse_pr_number(lines[0]);
3666 }
3667
3668 None
3669}
3670
3671// ═══════════════════════════════════════════════════════════════════════
3672// 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