Skip to content
This repository has been archived by the owner on Sep 11, 2020. It is now read-only.

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

Open
martin-helmich opened this issue Mar 25, 2020 · 0 comments
Open

Comments

@martin-helmich
Copy link

martin-helmich commented Mar 25, 2020

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:

go-git/status.go

Lines 15 to 21 in 1a7db85

func (s Status) File(path string) *FileStatus {
if _, ok := (s)[path]; !ok {
s[path] = &FileStatus{Worktree: Untracked, Staging: Untracked}
}
return s[path]
}

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. 🤷‍♂

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant