Repository navigation
Release 1.6.7: scripted merges and the git identity - #33
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release 1.6.7: scripted merges and the git identity.
On a machine with no global git identity, where the commit rules name one with
git -c user.name=... -c user.email=...(which doctor accepts), every join wave merge failed:scripts/merge-waverangit mergeitself, without that identity, and git refused ("Committer identity unknown"). merge-wave reported any failed merge as a conflict. On r166 that sent each unit to an Opus resolver (4 extra agents); on r167, the run that built this release, the merge agent reported it as a failure instead and the run stopped until a temporary repo identity was set and the run resumed. A supervised run would have stopped asking for a conflict that did not exist to be resolved by hand.Now setup records the commit rules'
-cname and email assetup_result.git_identity(with doctor's parser, moved toscripts/_identity.py), and the run uses it for every merge and every commit it spells out: merge-wave gets--git-config, and the integrate, resolver and supervised-stop commands carry the-coptions. With no pairs in the commit rules nothing changes. Doctor now checks the author identity as well as the committer's.A merge git refuses for any reason other than a content conflict (a missing identity, a failing hook, a held
index.lock) is nowstatus: failedwith git's message (exit 4). It never goes to a resolver: the run stops with that message. A heldindex.lockgets one retry after 2 s first.Also in this release:
conflictwith no conflicting files is a failure; adonethat left a unit out stops the run; a missing merge result readsno result from <name> merge, so it is relaunched like any other missing result.chore: join wave <n>: merge <unit>andchore: join recovery: merge <unit>, and every reviewer is told these (and the old forms) are the engine's own messages, not findings.join_tipfollows only events that merged, so a relaunch's history check is not thrown off.mktemp -dfolder. On r166 and r167 a final reviewer spent about 10 minutes running test files itself.Testing: built by a parallel-lanes run on 1.6.6 (r167): 7 tasks in 3 lanes and a join, each implemented and reviewed with no fix rounds. Its first launch stopped on the very bug this release fixes; it resumed through the 1.6.5 relaunch path, whose recovery merge brought in the two finished join tasks in one call. Then integration, a three-lens final review (9 minor findings: 2 fixed, 6 declined, all about the 1.6.6 engine's recovery merge messages in this run's own history, which is never rewritten) and verify. After the run I made the
index.lockretry test prove the retry (it now fails with the retry disabled) and rewrapped three doc paragraphs. Tests include merge-wave refusals in a repo with no identity (missing identity, a failing hook, a held lock, a refusal after an earlier merge), and an end-to-end join on real git with the identity only in the commit rules: one merge agent, no resolver, the right author and committer. Full suite on Windows (Python 3.15): 1751 tests, 1735 pass, 16 skipped, 0 fail. Not run: a run with this release installed on a project with join waves.