summaryrefslogtreecommitdiff
path: root/argv.go
blob: 110de2378b765b4a91456a3616fe30fb8e83958f (plain)
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package main

import (
	"fmt"
	"os"
)

/*
	this parses the command line arguements using alex flint's go-arg
*/

var argv args

type args struct {
	Checkout *CheckoutCmd `arg:"subcommand:checkout"                  help:"switch git branches"`
	Config   *ConfigCmd   `arg:"subcommand:config"                    help:"show your .config/forge/ settings"`
	Dirty    *EmptyCmd    `arg:"subcommand:dirty"                     help:"check if your git repos are dirty"`
	GitReset *EmptyCmd    `arg:"subcommand:hard-reset"                help:"hard reset your user git branches"`
	List     *FindCmd     `arg:"subcommand:list"                      help:"just show a table of the current state"`
	Patch    *PatchCmd    `arg:"subcommand:patch"                     help:"examine and make patch sets"`
	GitPull  *FindCmd     `arg:"subcommand:pull"                      help:"run 'git pull'"`
	Rescan   *EmptyCmd    `arg:"subcommand:rescan"                    help:"recreate the git protobuf repos.pb file"`
	Delete   *EmptyCmd    `arg:"subcommand:delete"                    help:"untrack a repo"`
	URL      string       `arg:"--connect"                            help:"gowebd url"`
	Show     string       `arg:"--show"                               help:"show a repo"`
	Bash     bool         `arg:"--bash"                               help:"generate bash completion"`
	BashAuto []string     `arg:"--auto-complete"                      help:"does the actual autocompletion"`
	Force    bool         `arg:"--force"                              help:"try to strong arm things"`
}

type EmptyCmd struct {
}

type testCmd string

type PatchCmd struct {
	List *EmptyCmd `arg:"subcommand:list"          help:"list available patches"`
	Show *EmptyCmd `arg:"subcommand:show"          help:"show a specific patch"`
}

type ConfigAddCmd struct {
	Path        string `arg:"--path"                            help:"absolute path of the git repo"`
	GoPath      string `arg:"--gopath"                          help:"GO path of the git repo"`
	Directory   bool   `arg:"--directory"    default:"false"    help:"repo is a directory to match against"`
	ReadOnly    bool   `arg:"--readonly"     default:"false"    help:"repo is readonly"`
	Writable    bool   `arg:"--writable"     default:"false"    help:"repo is writable"`
	Favorite    bool   `arg:"--favorite"     default:"false"    help:"forge will always go-clone or git clone this"`
	Private     bool   `arg:"--private"      default:"false"    help:"repo can not be published"`
	Interesting bool   `arg:"--interesting"  default:"false"    help:"something you decided was cool"`
	Master      string `arg:"--master"                          help:"the git 'master' or 'main' branch name"`
	Devel       string `arg:"--devel"                           help:"the git devel branch name"`
	User        string `arg:"--user"                            help:"the git user branch name"`
}

type ConfigCmd struct {
	Add      *ConfigAddCmd `arg:"subcommand:add"                      help:"add a config setting"`
	Fix      *EmptyCmd     `arg:"subcommand:fix"                      help:"fix .config/forge/ and/or repos.pb protobuf file"`
	List     *EmptyCmd     `arg:"subcommand:list"                     help:"list your config settings"`
	Delete   string        `arg:"--delete"                            help:"delete this repo"`
	Register string        `arg:"--register"                          help:"register your git URL (foo.com/mystuff) or (github.com/foo/bar)"`
}

type CheckoutCmd struct {
	User   *FindCmd `arg:"subcommand:user"                      help:"git checkout user"`
	Devel  *FindCmd `arg:"subcommand:devel"                     help:"git checkout devel"`
	Master *FindCmd `arg:"subcommand:master"                    help:"git checkout master"`
}

type FindCmd struct {
	All       bool `arg:"--all"                           help:"select every repo (the default)"`
	Mine      bool `arg:"--mine"                          help:"your repos as defined in the forge config"`
	Favorites bool `arg:"--favorites"                     help:"your repos configured as favorites"`
	Private   bool `arg:"--private"                       help:"your private repos from your .config/forge/"`
	Dirty     bool `arg:"--dirty"                         help:"only use dirty git repos"`
	// ReadOnly  bool `arg:"--readonly"                      help:"include read-only repos"`
}

func (args) Version() string {
	return ARGNAME + " " + VERSION + "    Built on " + BUILDTIME
}

func (a args) Description() string {
	return `
forge -- in the spirit of things like sourceforge

	This supports GO projects so far.
		It will work from ~/go/src or where your go.work file is.
		Since I mostly use ~/go/src, that has been tested more.

Examples:
	forge                                        # opens the GUI
	forge list                                   # show every repo state
	forge dirty                                  # check for dirty git repos
	forge pull                                   # run 'git pull' in every repo
	forge checkout                               # switch git branches

	forge config add --private --path /opt/bob   # add a private repo /opt/bob
	forge config add --directory --writable \
		--gopath 'go.wit.com/user/bob'       # directory contains r/w repos
	forge config add --private --writeable \
		--gopath 'go.wit.com/user/bob/work'  # a GO repo that can not be published

	`
}

func (args) doBashHelpDebug() {
	fmt.Fprintln(os.Stderr, "")
	fmt.Fprintln(os.Stderr, "hello world")
	var more string
	p0 := "0" + argv.BashAuto[0]
	p1 := "1" + argv.BashAuto[1]
	p2 := "2" + argv.BashAuto[2]
	if len(argv.BashAuto[1]) >= 0 {
		more = "more"
	} else {
		more = "less"
	}
	p1a := fmt.Sprintf("1a.%s.%+v.\n", argv.BashAuto[1], len(argv.BashAuto[1]))
	fmt.Fprintln(os.Stderr, "pull something else", argv.BashAuto, len(argv.BashAuto), p0, p1, p2, p1a, "end", more)
	fmt.Fprintln(os.Stderr, "")
}