##// END OF EJS Templates
debugcommands: support for sending "batch" requests...
Gregory Szorc -
r36548:097ad107 default
parent child Browse files
Show More
@@ -2629,6 +2629,21 b' def debugwireproto(ui, repo, **opts):'
2629 Values are interpreted as Python b'' literals. This allows encoding
2629 Values are interpreted as Python b'' literals. This allows encoding
2630 special byte sequences via backslash escaping.
2630 special byte sequences via backslash escaping.
2631
2631
2632 batchbegin
2633 ----------
2634
2635 Instruct the peer to begin a batched send.
2636
2637 All ``command`` blocks are queued for execution until the next
2638 ``batchsubmit`` block.
2639
2640 batchsubmit
2641 -----------
2642
2643 Submit previously queued ``command`` blocks as a batch request.
2644
2645 This action MUST be paired with a ``batchbegin`` action.
2646
2632 close
2647 close
2633 -----
2648 -----
2634
2649
@@ -2716,6 +2731,8 b' def debugwireproto(ui, repo, **opts):'
2716 else:
2731 else:
2717 raise error.Abort(_('only --localssh is currently supported'))
2732 raise error.Abort(_('only --localssh is currently supported'))
2718
2733
2734 batchedcommands = None
2735
2719 # Now perform actions based on the parsed wire language instructions.
2736 # Now perform actions based on the parsed wire language instructions.
2720 for action, lines in blocks:
2737 for action, lines in blocks:
2721 if action in ('raw', 'raw+'):
2738 if action in ('raw', 'raw+'):
@@ -2747,10 +2764,29 b' def debugwireproto(ui, repo, **opts):'
2747
2764
2748 args[key] = util.unescapestr(value)
2765 args[key] = util.unescapestr(value)
2749
2766
2767 if batchedcommands is not None:
2768 batchedcommands.append((command, args))
2769 continue
2770
2750 ui.status(_('sending %s command\n') % command)
2771 ui.status(_('sending %s command\n') % command)
2751 res = peer._call(command, **args)
2772 res = peer._call(command, **args)
2752 ui.status(_('response: %s\n') % util.escapedata(res))
2773 ui.status(_('response: %s\n') % util.escapedata(res))
2753
2774
2775 elif action == 'batchbegin':
2776 if batchedcommands is not None:
2777 raise error.Abort(_('nested batchbegin not allowed'))
2778
2779 batchedcommands = []
2780 elif action == 'batchsubmit':
2781 # There is a batching API we could go through. But it would be
2782 # difficult to normalize requests into function calls. It is easier
2783 # to bypass this layer and normalize to commands + args.
2784 ui.status(_('sending batch with %d sub-commands\n') %
2785 len(batchedcommands))
2786 for i, chunk in enumerate(peer._submitbatch(batchedcommands)):
2787 ui.status(_('response #%d: %s\n') % (i, util.escapedata(chunk)))
2788
2789 batchedcommands = None
2754 elif action == 'close':
2790 elif action == 'close':
2755 peer.close()
2791 peer.close()
2756 elif action == 'readavailable':
2792 elif action == 'readavailable':
@@ -2765,6 +2801,9 b' def debugwireproto(ui, repo, **opts):'
2765 else:
2801 else:
2766 raise error.Abort(_('unknown action: %s') % action)
2802 raise error.Abort(_('unknown action: %s') % action)
2767
2803
2804 if batchedcommands is not None:
2805 raise error.Abort(_('unclosed "batchbegin" request'))
2806
2768 if peer:
2807 if peer:
2769 peer.close()
2808 peer.close()
2770
2809
@@ -1830,3 +1830,105 b' All public heads'
1830 o> 15\n
1830 o> 15\n
1831 o> bufferedread(15) -> 15: publishing True
1831 o> bufferedread(15) -> 15: publishing True
1832 response: publishing True
1832 response: publishing True
1833
1834 $ cd ..
1835
1836 Test batching of requests
1837
1838 $ hg init batching
1839 $ cd batching
1840 $ echo 0 > foo
1841 $ hg add foo
1842 $ hg -q commit -m initial
1843 $ hg phase --public
1844 $ echo 1 > foo
1845 $ hg commit -m 'commit 1'
1846 $ hg -q up 0
1847 $ echo 2 > foo
1848 $ hg commit -m 'commit 2'
1849 created new head
1850 $ hg book -r 1 bookA
1851 $ hg book -r 2 bookB
1852
1853 $ debugwireproto << EOF
1854 > batchbegin
1855 > command heads
1856 > command listkeys
1857 > namespace bookmarks
1858 > command listkeys
1859 > namespace phases
1860 > batchsubmit
1861 > EOF
1862 testing ssh1
1863 creating ssh peer from handshake results
1864 i> write(104) -> None:
1865 i> hello\n
1866 i> between\n
1867 i> pairs 81\n
1868 i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
1869 i> flush() -> None
1870 o> readline() -> 4:
1871 o> 384\n
1872 o> readline() -> 384:
1873 o> capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN\n
1874 o> readline() -> 2:
1875 o> 1\n
1876 o> readline() -> 1:
1877 o> \n
1878 sending batch with 3 sub-commands
1879 i> write(6) -> None:
1880 i> batch\n
1881 i> write(4) -> None:
1882 i> * 0\n
1883 i> write(8) -> None:
1884 i> cmds 61\n
1885 i> write(61) -> None: heads ;listkeys namespace=bookmarks;listkeys namespace=phases
1886 i> flush() -> None
1887 o> bufferedreadline() -> 4:
1888 o> 278\n
1889 o> bufferedread(278) -> 278:
1890 o> bfebe6bd38eebc6f8202e419c1171268987ea6a6 4ee3fcef1c800fa2bf23e20af7c83ff111d9c7ab\n
1891 o> ;bookA 4ee3fcef1c800fa2bf23e20af7c83ff111d9c7ab\n
1892 o> bookB bfebe6bd38eebc6f8202e419c1171268987ea6a6;4ee3fcef1c800fa2bf23e20af7c83ff111d9c7ab 1\n
1893 o> bfebe6bd38eebc6f8202e419c1171268987ea6a6 1\n
1894 o> publishing True
1895 response #0: bfebe6bd38eebc6f8202e419c1171268987ea6a6 4ee3fcef1c800fa2bf23e20af7c83ff111d9c7ab\n
1896 response #1: bookA 4ee3fcef1c800fa2bf23e20af7c83ff111d9c7ab\nbookB bfebe6bd38eebc6f8202e419c1171268987ea6a6
1897 response #2: 4ee3fcef1c800fa2bf23e20af7c83ff111d9c7ab 1\nbfebe6bd38eebc6f8202e419c1171268987ea6a6 1\npublishing True
1898
1899 testing ssh2
1900 creating ssh peer from handshake results
1901 i> write(171) -> None:
1902 i> upgrade * proto=exp-ssh-v2-0001\n (glob)
1903 i> hello\n
1904 i> between\n
1905 i> pairs 81\n
1906 i> 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
1907 i> flush() -> None
1908 o> readline() -> 62:
1909 o> upgraded * exp-ssh-v2-0001\n (glob)
1910 o> readline() -> 4:
1911 o> 383\n
1912 o> read(383) -> 383: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN
1913 o> read(1) -> 1:
1914 o> \n
1915 sending batch with 3 sub-commands
1916 i> write(6) -> None:
1917 i> batch\n
1918 i> write(4) -> None:
1919 i> * 0\n
1920 i> write(8) -> None:
1921 i> cmds 61\n
1922 i> write(61) -> None: heads ;listkeys namespace=bookmarks;listkeys namespace=phases
1923 i> flush() -> None
1924 o> bufferedreadline() -> 4:
1925 o> 278\n
1926 o> bufferedread(278) -> 278:
1927 o> bfebe6bd38eebc6f8202e419c1171268987ea6a6 4ee3fcef1c800fa2bf23e20af7c83ff111d9c7ab\n
1928 o> ;bookA 4ee3fcef1c800fa2bf23e20af7c83ff111d9c7ab\n
1929 o> bookB bfebe6bd38eebc6f8202e419c1171268987ea6a6;4ee3fcef1c800fa2bf23e20af7c83ff111d9c7ab 1\n
1930 o> bfebe6bd38eebc6f8202e419c1171268987ea6a6 1\n
1931 o> publishing True
1932 response #0: bfebe6bd38eebc6f8202e419c1171268987ea6a6 4ee3fcef1c800fa2bf23e20af7c83ff111d9c7ab\n
1933 response #1: bookA 4ee3fcef1c800fa2bf23e20af7c83ff111d9c7ab\nbookB bfebe6bd38eebc6f8202e419c1171268987ea6a6
1934 response #2: 4ee3fcef1c800fa2bf23e20af7c83ff111d9c7ab 1\nbfebe6bd38eebc6f8202e419c1171268987ea6a6 1\npublishing True
General Comments 0
You need to be logged in to leave comments. Login now