Fix file rename/copy not supported by indexer (#9965)

Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
guillep2k 2020-01-24 20:26:49 -03:00 committed by techknowlogick
parent 700611cc18
commit ee26f042c4
1 changed files with 27 additions and 2 deletions

View File

@ -116,7 +116,12 @@ func nonGenesisChanges(repo *models.Repository, revision string) (*repoChanges,
if len(line) == 0 { if len(line) == 0 {
continue continue
} }
filename := strings.TrimSpace(line[1:]) fields := strings.Split(line, "\t")
if len(fields) < 2 {
log.Warn("Unparseable output for diff --name-status: `%s`)", line)
continue
}
filename := fields[1]
if len(filename) == 0 { if len(filename) == 0 {
continue continue
} else if filename[0] == '"' { } else if filename[0] == '"' {
@ -126,11 +131,31 @@ func nonGenesisChanges(repo *models.Repository, revision string) (*repoChanges,
} }
} }
switch status := line[0]; status { switch status := fields[0][0]; status {
case 'M', 'A': case 'M', 'A':
updatedFilenames = append(updatedFilenames, filename) updatedFilenames = append(updatedFilenames, filename)
case 'D': case 'D':
changes.RemovedFilenames = append(changes.RemovedFilenames, filename) changes.RemovedFilenames = append(changes.RemovedFilenames, filename)
case 'R', 'C':
if len(fields) < 3 {
log.Warn("Unparseable output for diff --name-status: `%s`)", line)
continue
}
dest := fields[2]
if len(dest) == 0 {
log.Warn("Unparseable output for diff --name-status: `%s`)", line)
continue
}
if dest[0] == '"' {
dest, err = strconv.Unquote(dest)
if err != nil {
return nil, err
}
}
if status == 'R' {
changes.RemovedFilenames = append(changes.RemovedFilenames, filename)
}
updatedFilenames = append(updatedFilenames, dest)
default: default:
log.Warn("Unrecognized status: %c (line=%s)", status, line) log.Warn("Unrecognized status: %c (line=%s)", status, line)
} }