Skip to content

Commit ee26f04

Browse files
guillep2kzeripath
authored andcommitted
Fix file rename/copy not supported by indexer (#9965)
Co-authored-by: zeripath <[email protected]>
1 parent 700611c commit ee26f04

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

modules/indexer/code/git.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,12 @@ func nonGenesisChanges(repo *models.Repository, revision string) (*repoChanges,
116116
if len(line) == 0 {
117117
continue
118118
}
119-
filename := strings.TrimSpace(line[1:])
119+
fields := strings.Split(line, "\t")
120+
if len(fields) < 2 {
121+
log.Warn("Unparseable output for diff --name-status: `%s`)", line)
122+
continue
123+
}
124+
filename := fields[1]
120125
if len(filename) == 0 {
121126
continue
122127
} else if filename[0] == '"' {
@@ -126,11 +131,31 @@ func nonGenesisChanges(repo *models.Repository, revision string) (*repoChanges,
126131
}
127132
}
128133

129-
switch status := line[0]; status {
134+
switch status := fields[0][0]; status {
130135
case 'M', 'A':
131136
updatedFilenames = append(updatedFilenames, filename)
132137
case 'D':
133138
changes.RemovedFilenames = append(changes.RemovedFilenames, filename)
139+
case 'R', 'C':
140+
if len(fields) < 3 {
141+
log.Warn("Unparseable output for diff --name-status: `%s`)", line)
142+
continue
143+
}
144+
dest := fields[2]
145+
if len(dest) == 0 {
146+
log.Warn("Unparseable output for diff --name-status: `%s`)", line)
147+
continue
148+
}
149+
if dest[0] == '"' {
150+
dest, err = strconv.Unquote(dest)
151+
if err != nil {
152+
return nil, err
153+
}
154+
}
155+
if status == 'R' {
156+
changes.RemovedFilenames = append(changes.RemovedFilenames, filename)
157+
}
158+
updatedFilenames = append(updatedFilenames, dest)
134159
default:
135160
log.Warn("Unrecognized status: %c (line=%s)", status, line)
136161
}

0 commit comments

Comments
 (0)