##// END OF EJS Templates
bundle2: support for push over the wire...
Pierre-Yves David -
r21075:438803e4 default
parent child Browse files
Show More
@@ -343,8 +343,12 b' class wirepeer(peer.peerrepository):'
343 def unbundle(self, cg, heads, source):
343 def unbundle(self, cg, heads, source):
344 '''Send cg (a readable file-like object representing the
344 '''Send cg (a readable file-like object representing the
345 changegroup to push, typically a chunkbuffer object) to the
345 changegroup to push, typically a chunkbuffer object) to the
346 remote server as a bundle. Return an integer indicating the
346 remote server as a bundle.
347 result of the push (see localrepository.addchangegroup()).'''
347
348 When pushing a bundle10 stream, return an integer indicating the
349 result of the push (see localrepository.addchangegroup()).
350
351 When pushing a bundle20 stream, return a bundle20 stream.'''
348
352
349 if heads != ['force'] and self.capable('unbundlehash'):
353 if heads != ['force'] and self.capable('unbundlehash'):
350 heads = encodelist(['hashed',
354 heads = encodelist(['hashed',
@@ -352,18 +356,24 b' class wirepeer(peer.peerrepository):'
352 else:
356 else:
353 heads = encodelist(heads)
357 heads = encodelist(heads)
354
358
355 ret, output = self._callpush("unbundle", cg, heads=heads)
359 if util.safehasattr(cg, 'deltaheader'):
356 if ret == "":
360 # this a bundle10, do the old style call sequence
357 raise error.ResponseError(
361 ret, output = self._callpush("unbundle", cg, heads=heads)
358 _('push failed:'), output)
362 if ret == "":
359 try:
363 raise error.ResponseError(
360 ret = int(ret)
364 _('push failed:'), output)
361 except ValueError:
365 try:
362 raise error.ResponseError(
366 ret = int(ret)
363 _('push failed (unexpected response):'), ret)
367 except ValueError:
368 raise error.ResponseError(
369 _('push failed (unexpected response):'), ret)
364
370
365 for l in output.splitlines(True):
371 for l in output.splitlines(True):
366 self.ui.status(_('remote: '), l)
372 self.ui.status(_('remote: '), l)
373 else:
374 # bundle2 push. Send a stream, fetch a stream.
375 stream = self._calltwowaystream('unbundle', cg, heads=heads)
376 ret = bundle2.unbundle20(self.ui, stream)
367 return ret
377 return ret
368
378
369 def debugwireargs(self, one, two, three=None, four=None, five=None):
379 def debugwireargs(self, one, two, three=None, four=None, five=None):
@@ -781,6 +791,10 b' def unbundle(repo, proto, heads):'
781 gen = exchange.readbundle(repo.ui, fp, None)
791 gen = exchange.readbundle(repo.ui, fp, None)
782 r = exchange.unbundle(repo, gen, their_heads, 'serve',
792 r = exchange.unbundle(repo, gen, their_heads, 'serve',
783 proto._client())
793 proto._client())
794 if util.safehasattr(r, 'addpart'):
795 # The return looks streameable, we are in the bundle2 case and
796 # should return a stream.
797 return streamres(r.getchunks())
784 return pushres(r)
798 return pushres(r)
785
799
786 finally:
800 finally:
@@ -158,6 +158,9 b' Create an extension to test bundle2 API'
158 > bundle2=True
158 > bundle2=True
159 > [ui]
159 > [ui]
160 > ssh=python "$TESTDIR/dummyssh"
160 > ssh=python "$TESTDIR/dummyssh"
161 > [web]
162 > push_ssl = false
163 > allow_push = *
161 > EOF
164 > EOF
162
165
163 The extension requires a repo (currently unused)
166 The extension requires a repo (currently unused)
@@ -711,4 +714,72 b' pull over http'
711 (run 'hg heads .' to see heads, 'hg merge' to merge)
714 (run 'hg heads .' to see heads, 'hg merge' to merge)
712 $ cat main-error.log
715 $ cat main-error.log
713
716
717 push over ssh
714
718
719 $ hg -R main push ssh://user@dummy/other -r 5fddd98957c8
720 pushing to ssh://user@dummy/other
721 searching for changes
722 remote: adding changesets
723 remote: adding manifests
724 remote: adding file changes
725 remote: added 1 changesets with 1 changes to 1 files
726
727 push over http
728
729 $ hg -R other serve -p $HGPORT2 -d --pid-file=other.pid -E other-error.log
730 $ cat other.pid >> $DAEMON_PIDS
731
732 $ hg -R main push http://localhost:$HGPORT2/ -r 32af7686d403
733 pushing to http://localhost:$HGPORT2/
734 searching for changes
735 $ cat other-error.log
736
737 Check final content.
738
739 $ hg -R other log -G
740 o changeset: 7:32af7686d403
741 | tag: tip
742 | user: Nicolas Dumazet <nicdumz.commits@gmail.com>
743 | date: Sat Apr 30 15:24:48 2011 +0200
744 | summary: D
745 |
746 o changeset: 6:5fddd98957c8
747 | user: Nicolas Dumazet <nicdumz.commits@gmail.com>
748 | date: Sat Apr 30 15:24:48 2011 +0200
749 | summary: C
750 |
751 o changeset: 5:42ccdea3bb16
752 | parent: 0:cd010b8cd998
753 | user: Nicolas Dumazet <nicdumz.commits@gmail.com>
754 | date: Sat Apr 30 15:24:48 2011 +0200
755 | summary: B
756 |
757 | o changeset: 4:02de42196ebe
758 | | parent: 2:24b6387c8c8c
759 | | user: Nicolas Dumazet <nicdumz.commits@gmail.com>
760 | | date: Sat Apr 30 15:24:48 2011 +0200
761 | | summary: H
762 | |
763 | | o changeset: 3:eea13746799a
764 | |/| parent: 2:24b6387c8c8c
765 | | | parent: 1:9520eea781bc
766 | | | user: Nicolas Dumazet <nicdumz.commits@gmail.com>
767 | | | date: Sat Apr 30 15:24:48 2011 +0200
768 | | | summary: G
769 | | |
770 | o | changeset: 2:24b6387c8c8c
771 |/ / parent: 0:cd010b8cd998
772 | | user: Nicolas Dumazet <nicdumz.commits@gmail.com>
773 | | date: Sat Apr 30 15:24:48 2011 +0200
774 | | summary: F
775 | |
776 | @ changeset: 1:9520eea781bc
777 |/ user: Nicolas Dumazet <nicdumz.commits@gmail.com>
778 | date: Sat Apr 30 15:24:48 2011 +0200
779 | summary: E
780 |
781 o changeset: 0:cd010b8cd998
782 user: Nicolas Dumazet <nicdumz.commits@gmail.com>
783 date: Sat Apr 30 15:24:48 2011 +0200
784 summary: A
785
General Comments 0
You need to be logged in to leave comments. Login now