Address issue #108 #109

Merged
bnavetta merged 15 commits from git_status into master 2014-09-11 02:16:39 -05:00
2 changed files with 32 additions and 6 deletions
Showing only changes of commit 80997c6fa5 - Show all commits

View File

@ -35,10 +35,21 @@ type StatusEntry struct {
} }
func statusEntryFromC(statusEntry *C.git_status_entry) StatusEntry { func statusEntryFromC(statusEntry *C.git_status_entry) StatusEntry {
var headToIndex DiffDelta = DiffDelta{}
var indexToWorkdir DiffDelta = DiffDelta{}
// Based on the libgit2 status example, head_to_index can be null in some cases
if statusEntry.head_to_index != nil {
headToIndex = diffDeltaFromC(statusEntry.head_to_index)
}
if statusEntry.index_to_workdir != nil {
indexToWorkdir = diffDeltaFromC(statusEntry.index_to_workdir)
}
return StatusEntry { return StatusEntry {
Status: Status(statusEntry.status), Status: Status(statusEntry.status),
HeadToIndex: diffDeltaFromC(statusEntry.head_to_index), HeadToIndex: headToIndex,
IndexToWorkdir: diffDeltaFromC(statusEntry.index_to_workdir), IndexToWorkdir: indexToWorkdir,
} }
} }
@ -158,6 +169,7 @@ func (v *Repository) StatusList(opts *StatusOptions) (*StatusList, error) {
if ret < 0 { if ret < 0 {
return nil, MakeGitError(ret) return nil, MakeGitError(ret)
} }
return newStatusListFromC(ptr), nil return newStatusListFromC(ptr), nil
} }

View File

@ -23,22 +23,36 @@ func TestStatusFile(t *testing.T) {
} }
} }
func TestEntryCount(t *testing.T) { func TestStatusList(t *testing.T) {
repo := createTestRepo(t) repo := createTestRepo(t)
// This commits the test repo README, so it doesn't show up in the status list and there's a head to compare to
seedTestRepo(t, repo)
defer repo.Free() defer repo.Free()
defer os.RemoveAll(repo.Workdir()) defer os.RemoveAll(repo.Workdir())
err := ioutil.WriteFile(path.Join(path.Dir(repo.Workdir()), "hello.txt"), []byte("Hello, World"), 0644) err := ioutil.WriteFile(path.Join(path.Dir(repo.Workdir()), "hello.txt"), []byte("Hello, World"), 0644)
checkFatal(t, err) checkFatal(t, err)
statusList, err := repo.StatusList(nil) opts := &StatusOptions{}
opts.Show = StatusShowIndexAndWorkdir
opts.Flags = StatusOptIncludeUntracked | StatusOptRenamesHeadToIndex | StatusOptSortCaseSensitively
statusList, err := repo.StatusList(opts)
checkFatal(t, err) checkFatal(t, err)
entryCount, err := statusList.EntryCount() entryCount, err := statusList.EntryCount()
checkFatal(t, err) checkFatal(t, err)
if entryCount != 1 { if entryCount != 1 {
// FIXME: this is 0 even though the same setup above returns the correct status, as does a call to StatusFile here t.Fatal("Incorrect number of status entries: ", entryCount)
// t.Fatal("Incorrect number of status entries: ", entryCount) }
entry, err := statusList.ByIndex(0)
checkFatal(t, err)
if entry.Status != StatusWtNew {
t.Fatal("Incorrect status flags: ", entry.Status)
}
if entry.IndexToWorkdir.NewFile.Path != "hello.txt" {
t.Fatal("Incorrect entry path: ", entry.IndexToWorkdir.NewFile.Path)
} }
} }