[PATCH 5 of 8] wireproto: add nonabandoned wireproto command
Matt Mackall
mpm at selenic.com
Wed Jun 1 12:25:49 CDT 2011
On Wed, 2011-06-01 at 18:42 +0200, Martin Geisler wrote:
> # HG changeset patch
> # User Martin Geisler <mg at lazybytes.net>
> # Date 1306923811 -7200
> # Node ID 09faf6a64b54632148461ca185c000849c7cb02f
> # Parent c64031c2591a669eb251e96e9cc0b91776413187
> wireproto: add nonabandoned wireproto command
>
> Used with httprepo and sshrepo to let the server prune the list of
> heads to just the non-abandoned heads.
I'd like a bit more detail about what this actually does.
> diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py
> --- a/mercurial/wireproto.py
> +++ b/mercurial/wireproto.py
> @@ -159,6 +159,17 @@
> self.ui.status(_('remote: '), l)
> return ret
>
> + def nonabandoned(self, candidates, clientheads):
> + self.requirecap('getbundle', _('look up non-abandoned heads'))
> + opts = {}
> + opts['candidates'] = encodelist(candidates)
> + opts['clientheads'] = encodelist(clientheads)
> + d = self._call('nonabandoned', **opts)
> + try:
> + return decodelist(d[:-1])
> + except ValueError:
> + self._abort(error.ResponseError(_("unexpected response:"), d))
> +
> def debugwireargs(self, one, two, three=None, four=None, five=None):
> # don't pass optional arguments left at their default value
> opts = {}
> @@ -291,6 +302,11 @@
> def known(repo, proto, nodes, others):
> return ''.join(b and "1" or "0" for b in repo.known(decodelist(nodes)))
>
> +def nonabandoned(repo, proto, candidates, clientheads, others):
> + heads = repo.nonabandoned(decodelist(candidates),
> + decodelist(clientheads))
> + return encodelist(heads) + '\n'
> +
> def pushkey(repo, proto, namespace, key, old, new):
> # compatibility with pre-1.8 clients which were accidentally
> # sending raw binary nodes rather than utf-8-encoded hex
> @@ -415,6 +431,7 @@
> 'known': (known, 'nodes *'),
> 'listkeys': (listkeys, 'namespace'),
> 'lookup': (lookup, 'key'),
> + 'nonabandoned': (nonabandoned, 'candidates clientheads *'),
> 'pushkey': (pushkey, 'namespace key old new'),
> 'stream_out': (stream, ''),
> 'unbundle': (unbundle, 'heads'),
> diff --git a/tests/test-abandoned-http.t b/tests/test-abandoned-http.t
> new file mode 100644
> --- /dev/null
> +++ b/tests/test-abandoned-http.t
> @@ -0,0 +1,98 @@
> +setting up
> +
> + $ cat >> $HGRCPATH <<EOF
> + > [ui]
> + > logtemplate = '{rev} {node|short} {desc|firstline|strip}\n'
> + > [defaults]
> + > abandon = -d "0 0"
> + > [extensions]
> + > graphlog =
> + > EOF
> +
> + $ hg init repo
> + $ cd repo
> + $ touch i x
> + $ hg commit -A -m init i
> + $ hg commit -A -m x x
> + $ hg glog
> + @ 1 0b00c28422ee x
> + |
> + o 0 54dbcd775ef0 init
> +
> + $ hg init ../empty
> + $ hg clone -q -r 0 . ../base-i
> + $ hg clone -q -r 1 . ../base-x
> +
> +abandon x
> +
> + $ hg abandon 1::
> + $ hg glog
> + o 2 339976ff5010 abandoned
> + |
> + @ 1 0b00c28422ee x
> + |
> + o 0 54dbcd775ef0 init
> +
> +
> +outgoing and push against empty repository
> +==========================================
> +
> + $ cd ../empty
> + $ hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log \
> + > --config 'web.push_ssl=No' --config 'web.allow_push=*'
> + $ cat hg.pid >> $DAEMON_PIDS
> + $ cd ../repo
> +
> +hg outgoing
> +-----------
> +
> +testing outgoing with no shared abandoned changesets
> +
> + $ hg out http://localhost:$HGPORT/
> + comparing with http://localhost:$HGPORT/
> + searching for changes
> + 0 54dbcd775ef0 init
> +
> +testing outgoing --abandoned with no shared abandoned changesets
> +
> + $ hg out --abandoned http://localhost:$HGPORT/
> + comparing with http://localhost:$HGPORT/
> + searching for changes
> + 0 54dbcd775ef0 init
> + 1 0b00c28422ee x
> + 2 339976ff5010 abandoned
> +
> +hg push
> +=======
> +
> +testing push with no shared abandoned changesets
> +
> + $ hg push http://localhost:$HGPORT/
> + pushing to http://localhost:$HGPORT/
> + searching for changes
> + remote: adding changesets
> + remote: adding manifests
> + remote: adding file changes
> + remote: added 1 changesets with 1 changes to 1 files
> + $ hg -R ../empty log --abandoned
> + 0 54dbcd775ef0 init
> + $ hg -R ../empty rollback -q
> +
> +testing push --abandoned with no shared abandoned changesets
> +
> + $ hg push --abandoned http://localhost:$HGPORT/
> + pushing to http://localhost:$HGPORT/
> + searching for changes
> + remote: adding changesets
> + remote: adding manifests
> + remote: adding file changes
> + remote: added 3 changesets with 2 changes to 2 files
> + $ hg -R ../empty log --abandoned
> + 2 339976ff5010 abandoned
> + 1 0b00c28422ee x
> + 0 54dbcd775ef0 init
> + $ hg -R ../empty rollback -q
> +
> +error log
> +
> + $ cat ../empty/errors.log
> diff --git a/tests/test-abandoned.t b/tests/test-abandoned.t
> --- a/tests/test-abandoned.t
> +++ b/tests/test-abandoned.t
> @@ -3,6 +3,7 @@
> $ cat >> $HGRCPATH <<EOF
> > [ui]
> > logtemplate = '{rev} {node|short} {desc|firstline|strip}\n'
> + > ssh = python $TESTDIR/dummyssh
> > [defaults]
> > abandon = -d "0 0"
> > [extensions]
> @@ -65,12 +66,23 @@
> searching for changes
> 0 54dbcd775ef0 init
>
> + $ hg out ssh://user@dummy/empty
> + comparing with ssh://user@dummy/empty
> + searching for changes
> + 0 54dbcd775ef0 init
> +
> $ hg out ../base-i
> comparing with ../base-i
> searching for changes
> no changes found
> [1]
>
> + $ hg out ssh://user@dummy/base-i
> + comparing with ssh://user@dummy/base-i
> + searching for changes
> + no changes found
> + [1]
> +
> testing outgoing --abandoned with no shared abandoned changesets
>
> $ hg out --abandoned ../empty
> @@ -80,12 +92,25 @@
> 1 0b00c28422ee x
> 2 339976ff5010 abandoned
>
> + $ hg out --abandoned ssh://user@dummy/empty
> + comparing with ssh://user@dummy/empty
> + searching for changes
> + 0 54dbcd775ef0 init
> + 1 0b00c28422ee x
> + 2 339976ff5010 abandoned
> +
> $ hg out --abandoned ../base-i
> comparing with ../base-i
> searching for changes
> 1 0b00c28422ee x
> 2 339976ff5010 abandoned
>
> + $ hg out --abandoned ssh://user@dummy/base-i
> + comparing with ssh://user@dummy/base-i
> + searching for changes
> + 1 0b00c28422ee x
> + 2 339976ff5010 abandoned
> +
> testing outgoing with a shared abandoned changeset
>
> $ hg out ../base-x
> @@ -93,11 +118,21 @@
> searching for changes
> 2 339976ff5010 abandoned
>
> + $ hg out ssh://user@dummy/base-x
> + comparing with ssh://user@dummy/base-x
> + searching for changes
> + 2 339976ff5010 abandoned
> +
> $ hg out --abandoned ../base-x
> comparing with ../base-x
> searching for changes
> 2 339976ff5010 abandoned
>
> + $ hg out --abandoned ssh://user@dummy/base-x
> + comparing with ssh://user@dummy/base-x
> + searching for changes
> + 2 339976ff5010 abandoned
> +
> hg push
> =======
>
> @@ -114,11 +149,27 @@
> 0 54dbcd775ef0 init
> $ hg -R ../empty rollback -q
>
> + $ hg push ssh://user@dummy/empty
> + pushing to ssh://user@dummy/empty
> + searching for changes
> + remote: adding changesets
> + remote: adding manifests
> + remote: adding file changes
> + remote: added 1 changesets with 1 changes to 1 files
> + $ hg -R ../empty log --abandoned
> + 0 54dbcd775ef0 init
> + $ hg -R ../empty rollback -q
> +
> $ hg push ../base-i
> pushing to ../base-i
> searching for changes
> no changes found
>
> + $ hg push ssh://user@dummy/base-i
> + pushing to ssh://user@dummy/base-i
> + searching for changes
> + no changes found
> +
> testing push --abandoned with no shared abandoned changesets
>
> $ hg push --abandoned ../empty
> @@ -134,6 +185,19 @@
> 0 54dbcd775ef0 init
> $ hg -R ../empty rollback -q
>
> + $ hg push --abandoned ssh://user@dummy/empty
> + pushing to ssh://user@dummy/empty
> + searching for changes
> + remote: adding changesets
> + remote: adding manifests
> + remote: adding file changes
> + remote: added 3 changesets with 2 changes to 2 files
> + $ hg -R ../empty log --abandoned
> + 2 339976ff5010 abandoned
> + 1 0b00c28422ee x
> + 0 54dbcd775ef0 init
> + $ hg -R ../empty rollback -q
> +
> $ hg push --abandoned ../base-i
> pushing to ../base-i
> searching for changes
> @@ -162,6 +226,19 @@
> 0 54dbcd775ef0 init
> $ hg -R ../base-x rollback -q
>
> + $ hg push ssh://user@dummy/base-x
> + pushing to ssh://user@dummy/base-x
> + searching for changes
> + remote: adding changesets
> + remote: adding manifests
> + remote: adding file changes
> + remote: added 1 changesets with 0 changes to 0 files
> + $ hg -R ../base-x log --abandoned
> + 2 339976ff5010 abandoned
> + 1 0b00c28422ee x
> + 0 54dbcd775ef0 init
> + $ hg -R ../base-x rollback -q
> +
> $ hg push --abandoned ../base-x
> pushing to ../base-x
> searching for changes
> @@ -185,6 +262,11 @@
> comparing with ../repo
> 0 54dbcd775ef0 init
>
> + $ cd ../empty
> + $ hg in ssh://user@dummy/repo
> + comparing with ssh://user@dummy/repo
> + 0 54dbcd775ef0 init
> +
> $ cd ../base-i
> $ hg in ../repo
> comparing with ../repo
> @@ -192,6 +274,13 @@
> no changes found
> [1]
>
> + $ cd ../base-i
> + $ hg in ssh://user@dummy/repo
> + comparing with ssh://user@dummy/repo
> + searching for changes
> + no changes found
> + [1]
> +
> testing incoming --abandoned with no shared abandoned changesets
>
> $ cd ../empty
> @@ -201,6 +290,12 @@
> 1 0b00c28422ee x
> 2 339976ff5010 abandoned
>
> + $ hg in --abandoned ssh://user@dummy/repo
> + comparing with ssh://user@dummy/repo
> + 0 54dbcd775ef0 init
> + 1 0b00c28422ee x
> + 2 339976ff5010 abandoned
> +
> $ cd ../base-i
> $ hg in --abandoned ../repo
> comparing with ../repo
> @@ -208,6 +303,12 @@
> 1 0b00c28422ee x
> 2 339976ff5010 abandoned
>
> + $ hg in --abandoned ssh://user@dummy/repo
> + comparing with ssh://user@dummy/repo
> + searching for changes
> + 1 0b00c28422ee x
> + 2 339976ff5010 abandoned
> +
> testing incoming with a shared abandoned changeset
>
> $ cd ../base-x
> diff --git a/tests/test-debugcomplete.t b/tests/test-debugcomplete.t
> --- a/tests/test-debugcomplete.t
> +++ b/tests/test-debugcomplete.t
> @@ -197,8 +197,8 @@
> init: ssh, remotecmd, insecure
> log: follow, follow-first, date, copies, keyword, rev, removed, only-merges, user, only-branch, branch, prune, abandoned, patch, git, limit, no-merges, stat, style, template, include, exclude
> merge: force, tool, rev, preview
> - pull: update, force, rev, bookmark, branch, ssh, remotecmd, insecure
> - push: force, rev, bookmark, branch, new-branch, ssh, remotecmd, insecure
> + pull: update, force, abandoned, rev, bookmark, branch, ssh, remotecmd, insecure
> + push: force, abandoned, rev, bookmark, branch, new-branch, ssh, remotecmd, insecure
> remove: after, force, include, exclude
> serve: accesslog, daemon, daemon-pipefds, errorlog, port, address, prefix, name, web-conf, webdir-conf, pid-file, stdio, templates, style, ipv6, certificate
> status: all, modified, added, removed, deleted, clean, unknown, ignored, no-status, copies, print0, rev, change, include, exclude, subrepos
> @@ -247,10 +247,10 @@
> help: extension, command
> identify: rev, num, id, branch, tags, bookmarks
> import: strip, base, force, no-commit, exact, import-branch, message, logfile, date, user, similarity
> - incoming: force, newest-first, bundle, rev, bookmarks, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd, insecure, subrepos
> + incoming: force, abandoned, newest-first, bundle, rev, bookmarks, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd, insecure, subrepos
> locate: rev, print0, fullpath, include, exclude
> manifest: rev, all
> - outgoing: force, rev, newest-first, bookmarks, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd, insecure, subrepos
> + outgoing: force, abandoned, rev, newest-first, bookmarks, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd, insecure, subrepos
> parents: rev, style, template
> paths:
> recover:
> diff --git a/tests/test-http-proxy.t b/tests/test-http-proxy.t
> --- a/tests/test-http-proxy.t
> +++ b/tests/test-http-proxy.t
> @@ -103,18 +103,22 @@
> * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=bookmarks (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=heads HTTP/1.1" - - (glob)
> + * - - [*] "GET http://localhost:$HGPORT/?cmd=nonabandoned HTTP/1.1" - - x-hgarg-1:candidates=83180e7845de420a1bb46896fd5fe05294f8d629&clientheads=0000000000000000000000000000000000000000 (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629 (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=bookmarks (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=heads HTTP/1.1" - - (glob)
> + * - - [*] "GET http://localhost:$HGPORT/?cmd=nonabandoned HTTP/1.1" - - x-hgarg-1:candidates=83180e7845de420a1bb46896fd5fe05294f8d629&clientheads=0000000000000000000000000000000000000000 (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629 (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=bookmarks (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=heads HTTP/1.1" - - (glob)
> + * - - [*] "GET http://localhost:$HGPORT/?cmd=nonabandoned HTTP/1.1" - - x-hgarg-1:candidates=83180e7845de420a1bb46896fd5fe05294f8d629&clientheads=0000000000000000000000000000000000000000 (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629 (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=bookmarks (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=heads HTTP/1.1" - - (glob)
> + * - - [*] "GET http://localhost:$HGPORT/?cmd=nonabandoned HTTP/1.1" - - x-hgarg-1:candidates=83180e7845de420a1bb46896fd5fe05294f8d629&clientheads=0000000000000000000000000000000000000000 (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629 (glob)
> * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=bookmarks (glob)
>
> diff --git a/tests/test-schemes.t b/tests/test-schemes.t
> --- a/tests/test-schemes.t
> +++ b/tests/test-schemes.t
> @@ -31,6 +31,7 @@
> sending heads command
> searching for changes
> all remote heads known locally
> + sending nonabandoned command
> no changes found
> [1]
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
--
Mathematics is the supreme nostalgia of our time.
More information about the Mercurial-devel
mailing list