scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Previously, if a subrepo was added in ctx2 and then compared to another without
it (ctx1), the subrepo for ctx2 was returned amongst all of the ctx1 based
subrepos, since no subrepo exists in ctx1 to replace it in the 'subpaths' dict.
The two callers of this, basectx.status() and cmdutil.diffordiffstat(), both
compare the yielded subrepo against ctx2, and thus saw no changes when ctx2's
subrepo was returned. The tests here previously didn't mention 's/a' for the
'p1()' case.
This appears to have been a known issue, because some diffordiffstat() comments
mention that the subpath disappeared, and "the best we can do is ignore it". I
originally ran into the issue with some custom convert code to flatten a tree of
subrepos causing hg.putcommit() to abort, but this new behavior seems like the
correct status and diff behavior regardless. (The abort in convert isn't
something users will see, because convert doesn't currently support subrepos in
the official repo.)
$ echo 'raise Exception("bit bucket overflow")' > badext.py
$ abspath=`pwd`/badext.py
$ cat <<EOF >> $HGRCPATH
> [extensions]
> gpg =
> hgext.gpg =
> badext = $abspath
> badext2 =
> EOF
$ hg -q help help
*** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow
*** failed to import extension badext2: No module named badext2
hg help [-ec] [TOPIC]
show help for a given topic or a help overview
show traceback
$ hg -q help help --traceback 2>&1 | grep -v '^ '
*** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow
Traceback (most recent call last):
Exception: bit bucket overflow
*** failed to import extension badext2: No module named badext2
Traceback (most recent call last):
ImportError: No module named badext2
hg help [-ec] [TOPIC]
show help for a given topic or a help overview
show traceback for ImportError of hgext.name if debug is set
(note that --debug option isn't applied yet when loading extensions)
$ hg help help --traceback --config ui.debug=True 2>&1 \
> | grep -v '^ ' | head -n10
*** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow
Traceback (most recent call last):
Exception: bit bucket overflow
could not import hgext.badext2 (No module named badext2): trying badext2
Traceback (most recent call last):
ImportError: No module named badext2
*** failed to import extension badext2: No module named badext2
Traceback (most recent call last):
ImportError: No module named badext2
hg help [-ec] [TOPIC]