sapling/eden/scm/tests/test-log-wireproto-requests.t
Jun Wu 856e8ab3ef setdiscovery: reimplement findcommonheads without Python DAG deps
Summary:
Re-implement the `findcommonheads` logic using `changelog` APIs that are going
to have native support from Rust.

This decouples from revlog-based Python DAG logic, namely `dagutil.revlogdag`,
and `ancestor.incrementalmissingancestors`, unblocking Rust DAG progress, and
cleans up the algorithm to not use revision numbers.

The core algorithm is unchanged.  The sampling logic is simplified and tweaked
a bit (ex. no 'initial' / 'quick initial' special cases). The debug and
progress messages are more verbose, and variable names are chosen to match
the docstrings.

I improved the doc a bit, and added some TODO notes about where I think can be
improved.

Reviewed By: sfilipco

Differential Revision: D22519582

fbshipit-source-id: ac8cc8bebad91b4045d69f402e69b7ca28146414
2020-07-30 20:32:30 -07:00

74 lines
5.3 KiB
Perl

#require py2
$ . "$TESTDIR/helpers-wireprotologging.sh"
$ disable treemanifest
$ CACHEDIR="$TESTTMP/hgcache"
$ configure dummyssh
$ enable remotefilelog
$ setconfig remotefilelog.cachepath="$CACHEDIR"
$ hg init repo
$ capturewireprotologs
$ cd repo
$ setconfig remotefilelog.server=true
$ cd ..
$ hg clone ssh://user@dummy/repo --shallow repo-clone -q
$ cd repo
$ setconfig wireproto.logrequests=batch,branchmap,getbundle,hello,listkeys,lookup,between,unbundle
$ setconfig wireproto.loggetfiles=true
$ echo a > a && hg add a && hg ci -m a
$ cd ../repo-clone
$ hg pull 2>&1 | grep wireproto_requests
remote: wireproto_requests: (args=[], command=hello, duration=*, reponame=unknown, responselen=*) (glob)
remote: wireproto_requests: (args=['0000000000000000000000000000000000000000-0000000000000000000000000000000000000000'], command=between, duration=*, reponame=unknown, responselen=*) (glob)
remote: wireproto_requests: (args=[], command=batch, duration=*, reponame=unknown, responselen=*) (glob)
remote: wireproto_requests: (args=[('bookmarks', '1'), ('bundlecaps', 'HG20,$USUAL_BUNDLE2_CAPS$%0Aremotefilelog%3DTrue,remotefilelog'), ('cg', '1'), ('common', ''), ('heads', 'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b'), ('listkeys', 'bookmarks'), ('phases', '1')], command=getbundle, duration=*, reponame=unknown, responselen=*) (glob)
$ cd ../repo
$ echo b > b && hg add b && hg ci -m b
$ echo c > c && hg add c && hg ci -m c
$ cd ../repo-clone
$ hg pull 2>&1 | grep wireproto_requests
remote: wireproto_requests: (args=[], command=hello, duration=*, reponame=unknown, responselen=*) (glob)
remote: wireproto_requests: (args=['0000000000000000000000000000000000000000-0000000000000000000000000000000000000000'], command=between, duration=*, reponame=unknown, responselen=*) (glob)
remote: wireproto_requests: (args=[], command=batch, duration=*, reponame=unknown, responselen=*) (glob)
remote: wireproto_requests: (args=[('bookmarks', '1'), ('bundlecaps', 'HG20,$USUAL_BUNDLE2_CAPS$%0Aremotefilelog%3DTrue,remotefilelog'), ('cg', '1'), ('common', 'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b'), ('heads', '177f92b773850b59254aa5e923436f921b55483b'), ('listkeys', 'bookmarks'), ('phases', '1')], command=getbundle, duration=*, reponame=unknown, responselen=*) (glob)
$ hg up tip -q
Looks like `ui.warn()` after getfiles might not make it's way to client hg. Let's read from file
$ grep 'getpack' $TESTTMP/loggedrequests
wireproto_requests: (args=[*], command=getpack*, duration=*, reponame=unknown, responselen=*) (glob)
$ echo cc > c && hg ci -m c
$ hg push --force 2>&1 | grep wireproto_requests
remote: wireproto_requests: (args=[], command=hello, duration=*, reponame=unknown, responselen=*) (glob)
remote: wireproto_requests: (args=['0000000000000000000000000000000000000000-0000000000000000000000000000000000000000'], command=between, duration=*, reponame=unknown, responselen=*) (glob)
remote: wireproto_requests: (args=[], command=batch, duration=*, reponame=unknown, responselen=*) (glob)
remote: wireproto_requests: (args=['bookmarks'], command=listkeys, duration=*, reponame=unknown, responselen=*) (glob)
remote: wireproto_requests: (args=['666f726365'], command=unbundle, duration=*, reponame=unknown, responselen=*) (glob)
$ hg pull -r ololo 2>&1 | grep wireproto_requests
remote: wireproto_requests: (args=[], command=hello, duration=*, reponame=unknown, responselen=*) (glob)
remote: wireproto_requests: (args=['0000000000000000000000000000000000000000-0000000000000000000000000000000000000000'], command=between, duration=*, reponame=unknown, responselen=*) (glob)
remote: wireproto_requests: (args=['bookmarks'], command=listkeys, duration=*, reponame=unknown, responselen=0) (glob)
remote: wireproto_requests: (args=['ololo'], command=lookup, duration=*, reponame=unknown, responselen=*) (glob)
Enable clienttelemetry and change reponame
$ cat >> $HGRCPATH <<EOF
> [extensions]
> clienttelemetry=
> [common]
> reponame=repo
> EOF
$ hg pull 2>&1 | grep wireproto_requests
remote: wireproto_requests: (args=[], command=hello, duration=*, reponame=repo, responselen=*) (glob)
remote: wireproto_requests: (args=['0000000000000000000000000000000000000000-0000000000000000000000000000000000000000'], command=between, duration=*, reponame=repo, responselen=*) (glob)
remote: wireproto_requests: (args=[], client_fullcommand=pull, client_hostname=*, command=batch, duration=*, reponame=repo, responselen=*) (glob)
remote: wireproto_requests: (args=[('bookmarks', '1'), ('bundlecaps', 'HG20,$USUAL_BUNDLE2_CAPS$%0Aremotefilelog%3DTrue,remotefilelog'), ('cg', '0'), ('common', 'cc27a19b3db0a292460298a71c413840f27f6a37'), ('heads', 'cc27a19b3db0a292460298a71c413840f27f6a37'), ('listkeys', 'bookmarks'), ('phases', '1')], client_fullcommand=pull, client_hostname=*, command=getbundle, duration=*, reponame=repo, responselen=*) (glob)
$ cd ../repo
$ echo xxx > xxx && hg add xxx && hg ci -m xxx
$ cd -
$TESTTMP/repo-clone
$ hg pull -q
$ hg up tip -q
$ grep 'getpack' $TESTTMP/loggedrequests
wireproto_requests: (args=[*], command=getpack*, duration=*, reponame=unknown, responselen=*) (glob)
wireproto_requests: (args=[*], client_fullcommand=up tip -q, client_hostname=*, command=getpack*, duration=*, reponame=repo, responselen=*) (glob)