[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