annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3133
13a4c35f7a0b util: add a small script to help with the merging of branches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
1 #!/bin/bash
13a4c35f7a0b util: add a small script to help with the merging of branches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
2 set -euox pipefail
13a4c35f7a0b util: add a small script to help with the merging of branches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
3
13a4c35f7a0b util: add a small script to help with the merging of branches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
4 unset GREP_OPTIONS
13a4c35f7a0b util: add a small script to help with the merging of branches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
5
5080
6db9e2350948 contrib: shellcheck merge-test-compat.sh
Anton Shestakov <av6@dwimlabs.net>
parents: 3133
diff changeset
6 compatbranches=$(hg branches --quiet | grep 'mercurial-' | grep -v ':' | sort -n --reverse)
3133
13a4c35f7a0b util: add a small script to help with the merging of branches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
7 prev='stable'
5081
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
8 topic=${1:-'test-compat'}
3133
13a4c35f7a0b util: add a small script to help with the merging of branches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
9 for branch in $compatbranches; do
5081
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
10 # Logic in the revsets below:
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
11 # 1. There is target topic on stable or compatibility branch: merge all
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
12 # those commits, they are related to our work and need to pass tests on all
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
13 # compatibility branches.
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
14 # 2. There is no target topic: avoid any commits that have topic set, they
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
15 # are definitely unrelated to what we're doing.
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
16 # In other words, if you want to test certain commits, assign them all to
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
17 # one topic and provide that topic as the first argument to this script.
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
18 uptarget="first(max(branch('$branch') and topic('$topic')) or max(branch('$branch') and not topic()))"
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
19 hg up -r "$uptarget"
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
20 hg topic "$topic"
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
21 mergetarget="first(max(branch('$prev') and topic('$topic')) or max(branch('$prev') and not topic()))"
17fac26833da contrib: make merge-test-compat.sh more topic-friendly
Anton Shestakov <av6@dwimlabs.net>
parents: 5080
diff changeset
22 hg merge -r "$mergetarget"
3133
13a4c35f7a0b util: add a small script to help with the merging of branches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
23 hg commit -m "test-compat: merge $prev into $branch"
13a4c35f7a0b util: add a small script to help with the merging of branches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
24 prev=$branch
13a4c35f7a0b util: add a small script to help with the merging of branches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
25 done