1893 for k, v in sorted(ctx.substate.items()): |
1893 for k, v in sorted(ctx.substate.items()): |
1894 ui.write(('path %s\n') % k) |
1894 ui.write(('path %s\n') % k) |
1895 ui.write((' source %s\n') % v[0]) |
1895 ui.write((' source %s\n') % v[0]) |
1896 ui.write((' revision %s\n') % v[1]) |
1896 ui.write((' revision %s\n') % v[1]) |
1897 |
1897 |
|
1898 @command('debugsuccessorssets', |
|
1899 [], |
|
1900 _('[REV]')) |
|
1901 def debugsuccessorssets(ui, repo, *revs): |
|
1902 """show set of successors for revision |
|
1903 |
|
1904 A successors set of changeset A is a consistent group of revisions that |
|
1905 succeed A. It contains non-obsolete changesets only. |
|
1906 |
|
1907 In most cases a changeset A has a single successors set containing a single |
|
1908 successor (changeset A replaced by A'). |
|
1909 |
|
1910 A changeset that is made obsolete with no successors are called "pruned". |
|
1911 Such changesets have no successors sets at all. |
|
1912 |
|
1913 A changeset that has been "split" will have a successors set containing |
|
1914 more than one successor. |
|
1915 |
|
1916 A changeset that has been rewritten in multiple different ways is called |
|
1917 "divergent". Such changesets have multiple successor sets (each of which |
|
1918 may also be split, i.e. have multiple successors). |
|
1919 |
|
1920 Results are displayed as follows:: |
|
1921 |
|
1922 <rev1> |
|
1923 <successors-1A> |
|
1924 <rev2> |
|
1925 <successors-2A> |
|
1926 <successors-2B1> <successors-2B2> <successors-2B3> |
|
1927 |
|
1928 Here rev2 has two possible (i.e. divergent) successors sets. The first |
|
1929 holds one element, whereas the second holds three (i.e. the changeset has |
|
1930 been split). |
|
1931 """ |
|
1932 # passed to successorssets caching computation from one call to another |
|
1933 cache = {} |
|
1934 ctx2str = str |
|
1935 node2str = short |
|
1936 if ui.debug(): |
|
1937 def ctx2str(ctx): |
|
1938 return ctx.hex() |
|
1939 node2str = hex |
|
1940 for rev in scmutil.revrange(repo, revs): |
|
1941 ctx = repo[rev] |
|
1942 ui.write('%s\n'% ctx2str(ctx)) |
|
1943 for succsset in obsolete.successorssets(repo, ctx.node(), cache): |
|
1944 if succsset: |
|
1945 ui.write(' ') |
|
1946 ui.write(node2str(succsset[0])) |
|
1947 for node in succsset[1:]: |
|
1948 ui.write(' ') |
|
1949 ui.write(node2str(node)) |
|
1950 ui.write('\n') |
|
1951 |
1898 @command('debugupgraderepo', [ |
1952 @command('debugupgraderepo', [ |
1899 ('o', 'optimize', [], _('extra optimization to perform'), _('NAME')), |
1953 ('o', 'optimize', [], _('extra optimization to perform'), _('NAME')), |
1900 ('', 'run', False, _('performs an upgrade')), |
1954 ('', 'run', False, _('performs an upgrade')), |
1901 ]) |
1955 ]) |
1902 def debugupgraderepo(ui, repo, run=False, optimize=None): |
1956 def debugupgraderepo(ui, repo, run=False, optimize=None): |