-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
65 lines (52 loc) · 1.82 KB
/
main.go
File metadata and controls
65 lines (52 loc) · 1.82 KB
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
package main
import (
"context"
"flag"
"github.com/therealkevinard/gitdir/commands/open"
"github.com/therealkevinard/gitdir/dirtools"
"log"
"os"
"path"
"github.com/google/subcommands"
"github.com/therealkevinard/gitdir/commands/cd"
"github.com/therealkevinard/gitdir/commands/clone"
initCmd "github.com/therealkevinard/gitdir/commands/init"
"github.com/therealkevinard/gitdir/commands/ls"
)
func main() {
p := prepareUserPaths() // setup common paths
ctx := dirtools.SetUserPaths(context.Background(), p) // add paths to context
const supportGroup = "support"
subcommands.Register(subcommands.HelpCommand(), supportGroup)
subcommands.Register(subcommands.FlagsCommand(), supportGroup)
subcommands.Register(subcommands.CommandsCommand(), supportGroup)
subcommands.Register(initCmd.New(ctx), supportGroup)
const mgtGroup = "repo management"
subcommands.Register(clone.New(ctx), mgtGroup)
const navGroup = "navigation"
subcommands.Register(open.New(ctx), navGroup)
subcommands.Register(cd.New(ctx), navGroup)
subcommands.Register(ls.New(ctx), navGroup)
flag.Parse()
code := subcommands.Execute(ctx)
os.Exit(int(code))
}
// prepareUserPaths builds a dirtools.UserPaths for cli environment
func prepareUserPaths() *dirtools.UserPaths {
var err error
paths := &dirtools.UserPaths{}
if paths.UserHomeDir, err = os.UserHomeDir(); err != nil {
log.Fatal(err)
}
if paths.UserCacheDir, err = os.UserCacheDir(); err != nil {
log.Fatal(err)
}
if paths.CollectionRoot = os.ExpandEnv(os.Getenv("GITDIR_COLLECTION_ROOT")); paths.CollectionRoot == "" {
log.Fatal("invalid collection root")
}
if paths.OwnBinaryName = os.Args[0]; paths.OwnBinaryName == "" {
log.Fatal("i have no name")
}
paths.CDScriptPath = path.Clean(path.Join(paths.UserCacheDir, "gitdir", "gdnext.sh"))
return paths
}