-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathomu.go
More file actions
93 lines (77 loc) · 1.69 KB
/
omu.go
File metadata and controls
93 lines (77 loc) · 1.69 KB
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package main
import (
"bytes"
"errors"
"fmt"
"github.com/go-git/go-git/v5"
"log"
"os"
"path"
)
// LogErr is a custom logger
func LogErr(err error) {
logger := log.New(os.Stderr, "omu: ", 0)
logger.Fatalln(err)
}
func UpdateRepo(gitFolder string) error {
repo, err := git.PlainOpen(gitFolder)
if err != nil {
return err
}
worktree, err := repo.Worktree()
if err != nil {
return err
}
var output bytes.Buffer
if err = worktree.Pull(&git.PullOptions{
RemoteName: "origin",
ReferenceName: "refs/heads/master",
SingleBranch: true,
Progress: &output,
}); err != nil {
return err
}
if output.String() != "" {
fmt.Println(output.String())
}
return nil
}
func UpdateFolder(folder string) error {
fmt.Printf("Updating %s...\n\n", folder)
homeFolder, err := os.UserHomeDir()
if err != nil {
return err
}
omzFolder := path.Join(homeFolder, ".oh-my-zsh/custom", folder)
if _, err := os.Stat(omzFolder); errors.Is(err, os.ErrNotExist) {
return err
}
entries, err := os.ReadDir(omzFolder)
if err != nil {
return err
}
for _, e := range entries {
if e.IsDir() && e.Name() != "example" {
fmt.Println("Updating:", e.Name())
gitFolder := path.Join(omzFolder, e.Name())
if updateErr := UpdateRepo(gitFolder); updateErr != nil {
if errors.Is(updateErr, git.NoErrAlreadyUpToDate) {
fmt.Printf("%s is %s\n\n", e.Name(), updateErr)
continue
} else {
return fmt.Errorf(fmt.Sprintf("%s: %v", e.Name(), updateErr))
}
}
fmt.Printf(e.Name(), "updated successfully\n")
}
}
return nil
}
func main() {
if err := UpdateFolder("plugins"); err != nil {
LogErr(err)
}
if err := UpdateFolder("themes"); err != nil {
LogErr(err)
}
}