mason@suse.com [Tue, 04 Apr 2006 16:38:44 -0400] rev 2076
Create an atomic opener that does not automatically rename on close
The revlog.checkinlinesize() uses an atomic opener to replace the
index file after converting it from inline to traditional .i and .d
files. If this operation is interrupted, the atomic file class can
overwrite a valid file with a partially written one.
This patch introduces an atomic opener that does not automatically
replace the destination file with the tempfile. This way
an interrupted checkinlinesize() call turns into a noop.
mason@suse.com [Tue, 04 Apr 2006 16:38:43 -0400] rev 2075
Make the appendfile class inline-data index friendly
The appendfile class needs a few changes to make it work with interleaved
index files. It needs to support the tell() method, opening in a+ mode,
and it needs to delay the checkinlinesize call until after the
append file is written.
Given that open(file, "a+") doesn't always seek to the end of the file,
this adds seek operations to appendfile that understand whence args
mason@suse.com [Tue, 04 Apr 2006 16:38:43 -0400] rev 2074
Fix bundle repos to use an index tuple consistent with revlogng
The bundle repo code was adding a field to the index tuple, which
confused the revlogng changes. This creates a new dict instead
to maintain the extra bundle info.
mason@suse.com [Tue, 04 Apr 2006 16:38:43 -0400] rev 2073
Implement data inlined with the index file
This patch allows you to optionally inline data bytes with the
revlog index file. It saves considerable space and checkout
time by reducing the number of inodes, wasted partial blocks and
system calls.
To use the inline data add this to your .hgrc
[revlog]
# inline data only works with revlogng
format=1
# inline is the only valid flag right now.
flags=inline
mason@suse.com [Tue, 04 Apr 2006 16:38:43 -0400] rev 2072
Implement revlogng.
revlogng results in smaller indexes, can address larger data files, and
supports flags and version numbers.
By default the original revlog format is used. To use the new format,
use the following .hgrc field:
[revlog]
# format choices are 0 (classic revlog format) and 1 revlogng
format=1
Vadim Gelfer <vadim.gelfer@gmail.com> [Thu, 13 Apr 2006 17:42:49 -0700] rev 2071
import: use gpatch if present on system. patch is broken on solaris.
fixes issue 205.
add new useful function, util.find_in_path.
Vadim Gelfer <vadim.gelfer@gmail.com> [Thu, 13 Apr 2006 17:12:09 -0700] rev 2070
merge with crew.
Vadim Gelfer <vadim.gelfer@gmail.com> [Thu, 13 Apr 2006 17:11:35 -0700] rev 2069
merge with crew.
Vadim Gelfer <vadim.gelfer@gmail.com> [Thu, 13 Apr 2006 17:11:04 -0700] rev 2068
let run-tests run optional code coverage tests.
to enable, set env var TEST_COVERAGE to non-empty string. run-tests will
print report after running.
after coverage run, file tests/.coverage will contain coverage data. use
tests/coverage.py to get more info, like annotated source code.
Vadim Gelfer <vadim.gelfer@gmail.com> [Thu, 13 Apr 2006 17:06:57 -0700] rev 2067
fix bugs in coverage.py.
Vadim Gelfer <vadim.gelfer@gmail.com> [Thu, 13 Apr 2006 15:10:03 -0700] rev 2066
add coverage.py module to tests directory.
written by ned batchelder and gareth rees.
Benoit Boissinot <benoit.boissinot@ens-lyon.org> [Fri, 14 Apr 2006 00:41:50 +0200] rev 2065
fix update when a locally added file match the target revision
the dirstate entry for the added file wasn't updated.
fix
issue207
Vadim Gelfer <vadim.gelfer@gmail.com> [Thu, 13 Apr 2006 13:46:56 -0700] rev 2064
util.unlink should only catch OSError.
Vadim Gelfer <vadim.gelfer@gmail.com> [Thu, 13 Apr 2006 13:46:05 -0700] rev 2063
benoit asked for comment to make avoid of recursive repo clearer.
Vadim Gelfer <vadim.gelfer@gmail.com> [Thu, 13 Apr 2006 12:44:40 -0700] rev 2062
merge with crew.
Vadim Gelfer <vadim.gelfer@gmail.com> [Fri, 31 Mar 2006 17:00:09 -0800] rev 2061
support nested repositories.
mercurial will not recurse into a subdirectory that contains a .hg
directory. it is treated as a separate repository.
Thomas Arendsen Hein <thomas@intevation.de> [Wed, 12 Apr 2006 17:57:44 +0200] rev 2060
Don't use -u option for diff on SunOS, too.
This makes the tests work without using GNU diff on Solaris 8.
Sascha Wilde <wilde@sha-bang.de> [Wed, 12 Apr 2006 17:53:04 +0200] rev 2059
run-tests: Use appropriate (that is: none) diff options on HP-UX.
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 11 Apr 2006 12:44:13 +0200] rev 2058
Use the new format of setting tags in view extension (Debian bug #361897)
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 11 Apr 2006 08:42:07 +0200] rev 2057
Never exit directly from commands.dispatch(), but pass return code to caller.
Usually the caller is commands.run().
Some extensions still use sys.exit(), this is catched, too.
Fixed wrong return statement in commands.recover() yielding a zero exit code.
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 11 Apr 2006 07:08:16 +0200] rev 2056
Polished exception handling when importing extensions:
- Warning about failed import is printed on one line.
- For this warning the [extensions] section key is used, because the value
doesn't have to be set.
- Whan a --traceback is requested, exit immediately to not mix up problems
when importing an extension with other problems.
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 11 Apr 2006 06:34:27 +0200] rev 2055
Added doc/gendoc.py to MANIFEST.in, so docs can be regenerated on demand.
Vadim Gelfer <vadim.gelfer@gmail.com> [Sat, 08 Apr 2006 14:12:43 -0700] rev 2054
fix exception handling on windows.
move win32 code into util_win32.py.
Thomas Arendsen Hein <thomas@intevation.de> [Sat, 08 Apr 2006 10:14:04 +0200] rev 2053
Include tests/md5sum.py in manifest.
Matt Mackall <mpm@selenic.com> [Fri, 07 Apr 2006 20:08:11 -0500] rev 2052
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl> [Fri, 07 Apr 2006 22:31:54 +0200] rev 2051
Try to use /usr/bin/test or /bin/test to work around missing features.
The builtin "test" of Solaris 8 /bin/sh doesn't understand -nt.
Vadim Gelfer <vadim.gelfer@gmail.com> [Wed, 05 Apr 2006 17:17:07 -0700] rev 2050
util.copyfiles: only switch to copy if hardlink raises IOError or OSError.
before this, interrupting clone would give "file a same as file b" error
because caught KeyboardInterrupt.
Thomas Arendsen Hein <thomas@intevation.de> [Wed, 05 Apr 2006 19:07:50 +0200] rev 2049
Make completion for debugindex<tab><tab> show debugindexdot, too.
The special handling for commands with names that are substrings of other
commands (e.g. with st and strip) wasn't used with debug commands before.
Thomas Arendsen Hein <thomas@intevation.de> [Wed, 05 Apr 2006 15:39:48 +0200] rev 2048
Set correct exception for another possible malloc error in mpatch.c
Edouard Gomez <ed.gomez@free.fr> [Tue, 04 Apr 2006 16:35:20 -0700] rev 2047
Register qversion as a non repository related command
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 04 Apr 2006 15:21:20 +0200] rev 2046
Show remote ssh noise only with --debug and increase the limit to 500 lines.
Messages can already be sent to the user over stderr, if one really wants this.
Benoit Boissinot <benoit.boissinot@ens-lyon.org> [Mon, 03 Apr 2006 22:47:18 +0200] rev 2045
document the possible race in "hg undo"
Thomas Arendsen Hein <thomas@intevation.de> [Mon, 03 Apr 2006 21:38:59 +0200] rev 2044
Don't allow --style and --template for hg update and hg merge.
The only way that changesets will be shown with these command is in an error
message when trying to update to an ambiguous branch name.
Thomas Arendsen Hein <thomas@intevation.de> [Mon, 03 Apr 2006 21:01:33 +0200] rev 2043
Minor fix for revert: No need to make a backup when forgetting added files.
echo foo > foo && hg add foo && hg revert foo
creates foo.orig, though foo is not changed or deleted.
Vadim Gelfer <vadim.gelfer@gmail.com> [Mon, 03 Apr 2006 10:02:09 -0700] rev 2042
small changes to revert command.
fix bug 93: work with files that are in target manifest but not
dirstate.
Alexis S. L. Carvalho <alexis@cecm.usp.br> [Mon, 03 Apr 2006 14:56:00 +0200] rev 2041
bash_completion: completion for commands provided by extensions
Make the bash_completion function call _hg_cmd_$cmd to generate
completion candidates for $cmd if that function exists.
Add basic completion functions for:
- mq:
- qpop
- qpush
- qdelete
- qsave
- qcommit
- strip
- hbisect:
- bisect
- patchbomb:
- email
- gpg:
- sign
Thomas Arendsen Hein <thomas@intevation.de> [Sun, 02 Apr 2006 22:12:56 +0200] rev 2040
Don't enter an endless loop if remote hg doesn't answer, show remote noise.
The endless loop is not only triggered if the remote shell is too noisy, but
even if the local ssh command dies due to an error.
Alexis S. L. Carvalho <alexis@cecm.usp.br> [Sun, 02 Apr 2006 18:20:52 +0200] rev 2039
bash_completion: small optimization
Right now we always call "hg help $cmd" to get the canonical name of $cmd
(i.e. to go from "co" to "update").
This patch optimistically assumes that $cmd is already the canonical form
and tries to generate completions for it. If that fails, it falls back
to canonicalizing $cmd and trying again.
This means that:
- if a command or alias is explicitly handled by the
_hg_command_specific function, things get somewhat faster
- as long as the canonical $cmd is handled by _hg_command_specific, all
its aliases and abbreviations are also handled.
Thomas Arendsen Hein <thomas@intevation.de> [Sun, 02 Apr 2006 18:16:06 +0200] rev 2038
Tell the user the real "hg update -C" command, not just "-C" when aborting.
Thomas Arendsen Hein <thomas@intevation.de> [Sun, 02 Apr 2006 08:19:41 +0200] rev 2037
Merged with crew.
Thomas Arendsen Hein <thomas@intevation.de> [Sat, 01 Apr 2006 11:58:50 +0200] rev 2036
Don't abort when backup files already exist. Don't allow alternative names.
Rationale:
- When the user wants to revert, he shouldn't be stopped from doing
this just because some old backups will be overwritten.
- To not clobber important files by accident, alternative names for backup
files were disabled. As the backup target now has a fixed name, the user
doesn't have to be informed about the backup copy (unless --verbose)
Thomas Arendsen Hein <thomas@intevation.de> [Sat, 01 Apr 2006 23:57:24 +0200] rev 2035
Make 'hg tags -q' only list tag names without revision numbers and hashes,
and change bash_completion to use this.
Alexis S. L. Carvalho <alexis@cecm.usp.br> [Sat, 01 Apr 2006 22:50:12 +0200] rev 2034
add --options to debugcomplete and change bash_completion to use it
make debugcomplete print one item per line (this is not needed for the
bash_completion script, but should be easier to use in other scripts)
Thomas Arendsen Hein <thomas@intevation.de> [Sat, 01 Apr 2006 21:37:08 +0200] rev 2033
Group changes done by the same developer on the same with --style=changelog
Changeset and tags are appended to the change message for non-quiet and
non-verbose output, so grouping works.
Fixes last bit of
issue110.
Thomas Arendsen Hein <thomas@intevation.de> [Sat, 01 Apr 2006 20:56:55 +0200] rev 2032
Don't print filenames in braces for changelog style.
Thomas Arendsen Hein <thomas@intevation.de> [Sat, 01 Apr 2006 19:11:59 +0200] rev 2031
Web site and wiki are now the same.
Vadim Gelfer <vadim.gelfer@gmail.com> [Fri, 31 Mar 2006 10:52:56 -0800] rev 2030
forgot to rerun tests after changed backup extension to .orig.
thomas a.h. found this.
Vadim Gelfer <vadim.gelfer@gmail.com> [Fri, 31 Mar 2006 10:37:25 -0800] rev 2029
rewrite revert command. fix issues 93, 123, 147.
new version does these things:
- saves backup copies of modified files (issue 147)
- prints output like other commands, and errors when files not found
(issue 123)
- marks files added/removed (issue 93)
Matt Mackall <mpm@selenic.com> [Fri, 31 Mar 2006 03:25:35 -0600] rev 2028
ssh: skip noise generated by remote shell
we send a dummy command with known output to get in sync
Vadim Gelfer <vadim.gelfer@gmail.com> [Thu, 30 Mar 2006 19:28:41 -0800] rev 2027
work around python bug on solaris 10.
write to file opened mode 'a+' should write to end of file and update
offset pointer, but does not (solaris 10 has python 2.3.3).
fix is to always seek.
Vadim Gelfer <vadim.gelfer@gmail.com> [Thu, 30 Mar 2006 18:35:52 -0800] rev 2026
more windows fixes.
Vadim Gelfer <vadim.gelfer@gmail.com> [Thu, 30 Mar 2006 18:27:04 -0800] rev 2025
clean up lee's windows testpid fix.
Lee Cantey <lcantey@gmail.com> [Thu, 30 Mar 2006 18:20:08 -0800] rev 2024
Fixes to testpid() for Windows.
Handle processes that no longer exist and processes that belong to another user.
Enables the lock breaking changes from
d314a89fa4f1 and subsequently "fixes" the left over locks reported in bug 112.
Thomas Arendsen Hein <thomas@intevation.de> [Thu, 30 Mar 2006 18:43:46 +0200] rev 2023
Use [ x = y ] instead of [ x == y ] in shell scripts.
Thomas Arendsen Hein <thomas@intevation.de> [Wed, 29 Mar 2006 22:58:34 +0200] rev 2022
New option -i/--ignored for 'hg status' to show ignored files.
localrepo.changes() now returns an additional list of ignored files if
it is called with show_ignored=True.
Thomas Arendsen Hein <thomas@intevation.de> [Wed, 29 Mar 2006 22:35:21 +0200] rev 2021
Fix hg push and hg push -r sometimes creating new heads without --force.
Fixing
issue179.
The algorithm checks if there not more new heads on the remote side than heads
which become non-heads due to getting children.
Pushing this repo:
m
/\
3 3a|
|/ /
2 2a
|/
1
to a repo only having 1, 2 and 3 didn't abort requiring --force before.
Added test cases for this and some doc strings for used methods.
Vadim Gelfer <vadim.gelfer@gmail.com> [Wed, 29 Mar 2006 10:31:58 -0800] rev 2020
merge with crew.
Vadim Gelfer <vadim.gelfer@gmail.com> [Wed, 29 Mar 2006 10:27:16 -0800] rev 2019
add merge command. means same thing as "update -m".
repo.addchangegroup method now returns number of heads modified and added,
so command line can tell whether update or merge needed. this makes
tiny change to ssh wire protocol, but change is backwards compatible.
pull command now returns 0 if no changes to pull.
Vadim Gelfer <vadim.gelfer@gmail.com> [Wed, 29 Mar 2006 10:16:04 -0800] rev 2018
merge with crew.
Vadim Gelfer <vadim.gelfer@gmail.com> [Tue, 28 Mar 2006 09:04:33 -0800] rev 2017
merge with crew.
Vadim Gelfer <vadim.gelfer@gmail.com> [Tue, 28 Mar 2006 09:01:07 -0800] rev 2016
fix backtrace printed when cannot get lock.
change lock error handling code so exceptions have useful info and
exception handling in one place.
add test case for when cannot get lock.
Thomas Arendsen Hein <thomas@intevation.de> [Wed, 29 Mar 2006 12:45:33 +0200] rev 2015
Catch HTTPException when reading from remote http repository.
If the server dies very early, an httplib.IncompleteRead exception may be
raised, because httplib can't read a single byte. Catching all HTTPException
subclasses here will prevent ugly backtraces for similar things, too.
Vadim Gelfer <vadim.gelfer@gmail.com> [Tue, 28 Mar 2006 09:26:38 -0800] rev 2014
merge with crew.
Eung-Ju Park <eungju@gmail.com> [Tue, 28 Mar 2006 09:24:29 -0800] rev 2013
Fix error on Windows if "hg log | more" exits.
TK Soh <teekaysoh@yahoo.com> [Tue, 28 Mar 2006 19:02:00 +0200] rev 2012
add missing filename title to gitweb's filelog page
TK Soh <teekaysoh@yahoo.com> [Tue, 28 Mar 2006 18:54:00 +0200] rev 2011
don't overquote description on gitweb summary page (issue 184)
Vadim Gelfer <vadim.gelfer@gmail.com> [Mon, 27 Mar 2006 08:31:33 -0800] rev 2010
fix appendfile problem on macos.
when i open file with mode 'a+' on linux, seek position is 0.
on macos seek position is end of file instead. not documented.
Thomas Arendsen Hein <thomas@intevation.de> [Sun, 26 Mar 2006 22:54:05 +0200] rev 2009
Fix broken hgignore tests due to full path showing up in output.
Thomas Arendsen Hein <thomas@intevation.de> [Sun, 26 Mar 2006 22:32:44 +0200] rev 2008
Don't ignore everything if all hgignore files are empty.
TK Soh <teekaysoh@yahoo.com> [Sun, 26 Mar 2006 07:28:52 -0800] rev 2007
show committer's name on gitweb's summary page (issue 137)
Thomas Arendsen Hein <thomas@intevation.de> [Sat, 25 Mar 2006 10:31:06 +0100] rev 2006
Show reason why an ignore file can't be read and state that it is skipped.
mcmillen@cs.cmu.edu [Sat, 25 Mar 2006 10:12:23 +0100] rev 2005
On error parsing hgignore file, print the correct filename.
mcmillen@cs.cmu.edu [Sat, 25 Mar 2006 10:02:39 +0100] rev 2004
Add warning if user-configured hgignore file isn't found
mcmillen@cs.cmu.edu [Fri, 24 Mar 2006 20:18:02 +0100] rev 2003
Implementation of per-user .hgignore.
Reference: http://www.selenic.com/mercurial/bts/
issue166
If the [ui] section of .hgrc contains keys like "ignore" or
"ignore.something", the values corresponding to these keys are
treated as per-user hgignore files. These hgignore files apply to all
repositories used by that user.
Thomas Arendsen Hein <thomas@intevation.de> [Fri, 24 Mar 2006 19:51:05 +0100] rev 2002
Calling revlog.addgroup with an empty changegroup now raises RevlogError.
The empty changegroup can be caused by remote servers dying soon after
findincoming, and further code in pull assumes (correctly) that there are
new changesets.
Lee Cantey <lcantey@gmail.com> [Fri, 24 Mar 2006 10:33:18 -0800] rev 2001
Windows py2exe version didn't handle names given to templatepath() correctly
Vadim Gelfer <vadim.gelfer@gmail.com> [Fri, 24 Mar 2006 10:31:23 -0800] rev 2000
add benoit's test for
issue148.
Vadim Gelfer <vadim.gelfer@gmail.com> [Fri, 24 Mar 2006 09:23:11 -0800] rev 1999
forgot to add new module.
Vadim Gelfer <vadim.gelfer@gmail.com> [Fri, 24 Mar 2006 09:08:12 -0800] rev 1998
fix race in localrepo.addchangegroup.
localrepo.addchangegroup writes to changelog, then manifest, then normal
files. this breaks access ordering. if reader reads changelog while
manifest is being written, can find pointers into places in manifest
that are not yet written. same can happen for manifest and normal files.
fix is to make almost no change to localrepo.addchangegroup. it must
to write changelog and manifest data early because it has to read them
while writing other files. instead, write changelog and manifest data
to temp file that reader cannot see, then append temp data to manifest
after all normal files written, finally append temp data to changelog.
temp file code is in new appendfile module. can be used in other places
with small changes.
much smaller race still left. we write all new data in one write call,
but reader can maybe see partial update because python or os or filesystem
cannot always make write really atomic. file locking no help: slow, not
portable, not reliable over nfs. only real safe other plan is write to
temp file every time and rename, but performance bad when manifest or
changelog is big.
Thomas Arendsen Hein <thomas@intevation.de> [Fri, 24 Mar 2006 15:19:08 +0100] rev 1997
Added missing gettext import to changegroup.py.
Thomas Arendsen Hein <thomas@intevation.de> [Fri, 24 Mar 2006 15:03:15 +0100] rev 1996
Don't mention deprecated HGEDITOR variable in the help text of commit.
mcmillen@cs.cmu.edu [Fri, 24 Mar 2006 14:53:23 +0100] rev 1995
Spelling fix: "commited" -> "committed"
Thomas Arendsen Hein <thomas@intevation.de> [Fri, 24 Mar 2006 08:51:08 +0100] rev 1994
show message if no changes found on outgoing
Now the messages for pull/push/incoming/outgoing should be consistent.
TK Soh <teekaysoh@yahoo.com> [Fri, 24 Mar 2006 08:34:56 +0100] rev 1993
show message if no changes found on incoming
Lee Cantey <lcantey@gmail.com> [Fri, 24 Mar 2006 08:27:24 +0100] rev 1992
Include templates/static/* in MANIFEST.in so that distutils setup will include them.
Benoit Boissinot <benoit.boissinot@ens-lyon.org> [Thu, 23 Mar 2006 23:55:51 +0100] rev 1991
merge with self
Benoit Boissinot <benoit.boissinot@ens-lyon.org> [Thu, 23 Mar 2006 23:39:53 +0100] rev 1990
make it possible to escape characters in a glob expression
Benoit Boissinot <benoit.boissinot@ens-lyon.org> [Thu, 23 Mar 2006 23:16:41 +0100] rev 1989
ignore EPIPE in ui.err_write
It avoids not being able to abort a transaction when a push via ssh fails.
Maybe some other place should ignore EPIPE too.
Vadim Gelfer <vadim.gelfer@gmail.com> [Tue, 21 Mar 2006 23:31:04 -0800] rev 1988
merge with crew.
Vadim Gelfer <vadim.gelfer@gmail.com> [Tue, 21 Mar 2006 23:29:21 -0800] rev 1987
add changelog style to command line template.
to use, "hg log --style=changelog". makes different output with no
flags, -q, -v, --debug.
templater module has new template filters for this.
email - committer email address
fill68 - refill text to 68 colums
fill76 - refill text to 76 colums
tabindent - prefix every not empty line with tab
shortdate - iso 8631 date, no time zone
stringify - turn template iterator into string
Benoit Boissinot <benoit.boissinot@ens-lyon.org> [Wed, 22 Mar 2006 05:30:47 +0100] rev 1986
add checking for invalid entries in tag files
safely parse the differents tag files, output warning
when parsing an invalid entry.
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 21 Mar 2006 15:33:29 +0100] rev 1985
Adapted behaviour of ui.username() to documentation and mention it explicitly:
Searched in this order: $HGUSER, [ui] section of hgrcs, $EMAIL
and stop searching if one of these is set.
Abort if found username is an empty string to force specifying
the commit user elsewhere, e.g. with line option or repo hgrc.
If not found, use $LOGNAME or $USERNAME +"@full.hostname".
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 21 Mar 2006 12:54:32 +0100] rev 1984
Improved ui.edit():
- Use descriptive name for temporary file: hg-editor-*.txt
- Don't import tempfile in the method, but use demandload()
- Remove tempfile file even if editor aborts.
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 21 Mar 2006 12:45:27 +0100] rev 1983
Pass correct username as $HGUSER to hgeditor if "commit -u" is used.
And only use the new util.system parameter to set the environment.
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 21 Mar 2006 12:15:25 +0100] rev 1982
Added test for incoming via ssh.
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 21 Mar 2006 11:47:21 +0100] rev 1981
make incoming work via ssh (
issue139); move chunk code into separate module.
Incoming ssh needs to detect the end of the changegroup, otherwise it would
block trying to read from the ssh pipe. This is done by parsing the
changegroup chunks.
bundlerepo.getchunk() already is identical to
localrepo.addchangegroup.getchunk(), which is followed by getgroup which
looks much like what you can re-use in bundlerepository.__init__() and in
write_bundle(). bundlerevlog.__init__.genchunk() looks very similar, too,
as do some while loops in localrepo.py.
Applied patch from Benoit Boissinot to move duplicate/related code
to mercurial/changegroup.py and use this to fix incoming ssh.