Show More
@@ -11,7 +11,6 b' import difflib' | |||
|
11 | 11 | import errno |
|
12 | 12 | import operator |
|
13 | 13 | import os |
|
14 | import random | |
|
15 | 14 | import re |
|
16 | 15 | import shlex |
|
17 | 16 | import socket |
@@ -36,7 +35,6 b' from . import (' | |||
|
36 | 35 | changegroup, |
|
37 | 36 | cmdutil, |
|
38 | 37 | copies, |
|
39 | dagutil, | |
|
40 | 38 | destutil, |
|
41 | 39 | dirstateguard, |
|
42 | 40 | discovery, |
@@ -50,7 +48,6 b' from . import (' | |||
|
50 | 48 | hbisect, |
|
51 | 49 | help, |
|
52 | 50 | hg, |
|
53 | localrepo, | |
|
54 | 51 | lock as lockmod, |
|
55 | 52 | merge as mergemod, |
|
56 | 53 | minirst, |
@@ -65,13 +62,11 b' from . import (' | |||
|
65 | 62 | revset, |
|
66 | 63 | scmutil, |
|
67 | 64 | server, |
|
68 | setdiscovery, | |
|
69 | 65 | sshserver, |
|
70 | 66 | sslutil, |
|
71 | 67 | streamclone, |
|
72 | 68 | templatekw, |
|
73 | 69 | templater, |
|
74 | treediscovery, | |
|
75 | 70 | ui as uimod, |
|
76 | 71 | util, |
|
77 | 72 | ) |
@@ -1865,72 +1860,6 b' def copy(ui, repo, *pats, **opts):' | |||
|
1865 | 1860 | with repo.wlock(False): |
|
1866 | 1861 | return cmdutil.copy(ui, repo, pats, opts) |
|
1867 | 1862 | |
|
1868 | @command('debugdiscovery', | |
|
1869 | [('', 'old', None, _('use old-style discovery')), | |
|
1870 | ('', 'nonheads', None, | |
|
1871 | _('use old-style discovery with non-heads included')), | |
|
1872 | ] + remoteopts, | |
|
1873 | _('[-l REV] [-r REV] [-b BRANCH]... [OTHER]')) | |
|
1874 | def debugdiscovery(ui, repo, remoteurl="default", **opts): | |
|
1875 | """runs the changeset discovery protocol in isolation""" | |
|
1876 | remoteurl, branches = hg.parseurl(ui.expandpath(remoteurl), | |
|
1877 | opts.get('branch')) | |
|
1878 | remote = hg.peer(repo, opts, remoteurl) | |
|
1879 | ui.status(_('comparing with %s\n') % util.hidepassword(remoteurl)) | |
|
1880 | ||
|
1881 | # make sure tests are repeatable | |
|
1882 | random.seed(12323) | |
|
1883 | ||
|
1884 | def doit(localheads, remoteheads, remote=remote): | |
|
1885 | if opts.get('old'): | |
|
1886 | if localheads: | |
|
1887 | raise error.Abort('cannot use localheads with old style ' | |
|
1888 | 'discovery') | |
|
1889 | if not util.safehasattr(remote, 'branches'): | |
|
1890 | # enable in-client legacy support | |
|
1891 | remote = localrepo.locallegacypeer(remote.local()) | |
|
1892 | common, _in, hds = treediscovery.findcommonincoming(repo, remote, | |
|
1893 | force=True) | |
|
1894 | common = set(common) | |
|
1895 | if not opts.get('nonheads'): | |
|
1896 | ui.write(("unpruned common: %s\n") % | |
|
1897 | " ".join(sorted(short(n) for n in common))) | |
|
1898 | dag = dagutil.revlogdag(repo.changelog) | |
|
1899 | all = dag.ancestorset(dag.internalizeall(common)) | |
|
1900 | common = dag.externalizeall(dag.headsetofconnecteds(all)) | |
|
1901 | else: | |
|
1902 | common, any, hds = setdiscovery.findcommonheads(ui, repo, remote) | |
|
1903 | common = set(common) | |
|
1904 | rheads = set(hds) | |
|
1905 | lheads = set(repo.heads()) | |
|
1906 | ui.write(("common heads: %s\n") % | |
|
1907 | " ".join(sorted(short(n) for n in common))) | |
|
1908 | if lheads <= common: | |
|
1909 | ui.write(("local is subset\n")) | |
|
1910 | elif rheads <= common: | |
|
1911 | ui.write(("remote is subset\n")) | |
|
1912 | ||
|
1913 | serverlogs = opts.get('serverlog') | |
|
1914 | if serverlogs: | |
|
1915 | for filename in serverlogs: | |
|
1916 | with open(filename, 'r') as logfile: | |
|
1917 | line = logfile.readline() | |
|
1918 | while line: | |
|
1919 | parts = line.strip().split(';') | |
|
1920 | op = parts[1] | |
|
1921 | if op == 'cg': | |
|
1922 | pass | |
|
1923 | elif op == 'cgss': | |
|
1924 | doit(parts[2].split(' '), parts[3].split(' ')) | |
|
1925 | elif op == 'unb': | |
|
1926 | doit(parts[3].split(' '), parts[2].split(' ')) | |
|
1927 | line = logfile.readline() | |
|
1928 | else: | |
|
1929 | remoterevs, _checkout = hg.addbranchrevs(repo, remote, branches, | |
|
1930 | opts.get('remote_head')) | |
|
1931 | localrevs = opts.get('local_head') | |
|
1932 | doit(localrevs, remoterevs) | |
|
1933 | ||
|
1934 | 1863 | @command('debugextensions', formatteropts, [], norepo=True) |
|
1935 | 1864 | def debugextensions(ui, **opts): |
|
1936 | 1865 | '''show information about active extensions''' |
@@ -8,10 +8,12 b'' | |||
|
8 | 8 | from __future__ import absolute_import |
|
9 | 9 | |
|
10 | 10 | import os |
|
11 | import random | |
|
11 | 12 | |
|
12 | 13 | from .i18n import _ |
|
13 | 14 | from .node import ( |
|
14 | 15 | hex, |
|
16 | short, | |
|
15 | 17 | ) |
|
16 | 18 | from . import ( |
|
17 | 19 | bundle2, |
@@ -20,14 +22,18 b' from . import (' | |||
|
20 | 22 | commands, |
|
21 | 23 | context, |
|
22 | 24 | dagparser, |
|
25 | dagutil, | |
|
23 | 26 | error, |
|
24 | 27 | exchange, |
|
25 | 28 | hg, |
|
29 | localrepo, | |
|
26 | 30 | lock as lockmod, |
|
27 | 31 | revlog, |
|
28 | 32 | scmutil, |
|
33 | setdiscovery, | |
|
29 | 34 | simplemerge, |
|
30 | 35 | streamclone, |
|
36 | treediscovery, | |
|
31 | 37 | util, |
|
32 | 38 | ) |
|
33 | 39 | |
@@ -451,3 +457,69 b' def debugdate(ui, date, range=None, **op' | |||
|
451 | 457 | if range: |
|
452 | 458 | m = util.matchdate(range) |
|
453 | 459 | ui.write(("match: %s\n") % m(d[0])) |
|
460 | ||
|
461 | @command('debugdiscovery', | |
|
462 | [('', 'old', None, _('use old-style discovery')), | |
|
463 | ('', 'nonheads', None, | |
|
464 | _('use old-style discovery with non-heads included')), | |
|
465 | ] + commands.remoteopts, | |
|
466 | _('[-l REV] [-r REV] [-b BRANCH]... [OTHER]')) | |
|
467 | def debugdiscovery(ui, repo, remoteurl="default", **opts): | |
|
468 | """runs the changeset discovery protocol in isolation""" | |
|
469 | remoteurl, branches = hg.parseurl(ui.expandpath(remoteurl), | |
|
470 | opts.get('branch')) | |
|
471 | remote = hg.peer(repo, opts, remoteurl) | |
|
472 | ui.status(_('comparing with %s\n') % util.hidepassword(remoteurl)) | |
|
473 | ||
|
474 | # make sure tests are repeatable | |
|
475 | random.seed(12323) | |
|
476 | ||
|
477 | def doit(localheads, remoteheads, remote=remote): | |
|
478 | if opts.get('old'): | |
|
479 | if localheads: | |
|
480 | raise error.Abort('cannot use localheads with old style ' | |
|
481 | 'discovery') | |
|
482 | if not util.safehasattr(remote, 'branches'): | |
|
483 | # enable in-client legacy support | |
|
484 | remote = localrepo.locallegacypeer(remote.local()) | |
|
485 | common, _in, hds = treediscovery.findcommonincoming(repo, remote, | |
|
486 | force=True) | |
|
487 | common = set(common) | |
|
488 | if not opts.get('nonheads'): | |
|
489 | ui.write(("unpruned common: %s\n") % | |
|
490 | " ".join(sorted(short(n) for n in common))) | |
|
491 | dag = dagutil.revlogdag(repo.changelog) | |
|
492 | all = dag.ancestorset(dag.internalizeall(common)) | |
|
493 | common = dag.externalizeall(dag.headsetofconnecteds(all)) | |
|
494 | else: | |
|
495 | common, any, hds = setdiscovery.findcommonheads(ui, repo, remote) | |
|
496 | common = set(common) | |
|
497 | rheads = set(hds) | |
|
498 | lheads = set(repo.heads()) | |
|
499 | ui.write(("common heads: %s\n") % | |
|
500 | " ".join(sorted(short(n) for n in common))) | |
|
501 | if lheads <= common: | |
|
502 | ui.write(("local is subset\n")) | |
|
503 | elif rheads <= common: | |
|
504 | ui.write(("remote is subset\n")) | |
|
505 | ||
|
506 | serverlogs = opts.get('serverlog') | |
|
507 | if serverlogs: | |
|
508 | for filename in serverlogs: | |
|
509 | with open(filename, 'r') as logfile: | |
|
510 | line = logfile.readline() | |
|
511 | while line: | |
|
512 | parts = line.strip().split(';') | |
|
513 | op = parts[1] | |
|
514 | if op == 'cg': | |
|
515 | pass | |
|
516 | elif op == 'cgss': | |
|
517 | doit(parts[2].split(' '), parts[3].split(' ')) | |
|
518 | elif op == 'unb': | |
|
519 | doit(parts[3].split(' '), parts[2].split(' ')) | |
|
520 | line = logfile.readline() | |
|
521 | else: | |
|
522 | remoterevs, _checkout = hg.addbranchrevs(repo, remote, branches, | |
|
523 | opts.get('remote_head')) | |
|
524 | localrevs = opts.get('local_head') | |
|
525 | doit(localrevs, remoterevs) |
General Comments 0
You need to be logged in to leave comments.
Login now