changegroup: track changelog to manifest revision map explicitly
Previously, self._nextclrevtolocalrev was only populated as part
of the changelog lookup callback. But cgpacker._close() was looking
at self._nextclrevtolocalrev on every invocation.
Since self._nextclrevtolocalrev is for communicating the mapping
of changelog revisions to manifest revisions, this commit refactors
the code to make that explicit.
The changelog state now stores this mapping. And after the changelog
group is emitted, we update self._clrevtolocalrev with that dict.
self._nextclrevtolocalrev is unused and has been deleted.
Differential Revision: https://phab.mercurial-scm.org/D4190
#require serve symlink
Tests whether or not hgwebdir properly handles various symlink topologies.
hide outer repo
$ hg init
$ hg init a
$ echo a > a/a
$ hg --cwd a ci -Ama -d'1 0'
adding a
$ mkdir webdir
$ cd webdir
$ hg init b
$ echo b > b/b
$ hg --cwd b ci -Amb -d'2 0'
adding b
$ hg init c
$ echo c > c/c
$ hg --cwd c ci -Amc -d'3 0'
adding c
$ ln -s ../a al
$ ln -s ../webdir circle
$ root=`pwd`
$ cd ..
$ cat > collections.conf <<EOF
> [collections]
> $root=$root
> EOF
$ hg serve -p $HGPORT -d --pid-file=hg.pid --webdir-conf collections.conf \
> -A access-collections.log -E error-collections.log
$ cat hg.pid >> $DAEMON_PIDS
should succeed
$ get-with-headers.py localhost:$HGPORT '?style=raw'
200 Script output follows
/al/
/b/
/c/
$ get-with-headers.py localhost:$HGPORT 'al/file/tip/a?style=raw'
200 Script output follows
a
$ get-with-headers.py localhost:$HGPORT 'b/file/tip/b?style=raw'
200 Script output follows
b
$ get-with-headers.py localhost:$HGPORT 'c/file/tip/c?style=raw'
200 Script output follows
c
should fail
$ get-with-headers.py localhost:$HGPORT 'circle/al/file/tip/a?style=raw'
404 Not Found
error: repository circle/al/file/tip/a not found
[1]
$ get-with-headers.py localhost:$HGPORT 'circle/b/file/tip/a?style=raw'
404 Not Found
error: repository circle/b/file/tip/a not found
[1]
$ get-with-headers.py localhost:$HGPORT 'circle/c/file/tip/a?style=raw'
404 Not Found
error: repository circle/c/file/tip/a not found
[1]
collections errors
$ cat error-collections.log