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:4036–4065  ·  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

4034/// - GitLab: `title\n\nSee merge request group/project!42`
4035/// - Azure DevOps: `Merged PR 42: title\n\n...`
4036fn parse_squash_merge_format(message: &str) -> Option<u32> {
4037 let lines: Vec<&str> = message.lines().collect();
4038 if lines.len() < 2 {
4039 return None;
4040 }
4041
4042 // GitHub: first line has (#N), followed by blank line + bullet points
4043 if let Some(pr) = parse_pr_number(lines[0]) {
4044 if lines.len() >= 3 {
4045 let has_bullets = lines[2..].iter().any(|l| l.trim().starts_with("* "));
4046 if has_bullets {
4047 return Some(pr);
4048 }
4049 }
4050 }
4051
4052 // GitLab: body contains "See merge request ...!N"
4053 for line in &lines[1..] {
4054 if line.contains("See merge request") {
4055 return parse_pr_number(line);
4056 }
4057 }
4058
4059 // Azure DevOps: "Merged PR N: title"
4060 if lines[0].starts_with("Merged PR ") {
4061 return parse_pr_number(lines[0]);
4062 }
4063
4064 None
4065}
4066
4067// ═══════════════════════════════════════════════════════════════════════
4068// 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