summaryrefslogtreecommitdiff
path: root/refs.update.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-11-27 14:41:57 -0600
committerJeff Carr <[email protected]>2024-11-27 14:41:57 -0600
commitc51b8c96b12de401cc277b97552f5f9df959c74e (patch)
treec9e34871de6325b60a8e1de055d4f62b4eaad43b /refs.update.go
parentcedd7ea6f17451ca7eb8ae2cf2a243ba9c551430 (diff)
ideas on code structure
Diffstat (limited to 'refs.update.go')
-rw-r--r--refs.update.go76
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
+}