Mercurial > hg
comparison mercurial/commands.py @ 30936:8de38479d60b
debugcommands: move 'debugmergestate' in the new module
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Wed, 01 Feb 2017 17:40:20 +0100 |
parents | e46533c3201e |
children | a9aa67ba3f96 |
comparison
equal
deleted
inserted
replaced
30935:e46533c3201e | 30936:8de38479d60b |
---|---|
17 | 17 |
18 from .i18n import _ | 18 from .i18n import _ |
19 from .node import ( | 19 from .node import ( |
20 bin, | 20 bin, |
21 hex, | 21 hex, |
22 nullhex, | |
23 nullid, | 22 nullid, |
24 nullrev, | 23 nullrev, |
25 short, | 24 short, |
26 ) | 25 ) |
27 from . import ( | 26 from . import ( |
1861 Returns 0 on success, 1 if errors are encountered. | 1860 Returns 0 on success, 1 if errors are encountered. |
1862 """ | 1861 """ |
1863 with repo.wlock(False): | 1862 with repo.wlock(False): |
1864 return cmdutil.copy(ui, repo, pats, opts) | 1863 return cmdutil.copy(ui, repo, pats, opts) |
1865 | 1864 |
1866 @command('debugmergestate', [], '') | |
1867 def debugmergestate(ui, repo, *args): | |
1868 """print merge state | |
1869 | |
1870 Use --verbose to print out information about whether v1 or v2 merge state | |
1871 was chosen.""" | |
1872 def _hashornull(h): | |
1873 if h == nullhex: | |
1874 return 'null' | |
1875 else: | |
1876 return h | |
1877 | |
1878 def printrecords(version): | |
1879 ui.write(('* version %s records\n') % version) | |
1880 if version == 1: | |
1881 records = v1records | |
1882 else: | |
1883 records = v2records | |
1884 | |
1885 for rtype, record in records: | |
1886 # pretty print some record types | |
1887 if rtype == 'L': | |
1888 ui.write(('local: %s\n') % record) | |
1889 elif rtype == 'O': | |
1890 ui.write(('other: %s\n') % record) | |
1891 elif rtype == 'm': | |
1892 driver, mdstate = record.split('\0', 1) | |
1893 ui.write(('merge driver: %s (state "%s")\n') | |
1894 % (driver, mdstate)) | |
1895 elif rtype in 'FDC': | |
1896 r = record.split('\0') | |
1897 f, state, hash, lfile, afile, anode, ofile = r[0:7] | |
1898 if version == 1: | |
1899 onode = 'not stored in v1 format' | |
1900 flags = r[7] | |
1901 else: | |
1902 onode, flags = r[7:9] | |
1903 ui.write(('file: %s (record type "%s", state "%s", hash %s)\n') | |
1904 % (f, rtype, state, _hashornull(hash))) | |
1905 ui.write((' local path: %s (flags "%s")\n') % (lfile, flags)) | |
1906 ui.write((' ancestor path: %s (node %s)\n') | |
1907 % (afile, _hashornull(anode))) | |
1908 ui.write((' other path: %s (node %s)\n') | |
1909 % (ofile, _hashornull(onode))) | |
1910 elif rtype == 'f': | |
1911 filename, rawextras = record.split('\0', 1) | |
1912 extras = rawextras.split('\0') | |
1913 i = 0 | |
1914 extrastrings = [] | |
1915 while i < len(extras): | |
1916 extrastrings.append('%s = %s' % (extras[i], extras[i + 1])) | |
1917 i += 2 | |
1918 | |
1919 ui.write(('file extras: %s (%s)\n') | |
1920 % (filename, ', '.join(extrastrings))) | |
1921 elif rtype == 'l': | |
1922 labels = record.split('\0', 2) | |
1923 labels = [l for l in labels if len(l) > 0] | |
1924 ui.write(('labels:\n')) | |
1925 ui.write((' local: %s\n' % labels[0])) | |
1926 ui.write((' other: %s\n' % labels[1])) | |
1927 if len(labels) > 2: | |
1928 ui.write((' base: %s\n' % labels[2])) | |
1929 else: | |
1930 ui.write(('unrecognized entry: %s\t%s\n') | |
1931 % (rtype, record.replace('\0', '\t'))) | |
1932 | |
1933 # Avoid mergestate.read() since it may raise an exception for unsupported | |
1934 # merge state records. We shouldn't be doing this, but this is OK since this | |
1935 # command is pretty low-level. | |
1936 ms = mergemod.mergestate(repo) | |
1937 | |
1938 # sort so that reasonable information is on top | |
1939 v1records = ms._readrecordsv1() | |
1940 v2records = ms._readrecordsv2() | |
1941 order = 'LOml' | |
1942 def key(r): | |
1943 idx = order.find(r[0]) | |
1944 if idx == -1: | |
1945 return (1, r[1]) | |
1946 else: | |
1947 return (0, idx) | |
1948 v1records.sort(key=key) | |
1949 v2records.sort(key=key) | |
1950 | |
1951 if not v1records and not v2records: | |
1952 ui.write(('no merge state found\n')) | |
1953 elif not v2records: | |
1954 ui.note(('no version 2 merge state\n')) | |
1955 printrecords(1) | |
1956 elif ms._v1v2match(v1records, v2records): | |
1957 ui.note(('v1 and v2 states match: using v2\n')) | |
1958 printrecords(2) | |
1959 else: | |
1960 ui.note(('v1 and v2 states mismatch: using v1\n')) | |
1961 printrecords(1) | |
1962 if ui.verbose: | |
1963 printrecords(2) | |
1964 | |
1965 @command('debugnamecomplete', [], _('NAME...')) | 1865 @command('debugnamecomplete', [], _('NAME...')) |
1966 def debugnamecomplete(ui, repo, *args): | 1866 def debugnamecomplete(ui, repo, *args): |
1967 '''complete "names" - tags, open branch names, bookmark names''' | 1867 '''complete "names" - tags, open branch names, bookmark names''' |
1968 | 1868 |
1969 names = set() | 1869 names = set() |