Skip to content

Commit bef6519

Browse files
committed
modulise adj git handling
1 parent bb370e4 commit bef6519

1 file changed

Lines changed: 98 additions & 0 deletions

File tree

backend/internal/adj/git.go

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package adj
2+
3+
import (
4+
"os"
5+
6+
"github.com/go-git/go-git/v5"
7+
"github.com/go-git/go-git/v5/plumbing"
8+
)
9+
10+
// WARNING: Doing tricks on it
11+
func updateRepo(AdjBranch string) error {
12+
var repo *git.Repository
13+
var err error
14+
15+
if AdjBranch == "" {
16+
// Makes use of submodule
17+
return nil
18+
} else {
19+
if _, err = os.Stat(RepoPath); os.IsNotExist(err) {
20+
repo, err = git.PlainClone(RepoPath, false, &git.CloneOptions{
21+
URL: RepoUrl,
22+
ReferenceName: plumbing.NewBranchReferenceName(AdjBranch),
23+
SingleBranch: true,
24+
Depth: 1,
25+
})
26+
if err != nil {
27+
return err
28+
}
29+
} else {
30+
repo, err = git.PlainOpen(RepoPath)
31+
if err != nil {
32+
return err
33+
}
34+
}
35+
36+
err = repo.Fetch(&git.FetchOptions{
37+
RemoteName: "origin",
38+
Force: true,
39+
})
40+
if err != nil && err != git.NoErrAlreadyUpToDate {
41+
return err
42+
}
43+
44+
head, err := repo.Head()
45+
if err != nil {
46+
return err
47+
}
48+
49+
branch := head.Name().Short()
50+
51+
worktree, err := repo.Worktree()
52+
if err != nil {
53+
return err
54+
}
55+
56+
if branch != AdjBranch {
57+
localBranchRef := plumbing.NewBranchReferenceName(AdjBranch)
58+
_, err = repo.Reference(localBranchRef, false)
59+
if err != nil {
60+
remoteBranchRef := plumbing.NewRemoteReferenceName("origin", AdjBranch)
61+
remoteRef, err2 := repo.Reference(remoteBranchRef, true)
62+
if err2 != nil {
63+
return err2
64+
}
65+
66+
err = worktree.Checkout(&git.CheckoutOptions{
67+
Branch: localBranchRef,
68+
Create: true,
69+
Force: true,
70+
Hash: remoteRef.Hash(),
71+
})
72+
if err != nil {
73+
println(err.Error())
74+
return err
75+
}
76+
} else {
77+
err = worktree.Checkout(&git.CheckoutOptions{
78+
Branch: localBranchRef,
79+
Force: true,
80+
})
81+
}
82+
}
83+
84+
err = worktree.Pull(&git.PullOptions{
85+
RemoteName: "origin",
86+
SingleBranch: true,
87+
})
88+
if err != nil {
89+
if err == git.NoErrAlreadyUpToDate {
90+
return nil
91+
} else {
92+
return err
93+
}
94+
}
95+
}
96+
97+
return nil
98+
}

0 commit comments

Comments
 (0)