phases: move RemotePhasesSummary to revision number
This continue our quest to align more logic on revision number instead of
node-ids. The motivation is similar to the change to `new_heads` and
`analyze_remote_phases` a few changeset earlier.
Again, we take this as an opportunity to rename the class, and the attribute to
the new naming scheme. This will highlight the need for code update for any
code using it an expecting node-ids.
Many of the rev-num → node-id conversion we had to introduce in the previous
changesets can now be removed. More will be removed in the future as we continue
to align code toward rev-num usage.
time saved in the 100 milliseconds order of magnitude for the mozilla-try
benchmark I have been using.
#require no-windows no-rhg
XXX-RHG this test hangs if `hg` is really `rhg`. This was hidden by the use of
`alias hg=rhg` by run-tests.py. With such alias removed, this test is revealed
buggy. This need to be resolved sooner than later.
Dummy extension simulating unsafe long running command
$ SYNC_FILE="$TESTTMP/sync-file"
$ export SYNC_FILE
$ DONE_FILE="$TESTTMP/done-file"
$ export DONE_FILE
$
$ cat > wait_ext.py <<EOF
> import os
> import time
>
> from mercurial.i18n import _
> from mercurial import registrar
> from mercurial import testing
>
> cmdtable = {}
> command = registrar.command(cmdtable)
>
> @command(b'wait-signal', [], _(b'SYNC_FILE DONE_FILE'), norepo=True)
> def sleep(ui, sync_file=b"$SYNC_FILE", done_file=b"$DONE_FILE", **opts):
> start = time.time()
> with ui.uninterruptible():
> testing.write_file(sync_file, b'%d' % os.getpid())
> testing.wait_file(done_file)
> ui.warn(b"end of unsafe operation\n")
> ui.warn(b"%d second(s) passed\n" % int(time.time() - start))
> EOF
$ cat > send-signal.sh << EOF
> #!/bin/sh
> SIG=\$1
> if [ -z "\$SIG" ]; then
> echo "send-signal.sh requires one argument" >&2
> exit 1
> fi
> "$RUNTESTDIR/testlib/wait-on-file" 10 "$SYNC_FILE" || exit 2
> kill -s \$SIG \`cat "$SYNC_FILE"\`
> EOF
#if no-windows
$ chmod +x send-signal.sh
#endif
$ cat > wait-signal.sh << 'EOF'
> #!/bin/sh
> (hg wait-signal 2>&1; echo [$?]) | {
> read line
> touch "$DONE_FILE"
> echo "$line"
> cat
> }
> EOF
#if no-windows
$ chmod +x wait-signal.sh
#endif
Kludge to emulate timeout(1) which is not generally available.
Set up repository
$ hg init repo
$ cd repo
$ cat >> $HGRCPATH << EOF
> [extensions]
> wait_ext = $TESTTMP/wait_ext.py
> EOF
Test ctrl-c
$ rm -f $SYNC_FILE $DONE_FILE
$ sh -c "../send-signal.sh INT" &
$ ../wait-signal.sh
interrupted!
[255]
$ cat >> $HGRCPATH << EOF
> [experimental]
> nointerrupt = yes
> EOF
$ rm -f $SYNC_FILE $DONE_FILE
$ sh -c "../send-signal.sh INT" &
$ ../wait-signal.sh
interrupted!
[255]
$ cat >> $HGRCPATH << EOF
> [experimental]
> nointerrupt-interactiveonly = False
> EOF
$ rm -f $SYNC_FILE $DONE_FILE
$ sh -c "../send-signal.sh INT" &
$ ../wait-signal.sh
shutting down cleanly
press ^C again to terminate immediately (dangerous)
end of unsafe operation
interrupted!
[255]