# HG changeset patch # User Boris Feld # Date 1543378018 -3600 # Node ID 01c335afc997e79d674fad0bbe623ffac6472722 # Parent bad0053efaf6c9bdc9b6bd613dcfb2e95d36ec99 contrib: add a helper script that help to build interesting repositories The script is dedicated to building a couple of repositories that should be interesting to run discovery from one another. It seems a common enough need to contribute it upstream. diff -r bad0053efaf6 -r 01c335afc997 contrib/discovery-helper.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/discovery-helper.sh Wed Nov 28 05:06:58 2018 +0100 @@ -0,0 +1,64 @@ +#!/bin/bash +# +# produces two repositories with different common and missing subsets +# +# $ discovery-helper.sh REPO NBHEADS DEPT +# +# The Goal is to produce two repositories with some common part and some +# exclusive part on each side. Provide a source repository REPO, it will +# produce two repositories REPO-left and REPO-right. +# +# Each repository will be missing some revisions exclusive to NBHEADS of the +# repo topological heads. These heads and revisions exclusive to them (up to +# DEPTH depth) are stripped. +# +# The "left" repository will use the NBHEADS first heads (sorted by +# description). The "right" use the last NBHEADS one. +# +# To find out how many topological heads a repo has, use: +# +# $ hg heads -t -T '{rev}\n' | wc -l +# +# Example: +# +# The `pypy-2018-09-01` repository has 192 heads. To produce two repositories +# with 92 common heads and ~50 exclusive heads on each side. +# +# $ ./discovery-helper.sh pypy-2018-08-01 50 10 + +set -euo pipefail + +if [ $# -lt 3 ]; then + echo "usage: `basename $0` REPO NBHEADS DEPTH" + exit 64 +fi + +repo="$1" +shift + +nbheads="$1" +shift + +depth="$1" +shift + +leftrepo="${repo}-left" +rightrepo="${repo}-right" + +left="first(sort(heads(all()), 'desc'), $nbheads)" +right="last(sort(heads(all()), 'desc'), $nbheads)" + +leftsubset="ancestors($left, $depth) and only($left, heads(all() - $left))" +rightsubset="ancestors($right, $depth) and only($right, heads(all() - $right))" + +echo '### building left repository:' $left-repo +echo '# cloning' +hg clone --noupdate "${repo}" "${leftrepo}" +echo '# stripping' '"'${leftsubset}'"' +hg -R "${leftrepo}" --config extensions.strip= strip --rev "$leftsubset" --no-backup + +echo '### building right repository:' $right-repo +echo '# cloning' +hg clone --noupdate "${repo}" "${rightrepo}" +echo '# stripping:' '"'${rightsubset}'"' +hg -R "${rightrepo}" --config extensions.strip= strip --rev "$rightsubset" --no-backup