diff options
| author | Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> | 2018-11-17 01:17:51 +0300 |
|---|---|---|
| committer | Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> | 2018-11-17 01:17:51 +0300 |
| commit | 52ef4641956f3ce07c7d63bf69648e8dd8d73efe (patch) | |
| tree | 7c4716a98cff4d9a600b8bef5eb276ce2987d259 /main.go | |
| parent | added command line parser. (diff) | |
| download | gitbatch-52ef4641956f3ce07c7d63bf69648e8dd8d73efe.tar.gz | |
imporvement has been done
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 70 |
1 files changed, 41 insertions, 29 deletions
@@ -1,22 +1,27 @@ package main import ( + "fmt" "io/ioutil" "log" + "strings" "os" - "os/exec" - "syscall" "gopkg.in/alecthomas/kingpin.v2" + "gopkg.in/src-d/go-git.v4" + "gopkg.in/src-d/go-git.v4/plumbing" ) var ( currentDir, err = os.Getwd() dir = kingpin.Flag("directory", "Directory to roam for git repositories.").Default(currentDir).Short('d').String() + repoPattern = kingpin.Flag("pattern", "Pattern to filter repositories").Short('p').String() + branch = kingpin.Flag("branch", "branch to be pulled").Default("master").Short('b').String() + remote = kingpin.Flag("remote", "remote name te be pulled").Default("origin").Short('r').String() ) func main() { kingpin.Parse() - log.Printf("the diretory under investigation is %s", *dir) + log.Printf("%s is your repo pattern", *repoPattern) FindRepos(*dir) } @@ -27,39 +32,46 @@ func FindRepos(directory string) []string { if err != nil { log.Fatal(err) } - - for _, f := range files { - if IsRepo((directory + "/" + f.Name())) == true { - log.Println(f.Name() + " is a git repository") + filteredFiles := FilterRepos(files) + for _, f := range filteredFiles { + repo := directory + "/" + f.Name() + r, err := git.PlainOpen(repo) + if err !=nil { + continue } + // Get the working directory for the repository + w, err := r.Worktree() + CheckIfError(err) + + ref := plumbing.ReferenceName("refs/heads/" + *branch) + err = w.Pull(&git.PullOptions{ + RemoteName: *remote, + Progress: os.Stdout, + ReferenceName: ref, + }) + CheckIfError(err) } return gitRepositories } -func IsRepo(directory string) bool { - - argstr := []string{ "-C", directory, "status"} - - cmd := exec.Command("git", argstr...) - - if err := cmd.Start(); err != nil { - log.Fatalf("cmd.Start: %v") - } - - if err := cmd.Wait(); err != nil { - if exiterr, ok := err.(*exec.ExitError); ok { - // The program has exited with an exit code != 0 - - // Do nothing - if status, ok := exiterr.Sys().(syscall.WaitStatus); ok { - log.Printf(directory + " is not a git repository, git command return code: %d", status.ExitStatus()) - } +func FilterRepos(files []os.FileInfo) []os.FileInfo { + var filteredRepos []os.FileInfo + for _, f := range files { + if strings.Contains(f.Name(), *repoPattern) { + filteredRepos = append(filteredRepos, f) } else { - log.Fatalf("cmd.Wait: %v", err) + continue } - } else { - return true } - return false + return filteredRepos } +// CheckIfError should be used to naively panics if an error is not nil. +func CheckIfError(err error) { + if err == nil { + return + } + + fmt.Printf("\x1b[31;1m%s\x1b[0m\n", fmt.Sprintf("error: %s", err)) + os.Exit(1) +} |
