[PATCH 3 of 3] shelve: bundle using bundle2 if repository is general delta

Augie Fackler raf at durin42.com
Wed Oct 7 12:34:23 CDT 2015


On Thu, Oct 01, 2015 at 07:44:38PM -0700, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at fb.com>
> # Date 1443737280 25200
> #      Thu Oct 01 15:08:00 2015 -0700
> # Node ID 16416ec34180cfaf51e17b88bd63c4fa55263f77
> # Parent  4e7207b283fe09b167d1c8ac0403e5e724963522
> shelve: bundle using bundle2 if repository is general delta

queued these, thanks

>
> This will prevent expensive delta computation on bundling and is similar to what we do
> for strip backup. This was tracked as issue4862.
>
> diff --git a/hgext/shelve.py b/hgext/shelve.py
> --- a/hgext/shelve.py
> +++ b/hgext/shelve.py
> @@ -104,12 +104,22 @@ class shelvedfile(object):
>
>      def bundlerepo(self):
>          return bundlerepo.bundlerepository(self.repo.baseui, self.repo.root,
>                                             self.vfs.join(self.fname))
>      def writebundle(self, bases, node):
> -        cg = changegroup.changegroupsubset(self.repo, bases, [node], 'shelve')
> -        changegroup.writebundle(self.ui, cg, self.fname, 'HG10BZ', self.vfs)
> +        btype = 'HG10BZ'
> +        cgversion = '01'
> +        compression = None
> +        if 'generaldelta' in self.repo.requirements:
> +            btype = 'HG20'
> +            cgversion = '02'
> +            compression = 'BZ'
> +
> +        cg = changegroup.changegroupsubset(self.repo, bases, [node], 'shelve',
> +                                           version=cgversion)
> +        changegroup.writebundle(self.ui, cg, self.fname, btype, self.vfs,
> +                                compression=compression)
>
>  class shelvedstate(object):
>      """Handle persistence during unshelving operations.
>
>      Handles saving and restoring a shelved state. Ensures that different
> diff --git a/tests/test-shelve.t b/tests/test-shelve.t
> --- a/tests/test-shelve.t
> +++ b/tests/test-shelve.t
> @@ -952,5 +952,51 @@ shelve --patch and shelve --stat should
>    [255]
>    $ hg shelve --stat nonexistentshelf
>    abort: cannot find shelf nonexistentshelf
>    [255]
>
> +  $ cd ..
> +
> +Shelve from general delta repo use bundle2 on disk
> +--------------------------------------------------
> +
> +no general delta
> +
> +  $ hg clone --pull repo bundle1 --config format.generaldelta=0
> +  requesting all changes
> +  adding changesets
> +  adding manifests
> +  adding file changes
> +  added 5 changesets with 8 changes to 6 files
> +  updating to branch default
> +  6 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  $ cd bundle1
> +  $ echo babar > jungle
> +  $ hg add jungle
> +  $ hg shelve
> +  shelved as default
> +  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> +  $ hg debugbundle .hg/shelved/*.hg
> +  7e30d8ac6f23cfc84330fd7e698730374615d21a
> +  $ cd ..
> +
> +with general delta
> +
> +  $ hg clone --pull repo bundle2 --config format.generaldelta=1
> +  requesting all changes
> +  adding changesets
> +  adding manifests
> +  adding file changes
> +  added 5 changesets with 8 changes to 6 files
> +  updating to branch default
> +  6 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  $ cd bundle2
> +  $ echo babar > jungle
> +  $ hg add jungle
> +  $ hg shelve
> +  shelved as default
> +  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> +  $ hg debugbundle .hg/shelved/*.hg
> +  Stream params: {'Compression': 'BZ'}
> +  changegroup -- "{'version': '02'}"
> +      7e30d8ac6f23cfc84330fd7e698730374615d21a
> +  $ cd ..
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list