aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2018-05-26 17:51:52 +0700
committerShulhan <ms@kilabit.info>2018-05-26 17:51:52 +0700
commitc0b6702db7218e63ca1be16acb7377aea2f1a281 (patch)
tree495d96bc9515a3b26ed448c1e57ee84b1c731efa
parent659f06c0c9df8090ce2304f79ecd7ceb6cd31b49 (diff)
downloadbeku-c0b6702db7218e63ca1be16acb7377aea2f1a281.tar.xz
cmd/beku: do not initialize database, let user run "beku -S" first
-rw-r--r--cmd/beku/command.go42
-rw-r--r--cmd/beku/main.go17
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)
}