shelve: bundle using bundle2 if repository is general delta (
issue4862)
This will prevent expensive delta computation on bundling and is similar to what we do
for strip backup.
--- a/hgext/shelve.py Thu Oct 01 15:09:32 2015 -0700
+++ b/hgext/shelve.py Thu Oct 01 15:08:00 2015 -0700
@@ -106,8 +106,18 @@
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.
--- a/tests/test-shelve.t Thu Oct 01 15:09:32 2015 -0700
+++ b/tests/test-shelve.t Thu Oct 01 15:08:00 2015 -0700
@@ -954,3 +954,49 @@
abort: cannot find shelf nonexistentshelf
[255]
+ $ cd ..
+
+Shelve from general delta repo uses 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 ..