tests/test-bundle2-multiple-changegroups.t
changeset 22961 a67ea4959ef5
child 22968 01e98eba3bc1
equal deleted inserted replaced
22960:7c13c9404c2c 22961:a67ea4959ef5
       
     1 Create an extension to test bundle2 with multiple changegroups
       
     2 
       
     3   $ cat > bundle2.py <<EOF
       
     4   > """
       
     5   > """
       
     6   > from mercurial import changegroup, exchange
       
     7   > 
       
     8   > def _getbundlechangegrouppart(bundler, repo, source, bundlecaps=None,
       
     9   >                               b2caps=None, heads=None, common=None,
       
    10   >                               **kwargs):
       
    11   >     # Create two changegroups given the common changesets and heads for the
       
    12   >     # changegroup part we are being requested. Use the parent of each head
       
    13   >     # in 'heads' as intermediate heads for the first changegroup.
       
    14   >     intermediates = [repo[r].p1().node() for r in heads]
       
    15   >     cg = changegroup.getchangegroup(repo, source, heads=intermediates,
       
    16   >                                      common=common, bundlecaps=bundlecaps)
       
    17   >     bundler.newpart('b2x:output', data='changegroup1')
       
    18   >     bundler.newpart('b2x:changegroup', data=cg.getchunks())
       
    19   >     cg = changegroup.getchangegroup(repo, source, heads=heads,
       
    20   >                                      common=common + intermediates,
       
    21   >                                      bundlecaps=bundlecaps)
       
    22   >     bundler.newpart('b2x:output', data='changegroup2')
       
    23   >     bundler.newpart('b2x:changegroup', data=cg.getchunks())
       
    24   > 
       
    25   > def _pull(repo, *args, **kwargs):
       
    26   >   pullop = _orig_pull(repo, *args, **kwargs)
       
    27   >   repo.ui.write('pullop.cgresult is %d\n' % pullop.cgresult)
       
    28   >   return pullop
       
    29   > 
       
    30   > _orig_pull = exchange.pull
       
    31   > exchange.pull = _pull
       
    32   > exchange.getbundle2partsmapping['changegroup'] = _getbundlechangegrouppart
       
    33   > EOF
       
    34 
       
    35   $ cat >> $HGRCPATH << EOF
       
    36   > [experimental]
       
    37   > bundle2-exp=True
       
    38   > [ui]
       
    39   > logtemplate={rev}:{node|short} {phase} {author} {bookmarks} {desc|firstline}
       
    40   > EOF
       
    41 
       
    42 Start with a simple repository with a single commit
       
    43 
       
    44   $ hg init repo
       
    45   $ cd repo
       
    46   $ cat > .hg/hgrc << EOF
       
    47   > [extensions]
       
    48   > bundle2=$TESTTMP/bundle2.py
       
    49   > EOF
       
    50 
       
    51   $ echo A > A
       
    52   $ hg commit -A -m A -q
       
    53   $ cd ..
       
    54 
       
    55 Clone
       
    56 
       
    57   $ hg clone -q repo clone
       
    58 
       
    59 Add two linear commits
       
    60 
       
    61   $ cd repo
       
    62   $ echo B > B
       
    63   $ hg commit -A -m B -q
       
    64   $ echo C > C
       
    65   $ hg commit -A -m C -q
       
    66 
       
    67   $ cd ../clone
       
    68   $ cat >> .hg/hgrc <<EOF
       
    69   > [hooks]
       
    70   > pretxnchangegroup = sh -c "python \"$TESTDIR/printenv.py\" pretxnchangegroup"
       
    71   > changegroup = sh -c "python \"$TESTDIR/printenv.py\" changegroup"
       
    72   > incoming = sh -c "python \"$TESTDIR/printenv.py\" incoming"
       
    73   > EOF
       
    74 
       
    75 Pull the new commits in the clone
       
    76 
       
    77   $ hg pull
       
    78   pulling from $TESTTMP/repo (glob)
       
    79   searching for changes
       
    80   remote: changegroup1
       
    81   adding changesets
       
    82   adding manifests
       
    83   adding file changes
       
    84   added 1 changesets with 1 changes to 1 files
       
    85   pretxnchangegroup hook: HG_NODE=27547f69f25460a52fff66ad004e58da7ad3fb56 HG_PENDING=$TESTTMP/clone HG_SOURCE=bundle2 HG_URL=bundle2
       
    86   remote: changegroup2
       
    87   adding changesets
       
    88   adding manifests
       
    89   adding file changes
       
    90   added 1 changesets with 1 changes to 1 files
       
    91   pretxnchangegroup hook: HG_NODE=f838bfaca5c7226600ebcfd84f3c3c13a28d3757 HG_PENDING=$TESTTMP/clone HG_PHASES_MOVED=1 HG_SOURCE=bundle2 HG_URL=bundle2
       
    92   changegroup hook: HG_NODE=27547f69f25460a52fff66ad004e58da7ad3fb56 HG_SOURCE=bundle2 HG_URL=bundle2
       
    93   incoming hook: HG_NODE=27547f69f25460a52fff66ad004e58da7ad3fb56 HG_SOURCE=bundle2 HG_URL=bundle2
       
    94   changegroup hook: HG_NODE=f838bfaca5c7226600ebcfd84f3c3c13a28d3757 HG_PHASES_MOVED=1 HG_SOURCE=bundle2 HG_URL=bundle2
       
    95   incoming hook: HG_NODE=f838bfaca5c7226600ebcfd84f3c3c13a28d3757 HG_SOURCE=bundle2 HG_URL=bundle2
       
    96   pullop.cgresult is 1
       
    97   (run 'hg update' to get a working copy)
       
    98   $ hg update
       
    99   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   100   $ hg log -G
       
   101   @  2:f838bfaca5c7 public test  C
       
   102   |
       
   103   o  1:27547f69f254 public test  B
       
   104   |
       
   105   o  0:4a2df7238c3b public test  A
       
   106   
       
   107 Add more changesets with multiple heads to the original repository
       
   108 
       
   109   $ cd ../repo
       
   110   $ echo D > D
       
   111   $ hg commit -A -m D -q
       
   112   $ hg up -r 1
       
   113   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
       
   114   $ echo E > E
       
   115   $ hg commit -A -m E -q
       
   116   $ echo F > F
       
   117   $ hg commit -A -m F -q
       
   118   $ hg up -r 1
       
   119   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
       
   120   $ echo G > G
       
   121   $ hg commit -A -m G -q
       
   122   $ hg up -r 3
       
   123   2 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   124   $ echo H > H
       
   125   $ hg commit -A -m H -q
       
   126   $ hg log -G
       
   127   @  7:5cd59d311f65 draft test  H
       
   128   |
       
   129   | o  6:1d14c3ce6ac0 draft test  G
       
   130   | |
       
   131   | | o  5:7f219660301f draft test  F
       
   132   | | |
       
   133   | | o  4:8a5212ebc852 draft test  E
       
   134   | |/
       
   135   o |  3:b3325c91a4d9 draft test  D
       
   136   | |
       
   137   o |  2:f838bfaca5c7 draft test  C
       
   138   |/
       
   139   o  1:27547f69f254 draft test  B
       
   140   |
       
   141   o  0:4a2df7238c3b draft test  A
       
   142   
       
   143 New heads are reported during transfer and properly accounted for in
       
   144 pullop.cgresult
       
   145 
       
   146   $ cd ../clone
       
   147   $ hg pull
       
   148   pulling from $TESTTMP/repo (glob)
       
   149   searching for changes
       
   150   remote: changegroup1
       
   151   adding changesets
       
   152   adding manifests
       
   153   adding file changes
       
   154   added 2 changesets with 2 changes to 2 files (+1 heads)
       
   155   pretxnchangegroup hook: HG_NODE=b3325c91a4d916bcc4cdc83ea3fe4ece46a42f6e HG_PENDING=$TESTTMP/clone HG_SOURCE=bundle2 HG_URL=bundle2
       
   156   remote: changegroup2
       
   157   adding changesets
       
   158   adding manifests
       
   159   adding file changes
       
   160   added 3 changesets with 3 changes to 3 files (+1 heads)
       
   161   pretxnchangegroup hook: HG_NODE=7f219660301fe4c8a116f714df5e769695cc2b46 HG_PENDING=$TESTTMP/clone HG_PHASES_MOVED=1 HG_SOURCE=bundle2 HG_URL=bundle2
       
   162   changegroup hook: HG_NODE=b3325c91a4d916bcc4cdc83ea3fe4ece46a42f6e HG_SOURCE=bundle2 HG_URL=bundle2
       
   163   incoming hook: HG_NODE=b3325c91a4d916bcc4cdc83ea3fe4ece46a42f6e HG_SOURCE=bundle2 HG_URL=bundle2
       
   164   incoming hook: HG_NODE=8a5212ebc8527f9fb821601504794e3eb11a1ed3 HG_SOURCE=bundle2 HG_URL=bundle2
       
   165   changegroup hook: HG_NODE=7f219660301fe4c8a116f714df5e769695cc2b46 HG_PHASES_MOVED=1 HG_SOURCE=bundle2 HG_URL=bundle2
       
   166   incoming hook: HG_NODE=7f219660301fe4c8a116f714df5e769695cc2b46 HG_SOURCE=bundle2 HG_URL=bundle2
       
   167   incoming hook: HG_NODE=1d14c3ce6ac0582d2809220d33e8cd7a696e0156 HG_SOURCE=bundle2 HG_URL=bundle2
       
   168   incoming hook: HG_NODE=5cd59d311f6508b8e0ed28a266756c859419c9f1 HG_SOURCE=bundle2 HG_URL=bundle2
       
   169   pullop.cgresult is 3
       
   170   (run 'hg heads' to see heads, 'hg merge' to merge)
       
   171   $ hg log -G
       
   172   o  7:5cd59d311f65 public test  H
       
   173   |
       
   174   | o  6:1d14c3ce6ac0 public test  G
       
   175   | |
       
   176   | | o  5:7f219660301f public test  F
       
   177   | | |
       
   178   | | o  4:8a5212ebc852 public test  E
       
   179   | |/
       
   180   o |  3:b3325c91a4d9 public test  D
       
   181   | |
       
   182   @ |  2:f838bfaca5c7 public test  C
       
   183   |/
       
   184   o  1:27547f69f254 public test  B
       
   185   |
       
   186   o  0:4a2df7238c3b public test  A
       
   187   
       
   188 Removing a head from the original repository by merging it
       
   189 
       
   190   $ cd ../repo
       
   191   $ hg merge -r 6 -q
       
   192   $ hg commit -m Merge
       
   193   $ echo I > I
       
   194   $ hg commit -A -m H -q
       
   195   $ hg log -G
       
   196   @  9:9d18e5bd9ab0 draft test  H
       
   197   |
       
   198   o    8:71bd7b46de72 draft test  Merge
       
   199   |\
       
   200   | o  7:5cd59d311f65 draft test  H
       
   201   | |
       
   202   o |  6:1d14c3ce6ac0 draft test  G
       
   203   | |
       
   204   | | o  5:7f219660301f draft test  F
       
   205   | | |
       
   206   +---o  4:8a5212ebc852 draft test  E
       
   207   | |
       
   208   | o  3:b3325c91a4d9 draft test  D
       
   209   | |
       
   210   | o  2:f838bfaca5c7 draft test  C
       
   211   |/
       
   212   o  1:27547f69f254 draft test  B
       
   213   |
       
   214   o  0:4a2df7238c3b draft test  A
       
   215   
       
   216 Removed heads are reported during transfer and properly accounted for in
       
   217 pullop.cgresult
       
   218 
       
   219   $ cd ../clone
       
   220   $ hg pull
       
   221   pulling from $TESTTMP/repo (glob)
       
   222   searching for changes
       
   223   remote: changegroup1
       
   224   adding changesets
       
   225   adding manifests
       
   226   adding file changes
       
   227   added 1 changesets with 0 changes to 0 files (-1 heads)
       
   228   pretxnchangegroup hook: HG_NODE=71bd7b46de72e69a32455bf88d04757d542e6cf4 HG_PENDING=$TESTTMP/clone HG_SOURCE=bundle2 HG_URL=bundle2
       
   229   remote: changegroup2
       
   230   adding changesets
       
   231   adding manifests
       
   232   adding file changes
       
   233   added 1 changesets with 1 changes to 1 files
       
   234   pretxnchangegroup hook: HG_NODE=9d18e5bd9ab09337802595d49f1dad0c98df4d84 HG_PENDING=$TESTTMP/clone HG_PHASES_MOVED=1 HG_SOURCE=bundle2 HG_URL=bundle2
       
   235   changegroup hook: HG_NODE=71bd7b46de72e69a32455bf88d04757d542e6cf4 HG_SOURCE=bundle2 HG_URL=bundle2
       
   236   incoming hook: HG_NODE=71bd7b46de72e69a32455bf88d04757d542e6cf4 HG_SOURCE=bundle2 HG_URL=bundle2
       
   237   changegroup hook: HG_NODE=9d18e5bd9ab09337802595d49f1dad0c98df4d84 HG_PHASES_MOVED=1 HG_SOURCE=bundle2 HG_URL=bundle2
       
   238   incoming hook: HG_NODE=9d18e5bd9ab09337802595d49f1dad0c98df4d84 HG_SOURCE=bundle2 HG_URL=bundle2
       
   239   pullop.cgresult is -2
       
   240   (run 'hg update' to get a working copy)
       
   241   $ hg log -G
       
   242   o  9:9d18e5bd9ab0 public test  H
       
   243   |
       
   244   o    8:71bd7b46de72 public test  Merge
       
   245   |\
       
   246   | o  7:5cd59d311f65 public test  H
       
   247   | |
       
   248   o |  6:1d14c3ce6ac0 public test  G
       
   249   | |
       
   250   | | o  5:7f219660301f public test  F
       
   251   | | |
       
   252   +---o  4:8a5212ebc852 public test  E
       
   253   | |
       
   254   | o  3:b3325c91a4d9 public test  D
       
   255   | |
       
   256   | @  2:f838bfaca5c7 public test  C
       
   257   |/
       
   258   o  1:27547f69f254 public test  B
       
   259   |
       
   260   o  0:4a2df7238c3b public test  A
       
   261