delete applied patches from PB file
This commit is contained in:
parent
92be907bce
commit
d331af80e0
11
argv.go
11
argv.go
|
@ -18,7 +18,7 @@ var argv args
|
|||
|
||||
type args struct {
|
||||
Checkout *CheckoutCmd `arg:"subcommand:checkout" help:"switch branches using 'git checkout'"`
|
||||
Clean *CleanCmd `arg:"subcommand:clean" help:"start over at the beginning"`
|
||||
Clean *CleanCmd `arg:"subcommand:reset" help:"reset all git repos to the original state"`
|
||||
Commit *CommitCmd `arg:"subcommand:commit" help:"'git commit' but errors out if on wrong branch"`
|
||||
Config *ConfigCmd `arg:"subcommand:config" help:"show your .config/forge/ settings"`
|
||||
Gui *EmptyCmd `arg:"subcommand:gui" help:"open the gui"`
|
||||
|
@ -35,9 +35,10 @@ type args struct {
|
|||
|
||||
func (args) Examples() string {
|
||||
var out string
|
||||
out += "forge merge --all # merge all patches to devel & master\n"
|
||||
out += "forge pull --force # 'git pull' on all repos\n"
|
||||
out += "forge normal # the defaults for 'normal' forge distributed development\n"
|
||||
out += "forge merge --all # merge all patches to devel & master\n"
|
||||
out += "forge normal fix # the defaults for 'normal' forge distributed development (makes local user branches)\n"
|
||||
out += "forge reset fix # smartly restore all git repos to the upstream state (removes changes forge might have made)\n"
|
||||
return out
|
||||
}
|
||||
|
||||
|
@ -86,7 +87,7 @@ type DevCmd struct {
|
|||
|
||||
type CleanCmd struct {
|
||||
Fix *EmptyCmd `arg:"subcommand:fix" help:"try to fix problems"`
|
||||
Repo string `arg:"--repo" help:"which repo to look at"`
|
||||
Repo string `arg:"--repo" help:"work on one specific git repository"`
|
||||
}
|
||||
|
||||
// matches
|
||||
|
@ -205,7 +206,7 @@ func (args) Appname() string {
|
|||
|
||||
func (a args) DoAutoComplete(pb *prep.Auto) {
|
||||
if pb.Cmd == "" {
|
||||
pb.Autocomplete3([]string{"checkout", "clean", "commit", "config", "gui", "merge", "normal", "patch", "pull", "show"})
|
||||
pb.Autocomplete3([]string{"checkout", "reset", "commit", "config", "gui", "merge", "normal", "patch", "pull", "show"})
|
||||
} else {
|
||||
pb.SubCommand(pb.Argv...)
|
||||
}
|
||||
|
|
40
doPatch.go
40
doPatch.go
|
@ -100,18 +100,42 @@ func doPatch() error {
|
|||
}
|
||||
|
||||
if argv.Patch.List != nil {
|
||||
return doPatchList()
|
||||
}
|
||||
|
||||
// list patches by default
|
||||
return doPatchList()
|
||||
}
|
||||
|
||||
func doPatchList() error {
|
||||
// if nothing selected, list the patches
|
||||
var changed bool
|
||||
newpatches := new(forgepb.Set)
|
||||
newpatches.Patches = forgepb.NewPatches()
|
||||
for pset := range me.forge.Patchsets.IterAll() {
|
||||
pset.PrintTable()
|
||||
if pset.Patches.Len() == 0 {
|
||||
log.Info("pset is empty")
|
||||
me.forge.Patchsets.Delete(pset)
|
||||
changed = true
|
||||
continue
|
||||
}
|
||||
for patch := range pset.Patches.IterAll() {
|
||||
changed = true
|
||||
if err := isPatchIdApplied(patch); err == nil {
|
||||
log.Info("patchId already applied", patch.PatchId, patch.Filename)
|
||||
pset.Patches.Delete(patch)
|
||||
changed = true
|
||||
continue
|
||||
}
|
||||
|
||||
if patch.NewHash == "" || patch.NewHash == "na" {
|
||||
if newpatches.Patches.AppendByPatchId(patch) {
|
||||
log.Info("patchId added here", patch.PatchId)
|
||||
} else {
|
||||
log.Info("patchId already here", patch.PatchId)
|
||||
pset.Patches.Delete(patch)
|
||||
changed = true
|
||||
}
|
||||
} else {
|
||||
if err := setNewCommitHash(patch); err != nil {
|
||||
|
@ -122,16 +146,12 @@ func doPatch() error {
|
|||
}
|
||||
}
|
||||
}
|
||||
if changed {
|
||||
if err := me.forge.SavePatchsets(); err != nil {
|
||||
log.Warn("savePatchsets() failed", err)
|
||||
}
|
||||
}
|
||||
log.Info("NEW PATCHES TABLE")
|
||||
newpatches.PrintTable()
|
||||
for patch := range newpatches.Patches.IterAll() {
|
||||
if err := setNewCommitHash(patch); err == nil {
|
||||
log.Info("newhash set already here", patch.PatchId, patch.NewHash)
|
||||
changed = true
|
||||
continue
|
||||
}
|
||||
log.Infof("%s is new\n", patch.Filename)
|
||||
|
@ -145,6 +165,11 @@ func doPatch() error {
|
|||
log.Info("apply results:", newhash, err)
|
||||
}
|
||||
}
|
||||
if changed {
|
||||
if err := me.forge.SavePatchsets(); err != nil {
|
||||
log.Warn("savePatchsets() failed", err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
/*
|
||||
if newpatches.Len() != 0 {
|
||||
|
@ -175,11 +200,6 @@ func doPatch() error {
|
|||
newpb.PrintTable()
|
||||
return nil
|
||||
*/
|
||||
}
|
||||
|
||||
// if nothing, show patches & dirty repos
|
||||
me.forge.Patchsets.PrintTable()
|
||||
showWorkRepos()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -172,6 +172,32 @@ func findCommitBySubject(subject string) (string, error) {
|
|||
return "", fmt.Errorf("no commit found for subject: %s", subject)
|
||||
}
|
||||
|
||||
func isPatchIdApplied(patch *forgepb.Patch) error {
|
||||
repo := me.forge.FindByGoPath(patch.Namespace)
|
||||
if repo == nil {
|
||||
return log.Errorf("could not find repo %s", patch.Namespace)
|
||||
}
|
||||
|
||||
comment := cleanSubject(patch.Comment)
|
||||
|
||||
os.Chdir(repo.GetFullPath())
|
||||
newhash, err := findCommitBySubject(comment)
|
||||
if err != nil {
|
||||
return log.Errorf("patch: not found hash: %s %s %s %s %v", patch.CommitHash, patch.Namespace, comment, newhash, err)
|
||||
}
|
||||
|
||||
patchId, err := repo.FindPatchId(newhash)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
patch.PatchId = patchId
|
||||
patch.NewHash = newhash
|
||||
|
||||
log.Info("patch: found hash:", patch.CommitHash, newhash, patch.Namespace, comment)
|
||||
return nil
|
||||
}
|
||||
|
||||
// returns true if PB changed
|
||||
func setNewCommitHash(patch *forgepb.Patch) error {
|
||||
repo := me.forge.FindByGoPath(patch.Namespace)
|
||||
|
|
Loading…
Reference in New Issue