[PATCH 4 of 4] bundlerepo: basic bundle2 support

Eric Sumner ericsumner at fb.com
Fri Feb 6 14:13:38 CST 2015


These should really be tagged v2, but push gate doesn't support that yet.

  -- Eric

On 2/6/15, 11:47 AM, "Eric Sumner" <ericsumner at fb.com> wrote:

># HG changeset patch
># User Eric Sumner <ericsumner at fb.com>
># Date 1423250845 28800
>#      Fri Feb 06 11:27:25 2015 -0800
># Node ID 485a3c2e0be1eebb491f7ca40fd64c47b29dba7f
># Parent  85768b6246cbeada0e13e8fa69ceff23a6c00286
>bundlerepo: basic bundle2 support
>
>For bundlerepo to work with bundle2 files, we need to find the part that
>contains the bundle's changegroup data and work with that instead of the
>entire bundle.  Future work can add separate processing for other bundle2
>parts.
>
>diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py
>--- a/mercurial/bundlerepo.py
>+++ b/mercurial/bundlerepo.py
>@@ -15,7 +15,7 @@
> from i18n import _
> import os, tempfile, shutil
> import changegroup, util, mdiff, discovery, cmdutil, scmutil, exchange
>-import localrepo, changelog, manifest, filelog, revlog, error, phases
>+import localrepo, changelog, manifest, filelog, revlog, error, phases,
>bundle2
> 
> class bundlerevlog(revlog.revlog):
>     def __init__(self, opener, indexfile, bundle, linkmapper):
>@@ -238,6 +238,24 @@
>                  
>bundlename,
>                                                                 self.vfs)
> 
>+        if isinstance(self.bundle, bundle2.unbundle20):
>+            cgparts = [part for part in self.bundle.iterparts()
>+                       if (part.type == 'b2x:changegroup')
>+                       and (part.params.get('version', '01')
>+                            in changegroup.packermap)]
>+
>+            if not cgparts:
>+                raise util.Abort('No changegroups found')
>+            version = cgparts[0].params.get('version', '01')
>+            cgparts = [p for p in cgparts
>+                       if p.params.get('version', '01') == version]
>+            if len(cgparts) > 1:
>+                raise NotImplementedError("Can't process multiple
>changegroups")
>+            part = cgparts[0]
>+
>+            part.seek(0)
>+            self.bundle = changegroup.packermap[version][1](part, 'UN')
>+
>         # dict with the mapping 'filename' -> position in the bundle
>         self.bundlefilespos = {}
> 
>diff --git a/tests/test-strip.t b/tests/test-strip.t
>--- a/tests/test-strip.t
>+++ b/tests/test-strip.t
>@@ -220,8 +220,69 @@
>   Stream params: {}
>   b2x:changegroup -- "{'version': '02'}"
>       264128213d290d868c54642d13aeaa3675551a78
>+  $ hg incoming .hg/strip-backup/*
>+  comparing with .hg/strip-backup/264128213d29-0b39d6bf-backup.hg
>+  searching for changes
>+  changeset:   4:264128213d29
>+  tag:         tip
>+  parent:      1:ef3a871183d7
>+  user:        test
>+  date:        Thu Jan 01 00:00:00 1970 +0000
>+  summary:     c
>+  
>   $ restore
>-
>+  $ hg up -C 4
>+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>+  $ hg --config experimental.bundle2-exp=True --config
>experimental.strip-bundle2-version=02 --traceback strip 4
>+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>+  saved backup bundle to
>$TESTTMP/test/.hg/strip-backup/264128213d29-0b39d6bf-backup.hg (glob)
>+  $ hg parents
>+  changeset:   1:ef3a871183d7
>+  user:        test
>+  date:        Thu Jan 01 00:00:00 1970 +0000
>+  summary:     b
>+  
>+  $ hg debugbundle .hg/strip-backup/*
>+  Stream params: {}
>+  b2x:changegroup -- "{'version': '02'}"
>+      264128213d290d868c54642d13aeaa3675551a78
>+  $ hg pull .hg/strip-backup/*
>+  pulling from .hg/strip-backup/264128213d29-0b39d6bf-backup.hg
>+  searching for changes
>+  adding changesets
>+  adding manifests
>+  adding file changes
>+  added 1 changesets with 0 changes to 0 files (+1 heads)
>+  (run 'hg heads' to see heads, 'hg merge' to merge)
>+  $ rm .hg/strip-backup/*
>+  $ hg log --graph
>+  o  changeset:   4:264128213d29
>+  |  tag:         tip
>+  |  parent:      1:ef3a871183d7
>+  |  user:        test
>+  |  date:        Thu Jan 01 00:00:00 1970 +0000
>+  |  summary:     c
>+  |
>+  | o  changeset:   3:443431ffac4f
>+  | |  user:        test
>+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
>+  | |  summary:     e
>+  | |
>+  | o  changeset:   2:65bd5f99a4a3
>+  |/   user:        test
>+  |    date:        Thu Jan 01 00:00:00 1970 +0000
>+  |    summary:     d
>+  |
>+  @  changeset:   1:ef3a871183d7
>+  |  user:        test
>+  |  date:        Thu Jan 01 00:00:00 1970 +0000
>+  |  summary:     b
>+  |
>+  o  changeset:   0:9ab35a2d17cb
>+     user:        test
>+     date:        Thu Jan 01 00:00:00 1970 +0000
>+     summary:     a
>+  
>   $ hg up -C 2
>   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   $ hg merge 4
>_______________________________________________
>Mercurial-devel mailing list
>Mercurial-devel at selenic.com
>http://selenic.com/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list