Skip to content

Commit 4938945

Browse files
authoredMar 16, 2023
Handle files starting with colons in WalkGitLog (#22935)
Currently gitea shows no commit information for files starting with a colon. [I set up a minimal repro repository that reproduces this error once it's migrated on gitea](https://github.com/kbolashev/colon-test) <img width="1209" alt="image" src="https://user-images.githubusercontent.com/111061261/219326625-0e6d3a86-8b58-4d67-bc24-8a78963f36b9.png"> This is happening because the filenames piped to the `git log` command are written as is, and it doesn't work when you have a colon at the start of the filename, and you need to escape it. You can test it locally, if you do ``` mkdir repo git init touch :file git add . && git commit -m "Add file with colon" git log -- :file ``` git log returns nothing. However, if you do `git log -- "\:file"`, it will show the commit with the file change. This PR escapes the starting colons in paths in the `LogNameStatusRepo` function, making gitea return commit info about the file with the bad filename. <img width="1209" alt="image" src="https://user-images.githubusercontent.com/111061261/219328299-46451246-4006-45e3-89b1-c244635ded23.png"> This error shows up only with files starting with colon, anywhere else in filename is ok. Dashes at the beginning also seem to be working. I don't know gitea internals well enough to know where else this error can pop up, so I'm keeping this PR small as suggested by your contributor guide
1 parent 39d3711 commit 4938945

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed
 

‎modules/git/log_name_status.go

+4
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ func LogNameStatusRepo(ctx context.Context, repository, head, treepath string, p
5656
} else if treepath != "" {
5757
files = append(files, treepath)
5858
}
59+
// Use the :(literal) pathspec magic to handle edge cases with files named like ":file.txt" or "*.jpg"
60+
for i, file := range files {
61+
files[i] = ":(literal)" + file
62+
}
5963
cmd.AddDashesAndList(files...)
6064

6165
go func() {

0 commit comments

Comments
 (0)