summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile9
-rw-r--r--argv.go2
-rw-r--r--main.go58
3 files changed, 58 insertions, 11 deletions
diff --git a/Makefile b/Makefile
index a449dc0..ee24d40 100644
--- a/Makefile
+++ b/Makefile
@@ -62,3 +62,12 @@ git-clone:
debian:
go-deb --no-gui --repo go.wit.com/apps/go-clone
+
+pull: build
+ ./go-clone --dry-run --pull
+
+pullreal: build
+ ./go-clone --pull
+
+fetch: build
+ ./go-clone --dry-run --fetch
diff --git a/argv.go b/argv.go
index 2d04a27..97541a2 100644
--- a/argv.go
+++ b/argv.go
@@ -14,6 +14,8 @@ type args struct {
GoSrc bool `arg:"--go-src" default:"true" help:"only work in ~/go/src"`
DryRun bool `arg:"--dry-run" help:"show what would be run"`
Recursive bool `arg:"--recursive" default:"false" help:"resursively clone all dependencies"`
+ Pull bool `arg:"--pull" default:"false" help:"run 'git pull' on all your repos"`
+ // Fetch bool `arg:"--fetch" default:"false" help:"run 'git fetch' on all your repos"`
}
func (a args) Description() string {
diff --git a/main.go b/main.go
index ab4cb40..08cfbe3 100644
--- a/main.go
+++ b/main.go
@@ -22,11 +22,6 @@ var rv *repolist.RepoList
func main() {
pp := arg.MustParse(&argv)
- if argv.Repo == "" {
- pp.WriteHelp(os.Stdout)
- os.Exit(0)
- }
-
// for very new users or users unfamilar with the command line, this may help them
if argv.Repo == "version" || argv.Repo == "help" || argv.Repo == "?" {
pp.WriteHelp(os.Stdout)
@@ -47,6 +42,38 @@ func main() {
b := gui.RawBox()
rv = repolist.AutotypistView(b)
+ log.Info("got here")
+ if argv.Pull {
+ count := scanForRepos(wdir)
+ log.Info("Total repositories:", count)
+ log.Info("Going to run git pull in each one")
+ log.Sleep(1)
+ pull := []string{"git", "pull"}
+ loop := rv.ReposSortByName()
+ var trycount, errcount int
+ for loop.Scan() {
+ repo := loop.Repo()
+ if argv.DryRun {
+ log.Info("git pull --dry-run", repo.Status.Path())
+ } else {
+ trycount += 1
+ log.Info("actually run: git pull:", repo.Status.Path())
+ if err := shell.PwdRun(repo.Status.Path(), pull); err != nil {
+ log.Info("git pull error:", err)
+ errcount += 1
+ }
+ }
+ }
+ log.Info("Total repositories:", count, "Total attempted:", trycount, "Errors:", errcount)
+ os.Exit(0)
+ }
+
+ // if the user didn't provide a repo, stop here
+ if argv.Repo == "" {
+ pp.WriteHelp(os.Stdout)
+ os.Exit(0)
+ }
+
os.Setenv("REPO_AUTO_CLONE", "true")
newr, err := rv.NewRepo(argv.Repo)
if err != nil {
@@ -98,12 +125,6 @@ func main() {
rv.MakeGoWork()
shell.RunPath(wdir, []string{"go", "work", "use"})
}
-
- /*
- for _, repo := range rv.AllRepos() {
- log.Info("found repo", repo.GoPath(), repo.Status.Path())
- }
- */
}
// look for or make a go.work file
@@ -174,3 +195,18 @@ func digup(path string) (string, error) {
return "", fmt.Errorf("no go.work file found")
}
+
+func scanForRepos(wdir string) int {
+ var count int
+ log.Info("scanning for repo in:", filepath.Join(wdir, argv.Repo))
+
+ // rv.NewRepo("go.wit.com/apps/helloworld")
+ for _, path := range repostatus.ScanGitDirectories(wdir) {
+ count += 1
+ gopath := strings.TrimPrefix(path, wdir)
+ gopath = strings.Trim(gopath, "/")
+ // log.Info("Also should add:", gopath)
+ rv.NewRepo(gopath)
+ }
+ return count
+}