diff options
| author | Jeff Carr <[email protected]> | 2025-01-20 04:07:16 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-01-20 04:07:16 -0600 |
| commit | 55d8abd2a3c1686a57db79378b2ee19bc62970d8 (patch) | |
| tree | 5aeb0b72e68c1e7100885b0544ebca6cb1c474b9 /doClean.go | |
| parent | 6386bc48267261c17ee591b9341e05b2f21fa727 (diff) | |
clean devel now has an EXACT check against upstream and master
Diffstat (limited to 'doClean.go')
| -rw-r--r-- | doClean.go | 60 |
1 files changed, 57 insertions, 3 deletions
@@ -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 } |
