tests/test-bundle2-exchange.t
changeset 22660 978cce51cc5f
parent 22659 798185707833
child 22938 4f2222f86612
equal deleted inserted replaced
22659:798185707833 22660:978cce51cc5f
       
     1 Test exchange of common information using bundle2
       
     2 
       
     3 
       
     4   $ getmainid() {
       
     5   >    hg -R main log --template '{node}\n' --rev "$1"
       
     6   > }
       
     7 
       
     8 enable obsolescence
       
     9 
       
    10   $ cat > obs.py << EOF
       
    11   > import mercurial.obsolete
       
    12   > mercurial.obsolete._enabled = True
       
    13   > EOF
       
    14 
       
    15   $ cat >> $HGRCPATH << EOF
       
    16   > [extensions]
       
    17   > obsolete=$TESTTMP/obs.py
       
    18   > [experimental]
       
    19   > bundle2-exp=True
       
    20   > [ui]
       
    21   > ssh=python "$TESTDIR/dummyssh"
       
    22   > logtemplate={rev}:{node|short} {phase} {author} {bookmarks} {desc|firstline}
       
    23   > [web]
       
    24   > push_ssl = false
       
    25   > allow_push = *
       
    26   > [phases]
       
    27   > publish=False
       
    28   > EOF
       
    29 
       
    30 The extension requires a repo (currently unused)
       
    31 
       
    32   $ hg init main
       
    33   $ cd main
       
    34   $ touch a
       
    35   $ hg add a
       
    36   $ hg commit -m 'a'
       
    37 
       
    38   $ hg unbundle $TESTDIR/bundles/rebase.hg
       
    39   adding changesets
       
    40   adding manifests
       
    41   adding file changes
       
    42   added 8 changesets with 7 changes to 7 files (+3 heads)
       
    43   (run 'hg heads' to see heads, 'hg merge' to merge)
       
    44 
       
    45   $ cd ..
       
    46 
       
    47 Real world exchange
       
    48 =====================
       
    49 
       
    50 Add more obsolescence information
       
    51 
       
    52   $ hg -R main debugobsolete -d '0 0' 1111111111111111111111111111111111111111 `getmainid 9520eea781bc`
       
    53   $ hg -R main debugobsolete -d '0 0' 2222222222222222222222222222222222222222 `getmainid 24b6387c8c8c`
       
    54 
       
    55 clone --pull
       
    56 
       
    57   $ hg -R main phase --public cd010b8cd998
       
    58   $ hg clone main other --pull --rev 9520eea781bc
       
    59   adding changesets
       
    60   adding manifests
       
    61   adding file changes
       
    62   added 2 changesets with 2 changes to 2 files
       
    63   1 new obsolescence markers
       
    64   updating to branch default
       
    65   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
    66   $ hg -R other log -G
       
    67   @  1:9520eea781bc draft Nicolas Dumazet <nicdumz.commits@gmail.com>  E
       
    68   |
       
    69   o  0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com>  A
       
    70   
       
    71   $ hg -R other debugobsolete
       
    72   1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
    73 
       
    74 pull
       
    75 
       
    76   $ hg -R main phase --public 9520eea781bc
       
    77   $ hg -R other pull -r 24b6387c8c8c
       
    78   pulling from $TESTTMP/main (glob)
       
    79   searching for changes
       
    80   adding changesets
       
    81   adding manifests
       
    82   adding file changes
       
    83   added 1 changesets with 1 changes to 1 files (+1 heads)
       
    84   1 new obsolescence markers
       
    85   (run 'hg heads' to see heads, 'hg merge' to merge)
       
    86   $ hg -R other log -G
       
    87   o  2:24b6387c8c8c draft Nicolas Dumazet <nicdumz.commits@gmail.com>  F
       
    88   |
       
    89   | @  1:9520eea781bc draft Nicolas Dumazet <nicdumz.commits@gmail.com>  E
       
    90   |/
       
    91   o  0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com>  A
       
    92   
       
    93   $ hg -R other debugobsolete
       
    94   1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
    95   2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
    96 
       
    97 pull empty (with phase movement)
       
    98 
       
    99   $ hg -R main phase --public 24b6387c8c8c
       
   100   $ hg -R other pull -r 24b6387c8c8c
       
   101   pulling from $TESTTMP/main (glob)
       
   102   no changes found
       
   103   $ hg -R other log -G
       
   104   o  2:24b6387c8c8c public Nicolas Dumazet <nicdumz.commits@gmail.com>  F
       
   105   |
       
   106   | @  1:9520eea781bc draft Nicolas Dumazet <nicdumz.commits@gmail.com>  E
       
   107   |/
       
   108   o  0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com>  A
       
   109   
       
   110   $ hg -R other debugobsolete
       
   111   1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   112   2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   113 
       
   114 pull empty
       
   115 
       
   116   $ hg -R other pull -r 24b6387c8c8c
       
   117   pulling from $TESTTMP/main (glob)
       
   118   no changes found
       
   119   $ hg -R other log -G
       
   120   o  2:24b6387c8c8c public Nicolas Dumazet <nicdumz.commits@gmail.com>  F
       
   121   |
       
   122   | @  1:9520eea781bc draft Nicolas Dumazet <nicdumz.commits@gmail.com>  E
       
   123   |/
       
   124   o  0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com>  A
       
   125   
       
   126   $ hg -R other debugobsolete
       
   127   1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   128   2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   129 
       
   130 add extra data to test their exchange during push
       
   131 
       
   132   $ hg -R main bookmark --rev eea13746799a book_eea1
       
   133   $ hg -R main debugobsolete -d '0 0' 3333333333333333333333333333333333333333 `getmainid eea13746799a`
       
   134   $ hg -R main bookmark --rev 02de42196ebe book_02de
       
   135   $ hg -R main debugobsolete -d '0 0' 4444444444444444444444444444444444444444 `getmainid 02de42196ebe`
       
   136   $ hg -R main bookmark --rev 42ccdea3bb16 book_42cc
       
   137   $ hg -R main debugobsolete -d '0 0' 5555555555555555555555555555555555555555 `getmainid 42ccdea3bb16`
       
   138   $ hg -R main bookmark --rev 5fddd98957c8 book_5fdd
       
   139   $ hg -R main debugobsolete -d '0 0' 6666666666666666666666666666666666666666 `getmainid 5fddd98957c8`
       
   140   $ hg -R main bookmark --rev 32af7686d403 book_32af
       
   141   $ hg -R main debugobsolete -d '0 0' 7777777777777777777777777777777777777777 `getmainid 32af7686d403`
       
   142 
       
   143   $ hg -R other bookmark --rev cd010b8cd998 book_eea1
       
   144   $ hg -R other bookmark --rev cd010b8cd998 book_02de
       
   145   $ hg -R other bookmark --rev cd010b8cd998 book_42cc
       
   146   $ hg -R other bookmark --rev cd010b8cd998 book_5fdd
       
   147   $ hg -R other bookmark --rev cd010b8cd998 book_32af
       
   148 
       
   149   $ hg -R main phase --public eea13746799a
       
   150 
       
   151 push
       
   152   $ hg -R main push other --rev eea13746799a --bookmark book_eea1
       
   153   pushing to other
       
   154   searching for changes
       
   155   remote: adding changesets
       
   156   remote: adding manifests
       
   157   remote: adding file changes
       
   158   remote: added 1 changesets with 0 changes to 0 files (-1 heads)
       
   159   remote: 1 new obsolescence markers
       
   160   updating bookmark book_eea1
       
   161   $ hg -R other log -G
       
   162   o    3:eea13746799a public Nicolas Dumazet <nicdumz.commits@gmail.com> book_eea1 G
       
   163   |\
       
   164   | o  2:24b6387c8c8c public Nicolas Dumazet <nicdumz.commits@gmail.com>  F
       
   165   | |
       
   166   @ |  1:9520eea781bc public Nicolas Dumazet <nicdumz.commits@gmail.com>  E
       
   167   |/
       
   168   o  0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com> book_02de book_32af book_42cc book_5fdd A
       
   169   
       
   170   $ hg -R other debugobsolete
       
   171   1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   172   2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   173   3333333333333333333333333333333333333333 eea13746799a9e0bfd88f29d3c2e9dc9389f524f 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   174 
       
   175 pull over ssh
       
   176 
       
   177   $ hg -R other pull ssh://user@dummy/main -r 02de42196ebe --bookmark book_02de
       
   178   pulling from ssh://user@dummy/main
       
   179   searching for changes
       
   180   adding changesets
       
   181   adding manifests
       
   182   adding file changes
       
   183   added 1 changesets with 1 changes to 1 files (+1 heads)
       
   184   1 new obsolescence markers
       
   185   updating bookmark book_02de
       
   186   (run 'hg heads' to see heads, 'hg merge' to merge)
       
   187   $ hg -R other debugobsolete
       
   188   1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   189   2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   190   3333333333333333333333333333333333333333 eea13746799a9e0bfd88f29d3c2e9dc9389f524f 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   191   4444444444444444444444444444444444444444 02de42196ebee42ef284b6780a87cdc96e8eaab6 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   192 
       
   193 pull over http
       
   194 
       
   195   $ hg -R main serve -p $HGPORT -d --pid-file=main.pid -E main-error.log
       
   196   $ cat main.pid >> $DAEMON_PIDS
       
   197 
       
   198   $ hg -R other pull http://localhost:$HGPORT/ -r 42ccdea3bb16 --bookmark book_42cc
       
   199   pulling from http://localhost:$HGPORT/
       
   200   searching for changes
       
   201   adding changesets
       
   202   adding manifests
       
   203   adding file changes
       
   204   added 1 changesets with 1 changes to 1 files (+1 heads)
       
   205   1 new obsolescence markers
       
   206   updating bookmark book_42cc
       
   207   (run 'hg heads .' to see heads, 'hg merge' to merge)
       
   208   $ cat main-error.log
       
   209   $ hg -R other debugobsolete
       
   210   1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   211   2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   212   3333333333333333333333333333333333333333 eea13746799a9e0bfd88f29d3c2e9dc9389f524f 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   213   4444444444444444444444444444444444444444 02de42196ebee42ef284b6780a87cdc96e8eaab6 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   214   5555555555555555555555555555555555555555 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   215 
       
   216 push over ssh
       
   217 
       
   218   $ hg -R main push ssh://user@dummy/other -r 5fddd98957c8 --bookmark book_5fdd
       
   219   pushing to ssh://user@dummy/other
       
   220   searching for changes
       
   221   remote: adding changesets
       
   222   remote: adding manifests
       
   223   remote: adding file changes
       
   224   remote: added 1 changesets with 1 changes to 1 files
       
   225   remote: 1 new obsolescence markers
       
   226   updating bookmark book_5fdd
       
   227   $ hg -R other log -G
       
   228   o  6:5fddd98957c8 draft Nicolas Dumazet <nicdumz.commits@gmail.com> book_5fdd C
       
   229   |
       
   230   o  5:42ccdea3bb16 draft Nicolas Dumazet <nicdumz.commits@gmail.com> book_42cc B
       
   231   |
       
   232   | o  4:02de42196ebe draft Nicolas Dumazet <nicdumz.commits@gmail.com> book_02de H
       
   233   | |
       
   234   | | o  3:eea13746799a public Nicolas Dumazet <nicdumz.commits@gmail.com> book_eea1 G
       
   235   | |/|
       
   236   | o |  2:24b6387c8c8c public Nicolas Dumazet <nicdumz.commits@gmail.com>  F
       
   237   |/ /
       
   238   | @  1:9520eea781bc public Nicolas Dumazet <nicdumz.commits@gmail.com>  E
       
   239   |/
       
   240   o  0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com> book_32af A
       
   241   
       
   242   $ hg -R other debugobsolete
       
   243   1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   244   2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   245   3333333333333333333333333333333333333333 eea13746799a9e0bfd88f29d3c2e9dc9389f524f 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   246   4444444444444444444444444444444444444444 02de42196ebee42ef284b6780a87cdc96e8eaab6 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   247   5555555555555555555555555555555555555555 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   248   6666666666666666666666666666666666666666 5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   249 
       
   250 push over http
       
   251 
       
   252   $ hg -R other serve -p $HGPORT2 -d --pid-file=other.pid -E other-error.log
       
   253   $ cat other.pid >> $DAEMON_PIDS
       
   254 
       
   255   $ hg -R main phase --public 32af7686d403
       
   256   $ hg -R main push http://localhost:$HGPORT2/ -r 32af7686d403 --bookmark book_32af
       
   257   pushing to http://localhost:$HGPORT2/
       
   258   searching for changes
       
   259   remote: adding changesets
       
   260   remote: adding manifests
       
   261   remote: adding file changes
       
   262   remote: added 1 changesets with 1 changes to 1 files
       
   263   remote: 1 new obsolescence markers
       
   264   updating bookmark book_32af
       
   265   $ cat other-error.log
       
   266 
       
   267 Check final content.
       
   268 
       
   269   $ hg -R other log -G
       
   270   o  7:32af7686d403 public Nicolas Dumazet <nicdumz.commits@gmail.com> book_32af D
       
   271   |
       
   272   o  6:5fddd98957c8 public Nicolas Dumazet <nicdumz.commits@gmail.com> book_5fdd C
       
   273   |
       
   274   o  5:42ccdea3bb16 public Nicolas Dumazet <nicdumz.commits@gmail.com> book_42cc B
       
   275   |
       
   276   | o  4:02de42196ebe draft Nicolas Dumazet <nicdumz.commits@gmail.com> book_02de H
       
   277   | |
       
   278   | | o  3:eea13746799a public Nicolas Dumazet <nicdumz.commits@gmail.com> book_eea1 G
       
   279   | |/|
       
   280   | o |  2:24b6387c8c8c public Nicolas Dumazet <nicdumz.commits@gmail.com>  F
       
   281   |/ /
       
   282   | @  1:9520eea781bc public Nicolas Dumazet <nicdumz.commits@gmail.com>  E
       
   283   |/
       
   284   o  0:cd010b8cd998 public Nicolas Dumazet <nicdumz.commits@gmail.com>  A
       
   285   
       
   286   $ hg -R other debugobsolete
       
   287   1111111111111111111111111111111111111111 9520eea781bcca16c1e15acc0ba14335a0e8e5ba 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   288   2222222222222222222222222222222222222222 24b6387c8c8cae37178880f3fa95ded3cb1cf785 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   289   3333333333333333333333333333333333333333 eea13746799a9e0bfd88f29d3c2e9dc9389f524f 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   290   4444444444444444444444444444444444444444 02de42196ebee42ef284b6780a87cdc96e8eaab6 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   291   5555555555555555555555555555555555555555 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   292   6666666666666666666666666666666666666666 5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   293   7777777777777777777777777777777777777777 32af7686d403cf45b5d95f2d70cebea587ac806a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       
   294 
       
   295 Error Handling
       
   296 ==============
       
   297 
       
   298 Check that errors are properly returned to the client during push.
       
   299 
       
   300 Setting up
       
   301 
       
   302   $ cat > failpush.py << EOF
       
   303   > """A small extension that makes push fails when using bundle2
       
   304   > 
       
   305   > used to test error handling in bundle2
       
   306   > """
       
   307   > 
       
   308   > from mercurial import util
       
   309   > from mercurial import bundle2
       
   310   > from mercurial import exchange
       
   311   > from mercurial import extensions
       
   312   > 
       
   313   > def _pushbundle2failpart(pushop, bundler):
       
   314   >     reason = pushop.ui.config('failpush', 'reason', None)
       
   315   >     part = None
       
   316   >     if reason == 'abort':
       
   317   >         bundler.newpart('test:abort')
       
   318   >     if reason == 'unknown':
       
   319   >         bundler.newpart('TEST:UNKNOWN')
       
   320   >     if reason == 'race':
       
   321   >         # 20 Bytes of crap
       
   322   >         bundler.newpart('b2x:check:heads', data='01234567890123456789')
       
   323   > 
       
   324   > @bundle2.parthandler("test:abort")
       
   325   > def handleabort(op, part):
       
   326   >     raise util.Abort('Abandon ship!', hint="don't panic")
       
   327   > 
       
   328   > def uisetup(ui):
       
   329   >     exchange.b2partsgenmapping['failpart'] = _pushbundle2failpart
       
   330   >     exchange.b2partsgenorder.insert(0, 'failpart')
       
   331   > 
       
   332   > EOF
       
   333 
       
   334   $ cd main
       
   335   $ hg up tip
       
   336   3 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   337   $ echo 'I' > I
       
   338   $ hg add I
       
   339   $ hg ci -m 'I'
       
   340   $ hg id
       
   341   e7ec4e813ba6 tip
       
   342   $ cd ..
       
   343 
       
   344   $ cat << EOF >> $HGRCPATH
       
   345   > [extensions]
       
   346   > failpush=$TESTTMP/failpush.py
       
   347   > EOF
       
   348 
       
   349   $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
       
   350   $ hg -R other serve -p $HGPORT2 -d --pid-file=other.pid -E other-error.log
       
   351   $ cat other.pid >> $DAEMON_PIDS
       
   352 
       
   353 Doing the actual push: Abort error
       
   354 
       
   355   $ cat << EOF >> $HGRCPATH
       
   356   > [failpush]
       
   357   > reason = abort
       
   358   > EOF
       
   359 
       
   360   $ hg -R main push other -r e7ec4e813ba6
       
   361   pushing to other
       
   362   searching for changes
       
   363   abort: Abandon ship!
       
   364   (don't panic)
       
   365   [255]
       
   366 
       
   367   $ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
       
   368   pushing to ssh://user@dummy/other
       
   369   searching for changes
       
   370   abort: Abandon ship!
       
   371   (don't panic)
       
   372   [255]
       
   373 
       
   374   $ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
       
   375   pushing to http://localhost:$HGPORT2/
       
   376   searching for changes
       
   377   abort: Abandon ship!
       
   378   (don't panic)
       
   379   [255]
       
   380 
       
   381 
       
   382 Doing the actual push: unknown mandatory parts
       
   383 
       
   384   $ cat << EOF >> $HGRCPATH
       
   385   > [failpush]
       
   386   > reason = unknown
       
   387   > EOF
       
   388 
       
   389   $ hg -R main push other -r e7ec4e813ba6
       
   390   pushing to other
       
   391   searching for changes
       
   392   abort: missing support for test:unknown
       
   393   [255]
       
   394 
       
   395   $ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
       
   396   pushing to ssh://user@dummy/other
       
   397   searching for changes
       
   398   abort: missing support for test:unknown
       
   399   [255]
       
   400 
       
   401   $ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
       
   402   pushing to http://localhost:$HGPORT2/
       
   403   searching for changes
       
   404   abort: missing support for test:unknown
       
   405   [255]
       
   406 
       
   407 Doing the actual push: race
       
   408 
       
   409   $ cat << EOF >> $HGRCPATH
       
   410   > [failpush]
       
   411   > reason = race
       
   412   > EOF
       
   413 
       
   414   $ hg -R main push other -r e7ec4e813ba6
       
   415   pushing to other
       
   416   searching for changes
       
   417   abort: push failed:
       
   418   'repository changed while pushing - please try again'
       
   419   [255]
       
   420 
       
   421   $ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
       
   422   pushing to ssh://user@dummy/other
       
   423   searching for changes
       
   424   abort: push failed:
       
   425   'repository changed while pushing - please try again'
       
   426   [255]
       
   427 
       
   428   $ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
       
   429   pushing to http://localhost:$HGPORT2/
       
   430   searching for changes
       
   431   abort: push failed:
       
   432   'repository changed while pushing - please try again'
       
   433   [255]
       
   434 
       
   435 Doing the actual push: hook abort
       
   436 
       
   437   $ cat << EOF >> $HGRCPATH
       
   438   > [failpush]
       
   439   > reason =
       
   440   > [hooks]
       
   441   > b2x-pretransactionclose.failpush = false
       
   442   > EOF
       
   443 
       
   444   $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
       
   445   $ hg -R other serve -p $HGPORT2 -d --pid-file=other.pid -E other-error.log
       
   446   $ cat other.pid >> $DAEMON_PIDS
       
   447 
       
   448   $ hg -R main push other -r e7ec4e813ba6
       
   449   pushing to other
       
   450   searching for changes
       
   451   transaction abort!
       
   452   rollback completed
       
   453   abort: b2x-pretransactionclose.failpush hook exited with status 1
       
   454   [255]
       
   455 
       
   456   $ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
       
   457   pushing to ssh://user@dummy/other
       
   458   searching for changes
       
   459   abort: b2x-pretransactionclose.failpush hook exited with status 1
       
   460   remote: transaction abort!
       
   461   remote: rollback completed
       
   462   [255]
       
   463 
       
   464   $ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
       
   465   pushing to http://localhost:$HGPORT2/
       
   466   searching for changes
       
   467   abort: b2x-pretransactionclose.failpush hook exited with status 1
       
   468   [255]
       
   469 
       
   470