-
Notifications
You must be signed in to change notification settings - Fork 3
/
set.go
70 lines (61 loc) · 1.66 KB
/
set.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package cmd
import (
"errors"
"fmt"
"log"
"time"
"github.com/spf13/cobra"
c "github.com/theredditbandit/pman/constants"
"github.com/theredditbandit/pman/pkg/db"
)
var (
ErrFlagNotImplemented = errors.New("flag not implemented yet")
ErrBadUsageSetCmd = errors.New("bad usage of set command")
)
var setCmd = &cobra.Command{
Use: "set",
Short: "Set the status of a project",
Long: `Set the status of a project to a specified status
Usage:
pman set <project_name> <status>
Common statuses: Indexed (default), Idea, Started, Paused, Completed, Aborted, Ongoing, Not Started
`,
RunE: func(cmd *cobra.Command, args []string) error {
interactiveFlag, _ := cmd.Flags().GetBool("i") // TODO: Implement this
if interactiveFlag {
cmd.SilenceUsage = true
return ErrFlagNotImplemented
}
if len(args) != 2 {
fmt.Println("Please provide a directory name")
return ErrBadUsageSetCmd
}
var pname string
alias := args[0]
status := args[1]
project, err := db.GetRecord(db.DBName, alias, c.ProjectAliasBucket)
if err == nil {
pname = project
} else {
pname = alias
}
err = db.UpdateRec(db.DBName, pname, status, c.StatusBucket)
if err != nil {
fmt.Println("Error updating record : ", err)
return err
}
lastEdit := make(map[string]string)
lastEdit["lastWrite"] = fmt.Sprint(time.Now().Format("02 Jan 06 15:04"))
err = db.WriteToDB(db.DBName, lastEdit, c.ConfigBucket)
if err != nil {
log.Print(err)
return err
}
fmt.Printf("Project %s set to status %s\n", pname, status)
return nil
},
}
func init() {
rootCmd.AddCommand(setCmd)
setCmd.Flags().Bool("i", false, "Set the status of projects interactively")
}