view contrib/phab-refresh-stack.sh @ 48460:c51408b92b88

directaccess: fix uses of commands.status() that don't go through flag parsing When `commands.commit.post-status` is enabled, after commit/amend, commands.status() is called without any revs argument, which means that status gets None instead of an empty list like it would receive if the user had invoked this on the commandline. With the `experimental.directaccess` config enabled, this gets passed to `unhidehashlikerevs`, which didn't previously handle None, but now should. Differential Revision: https://phab.mercurial-scm.org/D11883
author Kyle Lippincott <spectral@google.com>
date Tue, 07 Dec 2021 15:48:22 -0800
parents 9be5db6148fb
children fba2d7fab11e
line wrap: on
line source

#!/bin/bash
set -eu

revision_in_stack=`hg log \
    --rev '.#stack and ::. and topic()' \
    -T '\nONE-REV\n' \
    | grep 'ONE-REV' | wc -l`
revision_on_phab=`hg log \
    --rev '.#stack and ::. and topic() and desc("re:\nDifferential Revision: [^\n]+D\d+$")'\
    -T '\nONE-REV\n' \
    | grep 'ONE-REV' | wc -l`

if [[ $revision_in_stack -eq 0 ]]; then
    echo "stack is empty" >&2
    exit 0
fi

if [[ $revision_on_phab -eq 0 ]]; then
    echo "no tracked diff in this stack" >&2
    exit 0
fi

if [[ $revision_on_phab -lt $revision_in_stack ]]; then
    echo "not all stack changesets (${revision_in_stack}) have matching Phabricator Diff (${revision_on_phab})" >&2
    exit 2
fi

if [[ "$PHABRICATOR_TOKEN" == "" ]]; then
    echo 'missing $PHABRICATOR_TOKEN variable' >&2
    exit 2
fi

hg \
--config extensions.phabricator= \
--config phabricator.url=https://phab.mercurial-scm.org/ \
--config phabricator.callsign=HG \
--config auth.phabricator.schemes=https \
--config auth.phabricator.prefix=phab.mercurial-scm.org \
--config auth.phabricator.phabtoken=$PHABRICATOR_TOKEN \
phabsend --rev '.#stack and ::. and topic()' \
"$@"