diff options
| author | Stefan Majewsky <majewsky@gmx.net> | 2017-05-05 22:15:17 +0200 |
|---|---|---|
| committer | Stefan Majewsky <majewsky@gmx.net> | 2017-05-05 22:15:17 +0200 |
| commit | a54004fbd960e4851f1f249ce0d030cf56b20f1b (patch) | |
| tree | 62189d3fb0ad5205cc5a160a008057a3e21d31d0 /pkg/rtree/main.go | |
| parent | 22d80eda906d1958dfde5072717a12995ee6df2d (diff) | |
| download | gofu-a54004fbd960e4851f1f249ce0d030cf56b20f1b.tar.gz | |
propagate errors upwards properly
Diffstat (limited to 'pkg/rtree/main.go')
| -rw-r--r-- | pkg/rtree/main.go | 87 |
1 files changed, 54 insertions, 33 deletions
diff --git a/pkg/rtree/main.go b/pkg/rtree/main.go index 683daeb..b77d6ca 100644 --- a/pkg/rtree/main.go +++ b/pkg/rtree/main.go @@ -31,47 +31,62 @@ func Exec(args []string) { if len(args) == 0 { usageAndExit() } + + index, errs := ReadIndex() + if len(errs) > 0 { + for _, err := range errs { + util.ShowError(err) + } + os.Exit(255) + } + + var err error switch args[0] { case "get": if len(args) != 2 { usageAndExit() } - commandGet(args[1]) + err = commandGet(index, args[1]) case "drop": if len(args) != 2 { usageAndExit() } - commandDrop(args[1]) + err = commandDrop(index, args[1]) case "index": if len(args) != 1 { usageAndExit() } - commandIndex() + err = commandIndex(index) case "repos": if len(args) != 1 { usageAndExit() } - commandRepos() + commandRepos(index) case "remotes": if len(args) != 1 { usageAndExit() } - commandRemotes() + commandRemotes(index) case "import": if len(args) != 2 { usageAndExit() } - commandImport(args[1]) + err = commandImport(index, args[1]) case "each": if len(args) < 2 { usageAndExit() } - commandEach(args[1], args[2:]) + commandEach(index, args[1], args[2:]) default: usageAndExit() } - os.Exit(0) + if err == nil { + os.Exit(0) + } else { + util.ShowError(err) + os.Exit(1) + } } func usageAndExit() { @@ -83,31 +98,36 @@ func usageAndExit() { os.Exit(1) } -func commandGet(url string) { - index := ReadIndex() - repo := index.InteractiveFindRepo(url, true) - if repo != nil { - fmt.Println(repo.AbsolutePath()) +func commandGet(index *Index, url string) error { + repo, err := index.InteractiveFindRepo(url, true) + if err != nil { + return err } + fmt.Println(repo.AbsolutePath()) + return nil } -func commandDrop(url string) { - index := ReadIndex() - repo := index.InteractiveFindRepo(url, false) - if repo != nil { - index.InteractiveDropRepo(repo) - index.Write() +func commandDrop(index *Index, url string) error { + repo, err := index.InteractiveFindRepo(url, true) + if err != nil { + return err + } + err = index.InteractiveDropRepo(repo) + if err != nil { + return err } + return index.Write() } -func commandIndex() { - index := ReadIndex() - util.FatalIfError(index.InteractiveRebuild()) - index.Write() +func commandIndex(index *Index) error { + err := index.InteractiveRebuild() + if err != nil { + return err + } + return index.Write() } -func commandRepos() { - index := ReadIndex() +func commandRepos(index *Index) { var items []string for _, repo := range index.Repos { items = append(items, repo.CheckoutPath) @@ -115,8 +135,7 @@ func commandRepos() { util.ShowSorted(items) } -func commandRemotes() { - index := ReadIndex() +func commandRemotes(index *Index) { var items []string for _, repo := range index.Repos { for _, remote := range repo.Remotes { @@ -126,9 +145,9 @@ func commandRemotes() { util.ShowSorted(items) } -func commandEach(command string, args []string) { +func commandEach(index *Index, command string, args []string) { allOK := true - for _, repo := range ReadIndex().Repos { + for _, repo := range index.Repos { ok := repo.InteractiveExec(command, args...) if !ok { allOK = false @@ -140,8 +159,10 @@ func commandEach(command string, args []string) { } } -func commandImport(dirPath string) { - index := ReadIndex() - index.InteractiveImportRepo(dirPath) - index.Write() +func commandImport(index *Index, dirPath string) error { + err := index.InteractiveImportRepo(dirPath) + if err != nil { + return err + } + return index.Write() } |
