Bladeren bron

Introduce a config struct and cmdline flags

Lucas Stadler 10 jaren geleden
bovenliggende
commit
bef8023f7c
1 gewijzigde bestanden met toevoegingen van 19 en 8 verwijderingen
  1. 19 8
      go/stars/stars.go

+ 19 - 8
go/stars/stars.go

3
3
4
import (
4
import (
5
	"encoding/json"
5
	"encoding/json"
6
	"flag"
6
	"fmt"
7
	"fmt"
7
	"os"
8
	"os"
8
	"os/exec"
9
	"os/exec"
12
	"time"
13
	"time"
13
)
14
)
14
15
15
var userName = "heyLu"
16
var directory = "github-stars"
17
var concurrency = 10
16
var config struct {
17
	userName    string
18
	directory   string
19
	concurrency int
20
}
21
22
func init() {
23
	flag.StringVar(&config.userName, "user", "heyLu", "The GitHub user to fetch stars for")
24
	flag.StringVar(&config.directory, "directory", "github-stars", "The directory to store the repos in")
25
	flag.IntVar(&config.concurrency, "concurrency", 10, "The number of repos to update concurrently")
26
}
18
27
19
func main() {
28
func main() {
29
	flag.Parse()
30
20
	var stars []starInfo
31
	var stars []starInfo
21
	decoder := json.NewDecoder(os.Stdin)
32
	decoder := json.NewDecoder(os.Stdin)
22
	err := decoder.Decode(&stars)
33
	err := decoder.Decode(&stars)
24
		panic(err)
35
		panic(err)
25
	}
36
	}
26
37
27
	sem := make(chan bool, 10)
38
	sem := make(chan bool, config.concurrency)
28
	var wg sync.WaitGroup
39
	var wg sync.WaitGroup
29
40
30
	wg.Add(len(stars))
41
	wg.Add(len(stars))
49
}
60
}
50
61
51
func updateRepo(info starInfo) error {
62
func updateRepo(info starInfo) error {
52
	f, err := os.Open(path.Join(directory, info.RepoName))
63
	f, err := os.Open(path.Join(config.directory, info.RepoName))
53
	if err != nil {
64
	if err != nil {
54
		if os.IsNotExist(err) {
65
		if os.IsNotExist(err) {
55
			return gitClone(info)
66
			return gitClone(info)
73
84
74
func gitClone(info starInfo) error {
85
func gitClone(info starInfo) error {
75
	cmd := exec.Command("git", "clone", info.CloneUrl,
86
	cmd := exec.Command("git", "clone", info.CloneUrl,
76
		path.Join(directory, info.RepoName))
87
		path.Join(config.directory, info.RepoName))
77
	return cmd.Run()
88
	return cmd.Run()
78
}
89
}
79
90
80
func gitPull(info starInfo) error {
91
func gitPull(info starInfo) error {
81
	cmd := exec.Command("git", "-C", path.Join(directory, info.RepoName), "pull")
92
	cmd := exec.Command("git", "-C", path.Join(config.directory, info.RepoName), "pull")
82
	return cmd.Run()
93
	return cmd.Run()
83
}
94
}
84
95
85
func gitLastCommit(info starInfo) (time.Time, error) {
96
func gitLastCommit(info starInfo) (time.Time, error) {
86
	cmd := exec.Command("git", "-C", path.Join(directory, info.RepoName),
97
	cmd := exec.Command("git", "-C", path.Join(config.directory, info.RepoName),
87
		"log", "-n", "1", "--format=%cd", "--date=iso8601-strict")
98
		"log", "-n", "1", "--format=%cd", "--date=iso8601-strict")
88
	out, err := cmd.Output()
99
	out, err := cmd.Output()
89
	if err != nil {
100
	if err != nil {