rebase: allow aborting if last-message.txt is missing
Previously, if .hg/rebasestate existed but .hg/last-message.txt was missing, 'hg
rebase --abort' would say there's no rebase in progress but 'hg checkout foo'
would say 'abort: rebase in progress'. It turns out loading the collapse message
will throw a "no rebase in progress" error if the file doesn't exist, even
though .hg/rebasestate obviously indicates a rebase is in progress.
The fix is to only throw an exception if we're trying to --continue, and to just
eat the issues if we're doing --abort.
This issue is exposed by us writing the rebase state earlier in the process.
This will be used by later patches to ensure the user can appropriately 'hg
rebase --abort' if there's a crash before the first the first commit has
finished rebasing. Tests cover all of this. The only negative affect is we now
require a hg rebase --abort in a very specific exception case, as shown in the
test.
$ hg init outer
$ cd outer
$ echo '[paths]' >> .hg/hgrc
$ echo 'default = http://example.net/' >> .hg/hgrc
hg debugsub with no remapping
$ echo 'sub = libfoo' > .hgsub
$ hg add .hgsub
$ hg debugsub
path sub
source libfoo
revision
hg debugsub with remapping
$ echo '[subpaths]' >> .hg/hgrc
$ printf 'http://example.net/lib(.*) = C:\\libs\\\\1-lib\\\n' >> .hg/hgrc
$ hg debugsub
path sub
source C:\libs\foo-lib\
revision
test cumulative remapping, the $HGRCPATH file is loaded first
$ echo '[subpaths]' >> $HGRCPATH
$ echo 'libfoo = libbar' >> $HGRCPATH
$ hg debugsub
path sub
source C:\libs\bar-lib\
revision
test absolute source path -- testing with a URL is important since
standard os.path.join wont treat that as an absolute path
$ echo 'abs = http://example.net/abs' > .hgsub
$ hg debugsub
path abs
source http://example.net/abs
revision
$ echo 'abs = /abs' > .hgsub
$ hg debugsub
path abs
source /abs
revision
test bad subpaths pattern
$ cat > .hg/hgrc <<EOF
> [subpaths]
> .* = \1
> EOF
$ hg debugsub
abort: bad subrepository pattern in $TESTTMP/outer/.hg/hgrc:2: invalid group reference (glob)
[255]
$ cd ..