diff options
Diffstat (limited to 'refs.update.go')
| -rw-r--r-- | refs.update.go | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/refs.update.go b/refs.update.go new file mode 100644 index 0000000..3266fd1 --- /dev/null +++ b/refs.update.go @@ -0,0 +1,76 @@ +package gitpb + +import ( + "slices" + "strings" + "time" + + "go.wit.com/lib/gui/shell" + "go.wit.com/log" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" +) + +// Update repo.Refs from .git/ +func (repo *Repo) UpdateGit() error { + // delete the old hash + // r.DeleteByHash(hash) + repo.Refs = nil + + tags := []string{"%(objectname)", "%(creatordate)", "%(*authordate)", "%(refname)", "%(subject)"} + format := strings.Join(tags, "_,,,_") + cmd := []string{"git", "for-each-ref", "--sort=taggerdate", "--format", format} + // log.Info("RUNNING:", strings.Join(cmd, " ")) + result := shell.PathRunQuiet(repo.FullPath, cmd) + if result.Error != nil { + log.Warn("git for-each-ref error:", result.Error) + return result.Error + } + + lines := result.Stdout + // reverse the git order + slices.Reverse(lines) + + var refName string + var hash string + var subject string + var ctime time.Time + + for i, line := range lines { + var parts []string + parts = make([]string, 0) + parts = strings.Split(line, "_,,,_") + if len(parts) != 5 { + log.Info("tag error:", i, parts) + continue + } + refName = parts[3] + hash = parts[0] + + ctime = getGitDateStamp(parts[1]) + + subject = parts[4] + } + + newr := Ref{ + Hash: hash, + Subject: subject, + RefName: refName, + Ctime: timestamppb.New(ctime), + } + + repo.AppendRef(&newr) + return nil +} + +// converts a git for-each-ref date. "Wed Feb 7 10:13:38 2024 -0600" +func getGitDateStamp(gitdefault string) time.Time { + // now := time.Now().Format("Wed Feb 7 10:13:38 2024 -0600") + const gitLayout = "Mon Jan 2 15:04:05 2006 -0700" + tagTime, err := time.Parse(gitLayout, gitdefault) + if err != nil { + log.Warn("GOT THIS IN PARSE AAA." + gitdefault + ".AAA") + log.Warn(err) + return time.Now() + } + return tagTime +} |
