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)
| 260 | // It returns true when header parsing is complete; in that case, line was the |
| 261 | // first line of non-header content. |
| 262 | func 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 | |
| 302 | func parseGitHeaderOldName(f *File, line, defaultName string) error { |
| 303 | name, _, err := parseName(line, '\t', 1) |
no outgoing calls