main
1package git
2
3import (
4 "time"
5)
6
7type Ref struct {
8 ref string
9 dirName string
10}
11
12func NewRef(ref string) Ref {
13 return Ref{
14 ref: ref,
15 dirName: RefToFileName(ref),
16 }
17}
18
19func (r Ref) IsEmpty() bool {
20 return r.ref == ""
21}
22
23func (r Ref) String() string {
24 return r.ref
25}
26
27func (r Ref) DirName() string {
28 return r.dirName
29}
30
31type Blob struct {
32 Ref Ref
33 Mode string
34 Path string
35 FileName string
36 Size int64
37}
38
39type Commit struct {
40 Hash string
41 ShortHash string
42 Subject string
43 Body string
44 Author string
45 Email string
46 Date time.Time
47 CommitterName string
48 CommitterEmail string
49 CommitterDate time.Time
50 Parents []string
51 Branch Ref
52 RefNames []RefName
53 Href string
54}
55
56type RefKind string
57
58const (
59 RefKindHEAD RefKind = "HEAD"
60 RefKindRemoteHEAD RefKind = "RemoteHEAD"
61 RefKindBranch RefKind = "Branch"
62 RefKindRemote RefKind = "Remote"
63 RefKindTag RefKind = "Tag"
64)
65
66type RefName struct {
67 Kind RefKind
68 Name string // Name is the primary name of the ref as shown by `git log %D` token (left side for pointers)
69 Target string // Target is set for symbolic refs like "HEAD -> main" or "origin/HEAD -> origin/main"
70}
71
72type Tag struct {
73 Name string
74 Date time.Time
75 CommitHash string
76}