summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--argv.go1
-rw-r--r--doClean.go44
-rw-r--r--main.go2
3 files changed, 22 insertions, 25 deletions
diff --git a/argv.go b/argv.go
index 4f7acd4..99156e3 100644
--- a/argv.go
+++ b/argv.go
@@ -115,6 +115,7 @@ type DevCmd struct {
}
type CleanCmd struct {
+ List *EmptyCmd `arg:"subcommand:list" help:"list not clean repos"`
Fix *EmptyCmd `arg:"subcommand:fix" help:"try to fix problems"`
Repo string `arg:"--repo" help:"work on one specific git repository"`
}
diff --git a/doClean.go b/doClean.go
index 9aae91a..f8ba04e 100644
--- a/doClean.go
+++ b/doClean.go
@@ -51,17 +51,21 @@ func doResetRepo(repo *gitpb.Repo) error {
// reverts all repos back to the original master branches
// automatically deletes local devel and user branches
-func doClean() error {
+func doClean() (string, error) {
if argv.Clean.Repo != "" {
setForgeMode(forgepb.ForgeMode_CLEAN)
- log.Info("only reset repo:", argv.Clean.Repo)
+ s := log.Sprintf("only reset repo: %s", argv.Clean.Repo)
if found := me.forge.Repos.FindByNamespace(argv.Clean.Repo); found != nil {
- return doResetRepo(found)
+ return s, doResetRepo(found)
}
if found := me.forge.Repos.FindByFullPath(argv.Clean.Repo); found != nil {
- return doResetRepo(found)
+ return s, doResetRepo(found)
}
- return log.Errorf("repo not found: %s", argv.Clean.Repo)
+ return "cleaned working dir", log.Errorf("repo not found: %s", argv.Clean.Repo)
+ }
+ if argv.Clean.List != nil {
+ s, err := doCleanList()
+ return s, err
}
if me.forge.Config.Mode == forgepb.ForgeMode_NORMAL {
@@ -85,13 +89,16 @@ func doClean() error {
doResetRepo(repo)
}
+ me.forge.Repos.Save()
+ return "all repos should be clean", nil
+}
+
+func doCleanList() (string, error) {
found := gitpb.NewRepos()
total := 0
// find all repos that aren't "clean"
- all = me.forge.Repos.SortByFullPath()
- for all.Scan() {
- repo := all.Next()
+ for repo := range me.forge.Repos.IterByFullPath() {
total += 1
// find repos not on master branch
@@ -119,24 +126,13 @@ func doClean() error {
}
}
- // display all the repos that aren't clean to the user
- log.Printf("\n") // padding for now
- if argv.Verbose {
- me.forge.PrintHumanTableDirty(found)
+ var s string
+ if found.Len() == 0 {
+ s = log.Sprintf("%d repos are not clean", found.Len())
} else {
- me.forge.PrintHumanTable(found)
+ s = log.Sprintf("All %d repos are clean", me.forge.Repos.Len())
}
- log.Printf("\n") // padding for now
-
- me.forge.Repos.Save()
- var hmm int
- hmm = found.Len()
- if hmm == 0 {
- log.Printf("%d repos are not clean\n", hmm)
- } else {
- log.Info("All repos are clean", total, hmm)
- }
- return nil
+ return s, nil
}
func doRepoCleanDevel(repo *gitpb.Repo) error {
diff --git a/main.go b/main.go
index 1fe1828..07c5459 100644
--- a/main.go
+++ b/main.go
@@ -98,7 +98,7 @@ func main() {
}
if argv.Clean != nil {
- err = doClean()
+ s, err = doClean()
}
if argv.Mode != nil {