common argv handling
This commit is contained in:
parent
ae2cbf1886
commit
ce0fd10064
12
argv.go
12
argv.go
|
@ -6,6 +6,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -151,7 +152,12 @@ forge -- a tool to manage lots of git repos. forge includes a GUI and TUI.
|
||||||
// handles shell autocomplete
|
// handles shell autocomplete
|
||||||
//
|
//
|
||||||
|
|
||||||
func DoAutoComplete(argv []string) {
|
func DoAutoComplete(arg0 string, arg1 string, argv []string) {
|
||||||
|
if strings.HasPrefix(argv[0], "-") {
|
||||||
|
fmt.Fprintf(os.Stderr, "stuff --gui --all '%s' '%s' %v\n", arg0, arg1, argv)
|
||||||
|
fmt.Println("--all --gui")
|
||||||
|
return
|
||||||
|
}
|
||||||
switch argv[0] {
|
switch argv[0] {
|
||||||
case "checkout":
|
case "checkout":
|
||||||
fmt.Println("devel master user")
|
fmt.Println("devel master user")
|
||||||
|
@ -214,6 +220,6 @@ func ifBlank(arg string) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a args) DoAutoComplete(argv []string) {
|
func (a args) DoAutoComplete(arg0 string, arg1 string, argv []string) {
|
||||||
DoAutoComplete(argv)
|
DoAutoComplete(arg0, arg1, argv)
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,12 +31,7 @@ func doCommit() error {
|
||||||
okExit("")
|
okExit("")
|
||||||
}
|
}
|
||||||
|
|
||||||
pwd, _ := os.Getwd()
|
repo := findCurrentPwdRepoOrDie()
|
||||||
repo := me.forge.Repos.FindByFullPath(pwd)
|
|
||||||
if repo == nil {
|
|
||||||
log.Info("todo: forge doesn't know how to work here yet")
|
|
||||||
okExit("")
|
|
||||||
}
|
|
||||||
|
|
||||||
if !repo.CheckDirty() {
|
if !repo.CheckDirty() {
|
||||||
okExit(log.Sprintf("this repo %s is not dirty.\n\n--all # commit all changes in all repos", repo.GetFullPath()))
|
okExit(log.Sprintf("this repo %s is not dirty.\n\n--all # commit all changes in all repos", repo.GetFullPath()))
|
||||||
|
|
28
doMerge.go
28
doMerge.go
|
@ -32,7 +32,7 @@ func doMergeDevel() (*gitpb.Repos, error) {
|
||||||
found := findMergeToDevel()
|
found := findMergeToDevel()
|
||||||
for repo := range found.IterAll() {
|
for repo := range found.IterAll() {
|
||||||
if repo.CheckDirty() {
|
if repo.CheckDirty() {
|
||||||
log.Info("repo is dirty", repo.GetGoPath())
|
log.Info("repo is dirty", repo.GetFullPath())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
log.Infof("%s starting git merge\n", repo.FullPath)
|
log.Infof("%s starting git merge\n", repo.FullPath)
|
||||||
|
@ -59,6 +59,32 @@ func doMergeDevel() (*gitpb.Repos, error) {
|
||||||
return done, err
|
return done, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func repoMergeToDevel(repo *gitpb.Repo) error {
|
||||||
|
if repo.CheckDirty() {
|
||||||
|
return log.Errorf("can not merge. repo is dirty")
|
||||||
|
}
|
||||||
|
log.Infof("%s starting git merge\n", repo.FullPath)
|
||||||
|
if repo.CheckoutDevel() {
|
||||||
|
log.Info("checkout devel failed", repo.GetGoPath())
|
||||||
|
err := log.Errorf("checkout devel failed")
|
||||||
|
badExit(err)
|
||||||
|
}
|
||||||
|
// hash differences when merging user into devel branch
|
||||||
|
out := repo.GetBranchDifferences(repo.GetDevelBranchName(), repo.GetUserBranchName())
|
||||||
|
for i, hash := range out {
|
||||||
|
log.Info("MERGE HASH FROM USER TO DEVEL", i, hash)
|
||||||
|
}
|
||||||
|
if _, err := repo.MergeToDevel(); err != nil {
|
||||||
|
log.Info("merge from user failed", repo.GetGoPath(), err)
|
||||||
|
// err := log.Errorf("merge from user failed")
|
||||||
|
// log.Info(strings.Join(r.Stdout, "\n"))
|
||||||
|
// log.Info(strings.Join(r.Stderr, "\n"))
|
||||||
|
badExit(err)
|
||||||
|
}
|
||||||
|
config.SetChanged("repos", true)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func doMergeMaster() (*gitpb.Repos, error) {
|
func doMergeMaster() (*gitpb.Repos, error) {
|
||||||
var err error
|
var err error
|
||||||
setForgeMode(forgepb.ForgeMode_MASTER)
|
setForgeMode(forgepb.ForgeMode_MASTER)
|
||||||
|
|
16
doTag.go
16
doTag.go
|
@ -24,14 +24,20 @@ func FindRepoByFullPath(wd string) *gitpb.Repo {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func findCurrentPwdRepoOrDie() *gitpb.Repo {
|
||||||
|
wd, err := os.Getwd()
|
||||||
|
repo := FindRepoByFullPath(wd)
|
||||||
|
if repo == nil {
|
||||||
|
log.Info("Could not find repo:", wd)
|
||||||
|
badExit(err)
|
||||||
|
}
|
||||||
|
return repo
|
||||||
|
}
|
||||||
|
|
||||||
func doTag() error {
|
func doTag() error {
|
||||||
wd, _ := os.Getwd()
|
wd, _ := os.Getwd()
|
||||||
if argv.Tag.List != nil {
|
if argv.Tag.List != nil {
|
||||||
repo := FindRepoByFullPath(wd)
|
repo := findCurrentPwdRepoOrDie()
|
||||||
if repo == nil {
|
|
||||||
log.Info("Could not find repo:", wd)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
tagTablePB := makeTagTablePB(repo.Tags)
|
tagTablePB := makeTagTablePB(repo.Tags)
|
||||||
// tbox := win.Bottom.Box().SetProgName("TBOX")
|
// tbox := win.Bottom.Box().SetProgName("TBOX")
|
||||||
|
|
2
exit.go
2
exit.go
|
@ -28,6 +28,6 @@ func badExit(err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func badRepoExit(repo *gitpb.Repo, err error) {
|
func badRepoExit(repo *gitpb.Repo, err error) {
|
||||||
log.Printf("forge failed on %s with %v\n", repo.GetNamespace(), err)
|
log.Printf("%s FAILED: %v\n", repo.GetNamespace(), err)
|
||||||
os.Exit(-1)
|
os.Exit(-1)
|
||||||
}
|
}
|
||||||
|
|
50
main.go
50
main.go
|
@ -7,7 +7,6 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"embed"
|
"embed"
|
||||||
"fmt"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -45,8 +44,8 @@ func getVersion(repo *gitpb.Repo, name string) string {
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
me = new(mainType)
|
me = new(mainType)
|
||||||
prep.Bash(ARGNAME, argv.DoAutoComplete) // this line should be: prep.Bash(argv)
|
prep.Bash2(ARGNAME, argv.DoAutoComplete) // this line should be: prep.Bash(argv)
|
||||||
me.myGui = prep.Gui() // prepares the GUI package for go-args
|
me.myGui = prep.Gui() // prepares the GUI package for go-args
|
||||||
me.pp = arg.MustParse(&argv)
|
me.pp = arg.MustParse(&argv)
|
||||||
|
|
||||||
me.forge = forgepb.Init()
|
me.forge = forgepb.Init()
|
||||||
|
@ -158,28 +157,35 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if argv.Merge != nil {
|
if argv.Merge != nil {
|
||||||
if argv.Merge.Devel != nil {
|
if argv.All == true {
|
||||||
start := time.Now()
|
|
||||||
repos, err := doMergeDevel()
|
|
||||||
dur := time.Since(start)
|
|
||||||
if err != nil {
|
|
||||||
badExit(err)
|
|
||||||
}
|
|
||||||
log.Printf("Merged %d devel branches in %s\n", repos.Len(), shell.FormatDuration(dur))
|
|
||||||
okExit("")
|
|
||||||
}
|
|
||||||
|
|
||||||
if argv.Merge.Master != nil {
|
if argv.Merge.Devel != nil {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
repos, err := doMergeMaster()
|
repos, err := doMergeDevel()
|
||||||
dur := time.Since(start)
|
dur := time.Since(start)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
badExit(err)
|
badExit(err)
|
||||||
|
}
|
||||||
|
log.Printf("Merged %d devel branches in %s\n", repos.Len(), shell.FormatDuration(dur))
|
||||||
|
okExit("")
|
||||||
|
}
|
||||||
|
|
||||||
|
if argv.Merge.Master != nil {
|
||||||
|
start := time.Now()
|
||||||
|
repos, err := doMergeMaster()
|
||||||
|
dur := time.Since(start)
|
||||||
|
if err != nil {
|
||||||
|
badExit(err)
|
||||||
|
}
|
||||||
|
log.Printf("Merged %d master branches in %s\n", repos.Len(), shell.FormatDuration(dur))
|
||||||
|
okExit("")
|
||||||
}
|
}
|
||||||
log.Printf("Merged %d master branches in %s\n", repos.Len(), shell.FormatDuration(dur))
|
|
||||||
okExit("")
|
|
||||||
}
|
}
|
||||||
badExit(fmt.Errorf("You must choose which branch to merge to (devel or master)"))
|
repo := findCurrentPwdRepoOrDie()
|
||||||
|
if err := repoMergeToDevel(repo); err != nil {
|
||||||
|
badRepoExit(repo, err)
|
||||||
|
}
|
||||||
|
okExit("")
|
||||||
}
|
}
|
||||||
|
|
||||||
if argv.Pull != nil {
|
if argv.Pull != nil {
|
||||||
|
|
Loading…
Reference in New Issue