Show More
@@ -743,3 +743,9 b' def handlereplycaps(op, inpart):' | |||
|
743 | 743 | if op.reply is None: |
|
744 | 744 | op.reply = bundle20(op.ui, caps) |
|
745 | 745 | |
|
746 | @parthandler('b2x:error:abort') | |
|
747 | def handlereplycaps(op, inpart): | |
|
748 | """Used to transmit abort error over the wire""" | |
|
749 | manargs = dict(inpart.mandatoryparams) | |
|
750 | advargs = dict(inpart.advisoryparams) | |
|
751 | raise util.Abort(manargs['message'], hint=advargs.get('hint')) |
@@ -808,7 +808,17 b' def unbundle(repo, proto, heads):' | |||
|
808 | 808 | # We did not change it to minimise code change. |
|
809 | 809 | # This need to be moved to something proper. |
|
810 | 810 | # Feel free to do it. |
|
811 | sys.stderr.write("abort: %s\n" % inst) | |
|
812 | return pushres(0) | |
|
811 | if getattr(inst, 'duringunbundle2', False): | |
|
812 | bundler = bundle2.bundle20(repo.ui) | |
|
813 | manargs = [('message', str(inst))] | |
|
814 | advargs = [] | |
|
815 | if inst.hint is not None: | |
|
816 | advargs.append(('hint', inst.hint)) | |
|
817 | bundler.addpart(bundle2.bundlepart('B2X:ERROR:ABORT', | |
|
818 | manargs, advargs)) | |
|
819 | return streamres(bundler.getchunks()) | |
|
820 | else: | |
|
821 | sys.stderr.write("abort: %s\n" % inst) | |
|
822 | return pushres(0) | |
|
813 | 823 | except exchange.PushRaced, exc: |
|
814 | 824 | return pusherr(str(exc)) |
@@ -883,3 +883,80 b' Check final content.' | |||
|
883 | 883 | date: Sat Apr 30 15:24:48 2011 +0200 |
|
884 | 884 | summary: A |
|
885 | 885 | |
|
886 | ||
|
887 | Error Handling | |
|
888 | ============== | |
|
889 | ||
|
890 | Check that errors are properly returned to the client during push. | |
|
891 | ||
|
892 | Setting up | |
|
893 | ||
|
894 | $ cat > failpush.py << EOF | |
|
895 | > """A small extension that makes push fails when using bundle2 | |
|
896 | > | |
|
897 | > used to test error handling in bundle2 | |
|
898 | > """ | |
|
899 | > | |
|
900 | > from mercurial import util | |
|
901 | > from mercurial import bundle2 | |
|
902 | > from mercurial import exchange | |
|
903 | > from mercurial import extensions | |
|
904 | > | |
|
905 | > def _pushbundle2failpart(orig, pushop, bundler): | |
|
906 | > extradata = orig(pushop, bundler) | |
|
907 | > part = bundle2.bundlepart('test:abort') | |
|
908 | > bundler.addpart(part) | |
|
909 | > return extradata | |
|
910 | > | |
|
911 | > @bundle2.parthandler("test:abort") | |
|
912 | > def handleabort(op, part): | |
|
913 | > raise util.Abort('Abandon ship!', hint="don't panic") | |
|
914 | > | |
|
915 | > def uisetup(ui): | |
|
916 | > extensions.wrapfunction(exchange, '_pushbundle2extraparts', _pushbundle2failpart) | |
|
917 | > | |
|
918 | > EOF | |
|
919 | ||
|
920 | $ cd main | |
|
921 | $ hg up tip | |
|
922 | 3 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
|
923 | $ echo 'I' > I | |
|
924 | $ hg add I | |
|
925 | $ hg ci -m 'I' | |
|
926 | $ hg id | |
|
927 | e7ec4e813ba6 tip | |
|
928 | $ cd .. | |
|
929 | ||
|
930 | $ cat << EOF >> $HGRCPATH | |
|
931 | > [extensions] | |
|
932 | > failpush=$TESTTMP/failpush.py | |
|
933 | > EOF | |
|
934 | ||
|
935 | $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS | |
|
936 | $ hg -R other serve -p $HGPORT2 -d --pid-file=other.pid -E other-error.log | |
|
937 | $ cat other.pid >> $DAEMON_PIDS | |
|
938 | ||
|
939 | Doing the actual push: Abort error | |
|
940 | ||
|
941 | $ hg -R main push other -r e7ec4e813ba6 | |
|
942 | pushing to other | |
|
943 | searching for changes | |
|
944 | abort: Abandon ship! | |
|
945 | (don't panic) | |
|
946 | [255] | |
|
947 | ||
|
948 | $ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6 | |
|
949 | pushing to ssh://user@dummy/other | |
|
950 | searching for changes | |
|
951 | abort: Abandon ship! | |
|
952 | (don't panic) | |
|
953 | [255] | |
|
954 | ||
|
955 | $ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6 | |
|
956 | pushing to http://localhost:$HGPORT2/ | |
|
957 | searching for changes | |
|
958 | abort: Abandon ship! | |
|
959 | (don't panic) | |
|
960 | [255] | |
|
961 | ||
|
962 |
General Comments 0
You need to be logged in to leave comments.
Login now