MCPcopy Create free account
hub / github.com/antonmedv/gitmal / parseRefNames

Function parseRefNames

pkg/git/git.go:280–340  ·  view source on GitHub ↗
(refNames string)

Source from the content-addressed store, hash-verified

278}
279
280func parseRefNames(refNames string) []RefName {
281 refNames = strings.TrimSpace(refNames)
282 if refNames == "" {
283 return nil
284 }
285
286 parts := strings.Split(refNames, ", ")
287 out := make([]RefName, 0, len(parts))
288 for _, p := range parts {
289 p = strings.TrimSpace(p)
290 if p == "" {
291 continue
292 }
293
294 // tag: v1.2.3
295 if strings.HasPrefix(p, "tag: ") {
296 out = append(out, RefName{
297 Kind: RefKindTag,
298 Name: strings.TrimSpace(strings.TrimPrefix(p, "tag: ")),
299 })
300 continue
301 }
302
303 // HEAD -> main
304 if strings.HasPrefix(p, "HEAD -> ") {
305 out = append(out, RefName{
306 Kind: RefKindHEAD,
307 Name: "HEAD",
308 Target: strings.TrimSpace(strings.TrimPrefix(p, "HEAD -> ")),
309 })
310 continue
311 }
312
313 // origin/HEAD -> origin/main
314 if strings.Contains(p, " -> ") && strings.HasSuffix(strings.SplitN(p, " -> ", 2)[0], "/HEAD") {
315 leftRight := strings.SplitN(p, " -> ", 2)
316 out = append(out, RefName{
317 Kind: RefKindRemoteHEAD,
318 Name: strings.TrimSpace(leftRight[0]),
319 Target: strings.TrimSpace(leftRight[1]),
320 })
321 continue
322 }
323
324 // Remote branch like origin/main
325 if strings.Contains(p, "/") {
326 out = append(out, RefName{
327 Kind: RefKindRemote,
328 Name: p,
329 })
330 continue
331 }
332
333 // Local branch
334 out = append(out, RefName{
335 Kind: RefKindBranch,
336 Name: p,
337 })

Callers 4

CommitsFunction · 0.85
TestParseRefNames_EmptyFunction · 0.85
TestParseRefNames_MixedFunction · 0.85

Calls

no outgoing calls

Tested by 3

TestParseRefNames_EmptyFunction · 0.68
TestParseRefNames_MixedFunction · 0.68