diff options
| author | Shulhan <ms@kilabit.info> | 2018-05-26 17:51:52 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2018-05-26 17:51:52 +0700 |
| commit | c0b6702db7218e63ca1be16acb7377aea2f1a281 (patch) | |
| tree | 495d96bc9515a3b26ed448c1e57ee84b1c731efa | |
| parent | 659f06c0c9df8090ce2304f79ecd7ceb6cd31b49 (diff) | |
| download | beku-c0b6702db7218e63ca1be16acb7377aea2f1a281.tar.xz | |
cmd/beku: do not initialize database, let user run "beku -S" first
| -rw-r--r-- | cmd/beku/command.go | 42 | ||||
| -rw-r--r-- | cmd/beku/main.go | 17 |
2 files changed, 32 insertions, 27 deletions
diff --git a/cmd/beku/command.go b/cmd/beku/command.go index 80a79d0..6d03684 100644 --- a/cmd/beku/command.go +++ b/cmd/beku/command.go @@ -11,6 +11,7 @@ import ( var ( errInvalidOptions = errors.New("error: invalid options") errMultiOperations = errors.New("error: only at operation may be used at a time") + errNoDB = errors.New("error: no database found") errNoOperation = errors.New("error: no operation specified") errNoTarget = errors.New("error: no targets specified") ) @@ -27,10 +28,11 @@ const ( ) type command struct { - op operation - env *beku.Env - pkgs []string - syncInto string + op operation + env *beku.Env + pkgs []string + syncInto string + firstTime bool } func (cmd *command) usage() { @@ -227,20 +229,17 @@ func (cmd *command) loadDatabase() (err error) { return } -func (cmd *command) firstTime() { - err := cmd.env.Scan() - if err != nil { - fmt.Fprintln(os.Stderr, ">>> Scan:", err) - os.Exit(1) +func (cmd *command) sync() (err error) { + if cmd.firstTime || len(cmd.pkgs) == 0 { + err = cmd.env.Rescan() + if err != nil { + return + } } - - err = cmd.env.Save("") - if err != nil { - fmt.Fprintln(os.Stderr, ">>> Save:", err) - os.Exit(1) + if len(cmd.pkgs) > 0 { + err = cmd.env.Sync(cmd.pkgs[0], cmd.syncInto) } - - fmt.Println("Initialization complete.") + return } func newCommand() (err error) { @@ -258,9 +257,14 @@ func newCommand() (err error) { err = cmd.loadDatabase() if err != nil { - fmt.Println("No database found.") - fmt.Println("Initializing database for the first time...") - cmd.firstTime() + if os.IsNotExist(err) { + if cmd.op&opSync > 0 { + cmd.firstTime = true + err = nil + } else { + err = errNoDB + } + } } if beku.Debug >= beku.DebugL2 { diff --git a/cmd/beku/main.go b/cmd/beku/main.go index 7a90341..0caa7cc 100644 --- a/cmd/beku/main.go +++ b/cmd/beku/main.go @@ -123,7 +123,12 @@ var ( func main() { err := newCommand() if err != nil { - fmt.Fprintln(os.Stderr, err) + if err == errNoDB { + fmt.Fprintln(os.Stderr, err) + fmt.Fprintln(os.Stderr, "Run 'beku -S' to initialize database") + } else { + fmt.Fprintln(os.Stderr, err) + } os.Exit(1) } @@ -138,15 +143,11 @@ func main() { case opRemove | opRecursive: err = cmd.env.Remove(cmd.pkgs[0], true) case opSync: - if len(cmd.pkgs) > 0 { - err = cmd.env.Sync(cmd.pkgs[0], "") - } else { - err = cmd.env.Rescan() - } + err = cmd.sync() case opSync | opSyncInto: - err = cmd.env.Sync(cmd.pkgs[0], cmd.syncInto) + err = cmd.sync() default: - fmt.Fprintln(os.Stderr, "Invalid operations or options") + fmt.Fprintln(os.Stderr, errInvalidOptions) os.Exit(1) } |
