-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgit.go
76 lines (63 loc) · 1.87 KB
/
git.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package simver
import "context"
type GitProvider interface {
GetHeadRef(ctx context.Context) (string, error)
CommitFromRef(ctx context.Context, ref string) (string, error)
Branch(ctx context.Context) (string, error)
RepoName(ctx context.Context) (string, string, error)
Dirty(ctx context.Context) (bool, error)
}
type PRDetails struct {
Number int
HeadBranch string
BaseBranch string
RootBranch string // always main
Merged bool
MergeCommit string
HeadCommit string
PotentialMergeCommit string
BaseCommit string
RootCommit string
}
// Base implements RefProvider.
func (me *PRDetails) Base() string {
return me.BaseCommit
}
// Head implements RefProvider.
func (me *PRDetails) Head() string {
return me.HeadCommit
}
// Merge implements RefProvider.
func (me *PRDetails) Merge() string {
return me.MergeCommit
}
// Root implements RefProvider.
func (me *PRDetails) Root() string {
return me.RootCommit
}
var _ RefProvider = &PRDetails{}
func NewPushSimulatedPRDetails(parentCommit, headCommit, branch string) *PRDetails {
return &PRDetails{
Number: 0,
HeadBranch: branch,
BaseBranch: branch,
RootBranch: branch,
Merged: true,
MergeCommit: headCommit,
HeadCommit: headCommit,
RootCommit: parentCommit,
BaseCommit: parentCommit,
PotentialMergeCommit: "",
}
}
func (dets *PRDetails) IsSimulatedPush() bool {
return dets.Number == 0
}
type PRProvider interface {
PRDetailsByPRNumber(ctx context.Context, prNumber int) (*PRDetails, bool, error)
PRDetailsByCommit(ctx context.Context, commit string) (*PRDetails, bool, error)
PRDetailsByBranch(ctx context.Context, branch string) (*PRDetails, bool, error)
}
type PRResolver interface {
CurrentPR(ctx context.Context) (*PRDetails, error)
}