summaryrefslogtreecommitdiff
path: root/doClean.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-01-20 04:07:16 -0600
committerJeff Carr <[email protected]>2025-01-20 04:07:16 -0600
commit55d8abd2a3c1686a57db79378b2ee19bc62970d8 (patch)
tree5aeb0b72e68c1e7100885b0544ebca6cb1c474b9 /doClean.go
parent6386bc48267261c17ee591b9341e05b2f21fa727 (diff)
clean devel now has an EXACT check against upstream and master
Diffstat (limited to 'doClean.go')
-rw-r--r--doClean.go60
1 files changed, 57 insertions, 3 deletions
diff --git a/doClean.go b/doClean.go
index adeac89..8b6f057 100644
--- a/doClean.go
+++ b/doClean.go
@@ -59,7 +59,7 @@ func doCleanDevel() error {
for all.Scan() {
repo := all.Next()
if argv.Verbose {
- log.Info("Cleaning:", repo.GetGoPath())
+ // log.Info("Cleaning:", repo.GetGoPath())
}
total += 1
if repo.GetCurrentBranchName() != repo.GetDevelBranchName() {
@@ -79,17 +79,55 @@ func doCleanDevel() error {
return nil
}
+func exactDevelRepo(repo *gitpb.Repo) error {
+ devel := repo.GetDevelBranchName()
+ master := repo.GetMasterBranchName()
+ err := isBranchSubsetOfTrunk(repo, devel, master)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func checkhashes(repo *gitpb.Repo, hashes []string, refpath string) ([]string, error) {
+ if !repo.Exists(refpath) {
+ return hashes, nil
+ }
+ r, err := repo.RunStrictNew([]string{"cat", refpath})
+ if err != nil {
+ return hashes, err
+ }
+ newhash := r.Stdout[0]
+ for _, hash := range hashes {
+ if newhash != hash {
+ return hashes, fmt.Errorf("%s hash broke %s %s", repo.GetGoPath(), newhash, hash)
+ }
+ }
+ hashes = append(hashes, newhash)
+ return hashes, nil
+}
+
func doCleanDevelRepo(repo *gitpb.Repo) error {
+ var hashes []string
devel := repo.GetDevelBranchName()
// log.Printf("%s Start verify devel branch: %s\n", repo.GetGoPath(), devel)
// check if devel branch exists in remote repo
if repo.Exists(filepath.Join(".git/refs/remotes/origin", devel)) {
+ if argv.Verbose {
+ var err error
+ if hashes, err = checkhashes(repo, hashes, filepath.Join(".git/refs/remotes/origin", devel)); err != nil {
+ return err
+ }
+ }
remote := filepath.Join("origin", devel)
if err := isBranchSubsetOfTrunk(repo, devel, remote); err != nil {
if err == ErrorMergeBranch {
log.Info("can not do this yet. need push to upstream", repo.GetGoPath())
- return nil
+ if argv.Force {
+ return nil
+ }
+ return err
}
return err
}
@@ -98,6 +136,21 @@ func doCleanDevelRepo(repo *gitpb.Repo) error {
// verify devel branch is subset of master branch
master := repo.GetMasterBranchName()
+ if argv.Verbose {
+ var err error
+ if hashes, err = checkhashes(repo, hashes, filepath.Join(".git/refs/heads", devel)); err != nil {
+ return err
+ }
+ }
+ if argv.Verbose {
+ var err error
+ if hashes, err = checkhashes(repo, hashes, filepath.Join(".git/refs/heads", devel)); err != nil {
+ return err
+ }
+ }
+ if argv.Verbose {
+ log.Info("repo hashes all match. incredible", hashes, repo.GetGoPath())
+ }
if err := isBranchSubsetOfTrunk(repo, devel, master); err != nil {
if err == ErrorMergeBranch {
if argv.Force {
@@ -110,8 +163,9 @@ func doCleanDevelRepo(repo *gitpb.Repo) error {
cmd := []string{"git", "merge", master}
log.Info("can't run. on wrong branch.", cmd, repo.GetGoPath(), "current branch =", repo.GetCurrentBranchName())
}
+ return nil
}
- return nil
+ return err
}
return err
}