Mercurial > evolve
view contrib/merge-test-compat.sh @ 6224:17ffdea0edbb stable
evolve: look for split successors of the correct ancestor (issue6648)
Consider two changesets, 1 and 2. 1 is split into two new changesets and 2 is
pruned. If we stand on 2 and call hg evolve, _singlesuccessor() will traverse
ancestors of wdp in search of a changeset with successors to update to (it will
be 1, which was split). In case of a split, select_split_successor() gets
control. The issue is this function didn't traverse ancestors, and instead
tried to look up successors of the original changeset (i.e. 2 in our case,
which was pruned).
We can make select_split_successor() aware of _singlesuccessor() logic by using
the changeset that actually has successors without traversing ancestors again.
It's done by storing that changeset in MultipleSuccessorsError exception.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Thu, 21 Apr 2022 22:19:27 +0400 |
parents | 17fac26833da |
children |
line wrap: on
line source
#!/bin/bash set -euox pipefail unset GREP_OPTIONS compatbranches=$(hg branches --quiet | grep 'mercurial-' | grep -v ':' | sort -n --reverse) prev='stable' topic=${1:-'test-compat'} for branch in $compatbranches; do # Logic in the revsets below: # 1. There is target topic on stable or compatibility branch: merge all # those commits, they are related to our work and need to pass tests on all # compatibility branches. # 2. There is no target topic: avoid any commits that have topic set, they # are definitely unrelated to what we're doing. # In other words, if you want to test certain commits, assign them all to # one topic and provide that topic as the first argument to this script. uptarget="first(max(branch('$branch') and topic('$topic')) or max(branch('$branch') and not topic()))" hg up -r "$uptarget" hg topic "$topic" mergetarget="first(max(branch('$prev') and topic('$topic')) or max(branch('$prev') and not topic()))" hg merge -r "$mergetarget" hg commit -m "test-compat: merge $prev into $branch" prev=$branch done