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

Function parseGitHeaderData

pkg/gitdiff/file_header.go:262–300  ·  view source on GitHub ↗

parseGitHeaderData parses a single line of metadata from a Git file header. It returns true when header parsing is complete; in that case, line was the first line of non-header content.

(f *File, line, defaultName string)

Source from the content-addressed store, hash-verified

260// It returns true when header parsing is complete; in that case, line was the
261// first line of non-header content.
262func parseGitHeaderData(f *File, line, defaultName string) (end bool, err error) {
263 if len(line) > 0 && line[len(line)-1] == '\n' {
264 line = line[:len(line)-1]
265 }
266
267 for _, hdr := range []struct {
268 prefix string
269 end bool
270 parse func(*File, string, string) error
271 }{
272 {"@@ -", true, nil},
273 {"--- ", false, parseGitHeaderOldName},
274 {"+++ ", false, parseGitHeaderNewName},
275 {"old mode ", false, parseGitHeaderOldMode},
276 {"new mode ", false, parseGitHeaderNewMode},
277 {"deleted file mode ", false, parseGitHeaderDeletedMode},
278 {"new file mode ", false, parseGitHeaderCreatedMode},
279 {"copy from ", false, parseGitHeaderCopyFrom},
280 {"copy to ", false, parseGitHeaderCopyTo},
281 {"rename old ", false, parseGitHeaderRenameFrom},
282 {"rename new ", false, parseGitHeaderRenameTo},
283 {"rename from ", false, parseGitHeaderRenameFrom},
284 {"rename to ", false, parseGitHeaderRenameTo},
285 {"similarity index ", false, parseGitHeaderScore},
286 {"dissimilarity index ", false, parseGitHeaderScore},
287 {"index ", false, parseGitHeaderIndex},
288 } {
289 if strings.HasPrefix(line, hdr.prefix) {
290 if hdr.parse != nil {
291 err = hdr.parse(f, line[len(hdr.prefix):], defaultName)
292 }
293 return hdr.end, err
294 }
295 }
296
297 // unknown line indicates the end of the header
298 // this usually happens if the diff is empty
299 return true, nil
300}
301
302func parseGitHeaderOldName(f *File, line, defaultName string) error {
303 name, _, err := parseName(line, '\t', 1)

Callers 2

TestParseGitHeaderDataFunction · 0.85
ParseGitFileHeaderMethod · 0.85

Calls

no outgoing calls

Tested by 1

TestParseGitHeaderDataFunction · 0.68