diff options
-rw-r--r-- | worktree.go | 11 | ||||
-rw-r--r-- | worktree_darwin.go | 20 | ||||
-rw-r--r-- | worktree_linux.go | 20 |
3 files changed, 44 insertions, 7 deletions
diff --git a/worktree.go b/worktree.go index 69ccd05..83e3bd3 100644 --- a/worktree.go +++ b/worktree.go @@ -6,7 +6,6 @@ import ( "io" "os" "syscall" - "time" "srcd.works/go-git.v4/plumbing" "srcd.works/go-git.v4/plumbing/format/index" @@ -72,6 +71,8 @@ func (w *Worktree) checkoutFile(f *object.File, idx *index.Index) error { return w.indexFile(f, idx) } +var fillSystemInfo func(e *index.Entry, os *syscall.Stat_t) + func (w *Worktree) indexFile(f *object.File, idx *index.Index) error { fi, err := w.fs.Stat(f.Name) if err != nil { @@ -89,12 +90,8 @@ func (w *Worktree) indexFile(f *object.File, idx *index.Index) error { // if the FileInfo.Sys() comes from os the ctime, dev, inode, uid and gid // can be retrieved, otherwise this doesn't apply os, ok := fi.Sys().(*syscall.Stat_t) - if ok { - e.CreatedAt = time.Unix(int64(os.Ctim.Sec), int64(os.Ctim.Nsec)) - e.Dev = uint32(os.Dev) - e.Inode = uint32(os.Ino) - e.GID = os.Gid - e.UID = os.Uid + if ok && fillSystemInfo != nil { + fillSystemInfo(&e, os) } idx.Entries = append(idx.Entries, e) diff --git a/worktree_darwin.go b/worktree_darwin.go new file mode 100644 index 0000000..a6ac65d --- /dev/null +++ b/worktree_darwin.go @@ -0,0 +1,20 @@ +// +build darwin freebsd netbsd openbsd + +package git + +import ( + "syscall" + "time" + + "srcd.works/go-git.v4/plumbing/format/index" +) + +func init() { + fillSystemInfo = func(e *index.Entry, os *syscall.Stat_t) { + e.CreatedAt = time.Unix(int64(os.Atimespec.Sec), int64(os.Atimespec.Nsec)) + e.Dev = uint32(os.Dev) + e.Inode = uint32(os.Ino) + e.GID = os.Gid + e.UID = os.Uid + } +} diff --git a/worktree_linux.go b/worktree_linux.go new file mode 100644 index 0000000..fcec30a --- /dev/null +++ b/worktree_linux.go @@ -0,0 +1,20 @@ +// +build linux + +package git + +import ( + "syscall" + "time" + + "srcd.works/go-git.v4/plumbing/format/index" +) + +func init() { + fillSystemInfo = func(e *index.Entry, os *syscall.Stat_t) { + e.CreatedAt = time.Unix(int64(os.Ctim.Sec), int64(os.Ctim.Nsec)) + e.Dev = uint32(os.Dev) + e.Inode = uint32(os.Ino) + e.GID = os.Gid + e.UID = os.Uid + } +} |