view contrib/check-compat-strings.sh @ 5328:4e499fbc66c9 stable

evolve: precursors, successors and troubles are just aliases now These template keywords follow the old vocabulary, and shouldn't be used, but we provide them for the time being anyway. Also mentioning them here will hopefully some day make `hg help -k` find them.
author Anton Shestakov <av6@dwimlabs.net>
date Sat, 16 May 2020 16:38:58 +0800
parents f5b366a31740
children
line wrap: on
line source

#!/usr/bin/env bash
set -euo pipefail

unset GREP_OPTIONS

# This script finds compatibility-related comments with a node hash specified
# in all files in a given directory (. by default) and looks up the hash in a
# repo (~/hg by default) to determine if each of the comments is correct and,
# if not, it suggests the correct release. This can prevent accidentally
# removing a piece of code that was misattributed to a different (earlier)
# release of core hg.

# Usage: $0 WDIR HGREPO where WDIR is usually evolve/hgext3rd/ and HGREPO is
# the place with core Mercurial repo (not just checkout). Said repo has to be
# sufficiently up-to-date, otherwise this script may not work correctly.

workdir=${1:-'.'}
hgdir=${2:-~/hg}
grep -Ern 'hg <= [0-9.]+ \([0-9a-f+]+\)' "$workdir" | while read -r line; do
    bashre='hg <= ([0-9.]+) \(([0-9a-f+]+)\)'
    if [[ $line =~ $bashre ]]; then
        expected=${BASH_REMATCH[1]}
        revset=${BASH_REMATCH[2]}
        tagrevset="max(tag('re:^[0-9]\\.[0-9]$') - ($revset)::)"
        lastrel=$(HGPLAIN=1 hg --cwd "$hgdir" log -r "$tagrevset" -T '{tags}')
        if [[ "$lastrel" != "$expected" ]]; then
            echo "$line"
            echo "actual last major release without $revset is $lastrel"
            echo
        fi
    fi
done