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:3670–3699  ·  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

3668/// - GitLab: `title\n\nSee merge request group/project!42`
3669/// - Azure DevOps: `Merged PR 42: title\n\n...`
3670fn parse_squash_merge_format(message: &str) -> Option<u32> {
3671 let lines: Vec<&str> = message.lines().collect();
3672 if lines.len() < 2 {
3673 return None;
3674 }
3675
3676 // GitHub: first line has (#N), followed by blank line + bullet points
3677 if let Some(pr) = parse_pr_number(lines[0]) {
3678 if lines.len() >= 3 {
3679 let has_bullets = lines[2..].iter().any(|l| l.trim().starts_with("* "));
3680 if has_bullets {
3681 return Some(pr);
3682 }
3683 }
3684 }
3685
3686 // GitLab: body contains "See merge request ...!N"
3687 for line in &lines[1..] {
3688 if line.contains("See merge request") {
3689 return parse_pr_number(line);
3690 }
3691 }
3692
3693 // Azure DevOps: "Merged PR N: title"
3694 if lines[0].starts_with("Merged PR ") {
3695 return parse_pr_number(lines[0]);
3696 }
3697
3698 None
3699}
3700
3701// ═══════════════════════════════════════════════════════════════════════
3702// 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