aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--worktree.go11
-rw-r--r--worktree_darwin.go20
-rw-r--r--worktree_linux.go20
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
+ }
+}