contrib/phab-refresh-stack.sh
author Pierre-Yves David <pierre-yves.david@octobus.net>
Fri, 05 Apr 2024 11:33:47 +0200
changeset 51580 b70628a9aa7e
parent 48697 fba2d7fab11e
permissions -rwxr-xr-x
phases: use revision number in new_heads All graph operations will be done using revision numbers, so passing nodes only means they will eventually get converted to revision numbers internally. As part of an effort to align the code on using revision number we make the `phases.newheads` function operated on revision number, taking them as input and using them in returns, instead of the node-id it used to consume and produce. This is part of multiple changesets effort to translate more part of the logic, but is done step by step to facilitate the identification of issue that might arise in mercurial core and extensions. To make the change simpler to handle for third party extensions, we also rename the function, using a more modern form. This will help detecting the different between the node-id version and the rev-num version. I also take this as an opportunity to add some comment about possible performance improvement for the future. They don't matter too much now, but they are worse exploring in a while.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45990
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     1
#!/bin/bash
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     2
set -eu
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     3
48697
fba2d7fab11e phabricator-refresh: add a magic value to skip it in the CI
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46044
diff changeset
     4
if [[ "$PHABRICATOR_TOKEN" == "NO-PHAB" ]]; then
fba2d7fab11e phabricator-refresh: add a magic value to skip it in the CI
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46044
diff changeset
     5
    echo 'Skipping Phabricator Step' >&2
fba2d7fab11e phabricator-refresh: add a magic value to skip it in the CI
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46044
diff changeset
     6
    exit 0
fba2d7fab11e phabricator-refresh: add a magic value to skip it in the CI
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46044
diff changeset
     7
fi
fba2d7fab11e phabricator-refresh: add a magic value to skip it in the CI
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46044
diff changeset
     8
46043
024f90fc01b5 phab-refresh: do not pick draft changeset from the bare "default" branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46016
diff changeset
     9
revision_in_stack=`hg log \
024f90fc01b5 phab-refresh: do not pick draft changeset from the bare "default" branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46016
diff changeset
    10
    --rev '.#stack and ::. and topic()' \
024f90fc01b5 phab-refresh: do not pick draft changeset from the bare "default" branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46016
diff changeset
    11
    -T '\nONE-REV\n' \
024f90fc01b5 phab-refresh: do not pick draft changeset from the bare "default" branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46016
diff changeset
    12
    | grep 'ONE-REV' | wc -l`
024f90fc01b5 phab-refresh: do not pick draft changeset from the bare "default" branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46016
diff changeset
    13
revision_on_phab=`hg log \
024f90fc01b5 phab-refresh: do not pick draft changeset from the bare "default" branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46016
diff changeset
    14
    --rev '.#stack and ::. and topic() and desc("re:\nDifferential Revision: [^\n]+D\d+$")'\
024f90fc01b5 phab-refresh: do not pick draft changeset from the bare "default" branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46016
diff changeset
    15
    -T '\nONE-REV\n' \
024f90fc01b5 phab-refresh: do not pick draft changeset from the bare "default" branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46016
diff changeset
    16
    | grep 'ONE-REV' | wc -l`
45990
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    17
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    18
if [[ $revision_in_stack -eq 0 ]]; then
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    19
    echo "stack is empty" >&2
46016
372409eb5cd1 phab-refresh: do not error out when the stack is empty
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45990
diff changeset
    20
    exit 0
45990
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    21
fi
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    22
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    23
if [[ $revision_on_phab -eq 0 ]]; then
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    24
    echo "no tracked diff in this stack" >&2
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    25
    exit 0
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    26
fi
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    27
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    28
if [[ $revision_on_phab -lt $revision_in_stack ]]; then
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    29
    echo "not all stack changesets (${revision_in_stack}) have matching Phabricator Diff (${revision_on_phab})" >&2
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    30
    exit 2
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    31
fi
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    32
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    33
if [[ "$PHABRICATOR_TOKEN" == "" ]]; then
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    34
    echo 'missing $PHABRICATOR_TOKEN variable' >&2
48697
fba2d7fab11e phabricator-refresh: add a magic value to skip it in the CI
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46044
diff changeset
    35
    echo '(use PHABRICATOR_TOKEN="NO-PHAB" to disable this step)' >&2
45990
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    36
    exit 2
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    37
fi
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    38
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    39
hg \
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    40
--config extensions.phabricator= \
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    41
--config phabricator.url=https://phab.mercurial-scm.org/ \
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    42
--config phabricator.callsign=HG \
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    43
--config auth.phabricator.schemes=https \
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    44
--config auth.phabricator.prefix=phab.mercurial-scm.org \
5de27798d2af contrib: add a small script to refresh all diff in the current stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    45
--config auth.phabricator.phabtoken=$PHABRICATOR_TOKEN \
46043
024f90fc01b5 phab-refresh: do not pick draft changeset from the bare "default" branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46016
diff changeset
    46
phabsend --rev '.#stack and ::. and topic()' \
46044
9be5db6148fb phab-refresh: allow passing additional argument to the phabsend
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46043
diff changeset
    47
"$@"