From 72733e8203654cd26464c8c5a6c955b025102cca Mon Sep 17 00:00:00 2001 From: Stefan Majewsky Date: Tue, 2 May 2017 21:22:20 +0200 Subject: restructure rtree into gofu (with rtree as the first applet) --- pkg/rtree/main.go | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 pkg/rtree/main.go (limited to 'pkg/rtree/main.go') diff --git a/pkg/rtree/main.go b/pkg/rtree/main.go new file mode 100644 index 0000000..9513d06 --- /dev/null +++ b/pkg/rtree/main.go @@ -0,0 +1,115 @@ +/******************************************************************************* +* +* Copyright 2017 Stefan Majewsky +* +* This program is free software: you can redistribute it and/or modify it under +* the terms of the GNU General Public License as published by the Free Software +* Foundation, either version 3 of the License, or (at your option) any later +* version. +* +* This program is distributed in the hope that it will be useful, but WITHOUT ANY +* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +* A PARTICULAR PURPOSE. See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see . +* +*******************************************************************************/ + +package rtree + +import ( + "fmt" + "os" + + "github.com/majewsky/gofu/pkg/util" +) + +//Exec executes the rtree applet and does not return. The argument is os.Args +//minus the leading "rtree" or "gofu rtree". +func Exec(args []string) { + if len(args) == 0 { + usageAndExit() + } + switch args[0] { + case "get": + panic("unimplemented") + case "drop": + panic("unimplemented") + case "index": + if len(args) != 1 { + usageAndExit() + } + commandIndex() + case "repos": + if len(args) != 1 { + usageAndExit() + } + commandRepos() + case "remotes": + if len(args) != 1 { + usageAndExit() + } + commandRemotes() + case "import": + panic("unimplemented") + case "each": + if len(args) < 2 { + usageAndExit() + } + commandEach(args[1], args[2:]) + default: + usageAndExit() + } + + os.Exit(0) +} + +func usageAndExit() { + fmt.Fprintln(os.Stderr, "Usage:") + fmt.Fprintln(os.Stderr, " rtree [get|drop] ") + fmt.Fprintln(os.Stderr, " rtree [index|repos|remotes]") + fmt.Fprintln(os.Stderr, " rtree import ") + fmt.Fprintln(os.Stderr, " rtree each ") + os.Exit(1) +} + +func commandIndex() { + index := ReadIndex() + util.FatalIfError(index.InteractiveRebuild()) + index.Write() +} + +func commandRepos() { + index := ReadIndex() + var items []string + for _, repo := range index.Repos { + items = append(items, repo.CheckoutPath) + } + util.ShowSorted(items) +} + +func commandRemotes() { + index := ReadIndex() + var items []string + for _, repo := range index.Repos { + for _, remote := range repo.Remotes { + items = append(items, remote.URL) + } + } + util.ShowSorted(items) +} + +func commandEach(command string, args []string) { + allOK := true + for _, repo := range ReadIndex().Repos { + ok := repo.InteractiveExec(command, args...) + if !ok { + allOK = false + } + } + + if !allOK { + os.Exit(1) + } +} -- cgit v1.3.1