go-git icon indicating copy to clipboard operation
go-git copied to clipboard

File status is reported as `Untracked` for tracked+unmodified files?

Open martin-helmich opened this issue 4 years ago • 0 comments

I'm using (more like, trying to use) this library to determine if certain files in a Git repository have been modified or not.

This was my approach (error handling omitted for brevity):

repo, _ := git.PlainOpen(".")
tree, _ := repo.Worktree()
status, _ := repo.Status()

fileStatus := status.File("path/to/unmodified-file")

The file path/to/unmodified-file is (unsurprisingly) already committed to the repo and unmodified (both in staging and worktree). In this case, I would expect that fileStatus.Worktree == git.Unmodified. However, the following happens:

fmt.Println(string(fileStatus.Worktree))  // expected=" " actual="?"
fmt.Println(fileStatus.Worktree == git.Unmodified) // expected="true" actual="false"
fmt.Println(fileStatus.Worktree == git.Untracked) // expected="false" actual="true"

This seems to occur because Untracked is kind of the "default" status:

https://github.com/src-d/go-git/blob/1a7db85bca7027d90afdb5ce711622aaac9feaed/status.go#L15-L21

I'm unsure if this behaviour is intentional and I've just misunderstood how Status is supposed to work (in which case I might suggest at least clearing up the docs a little bit) or if this is an actual bug. 🤷‍♂

martin-helmich avatar Mar 25 '20 12:03 martin-helmich