Mercurial > hg
comparison mercurial/commands.py @ 3645:b984dcb1df71
Refactor log ui buffering and patch display
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 13 Nov 2006 13:26:57 -0600 |
parents | b4ad640a3bcf |
children | e50891e461e4 d2d8d23944a9 |
comparison
equal
deleted
inserted
replaced
3644:b7547efe78fb | 3645:b984dcb1df71 |
---|---|
1590 for n in o: | 1590 for n in o: |
1591 parents = [p for p in other.changelog.parents(n) if p != nullid] | 1591 parents = [p for p in other.changelog.parents(n) if p != nullid] |
1592 if opts['no_merges'] and len(parents) == 2: | 1592 if opts['no_merges'] and len(parents) == 2: |
1593 continue | 1593 continue |
1594 displayer.show(changenode=n) | 1594 displayer.show(changenode=n) |
1595 if opts['patch']: | |
1596 prev = (parents and parents[0]) or nullid | |
1597 patch.diff(other, prev, n, fp=repo.ui) | |
1598 ui.write("\n") | |
1599 finally: | 1595 finally: |
1600 if hasattr(other, 'close'): | 1596 if hasattr(other, 'close'): |
1601 other.close() | 1597 other.close() |
1602 if cleanup: | 1598 if cleanup: |
1603 os.unlink(cleanup) | 1599 os.unlink(cleanup) |
1670 By default this command outputs: changeset id and hash, tags, | 1666 By default this command outputs: changeset id and hash, tags, |
1671 non-trivial parents, user, date and time, and a summary for each | 1667 non-trivial parents, user, date and time, and a summary for each |
1672 commit. When the -v/--verbose switch is used, the list of changed | 1668 commit. When the -v/--verbose switch is used, the list of changed |
1673 files and full commit message is shown. | 1669 files and full commit message is shown. |
1674 """ | 1670 """ |
1675 class dui(object): | |
1676 # Implement and delegate some ui protocol. Save hunks of | |
1677 # output for later display in the desired order. | |
1678 def __init__(self, ui): | |
1679 self.ui = ui | |
1680 self.hunk = {} | |
1681 self.header = {} | |
1682 self.quiet = ui.quiet | |
1683 self.verbose = ui.verbose | |
1684 self.debugflag = ui.debugflag | |
1685 def bump(self, rev): | |
1686 self.rev = rev | |
1687 self.hunk[rev] = [] | |
1688 self.header[rev] = [] | |
1689 def note(self, *args): | |
1690 if self.verbose: | |
1691 self.write(*args) | |
1692 def status(self, *args): | |
1693 if not self.quiet: | |
1694 self.write(*args) | |
1695 def write(self, *args): | |
1696 self.hunk[self.rev].extend(args) | |
1697 def write_header(self, *args): | |
1698 self.header[self.rev].extend(args) | |
1699 def debug(self, *args): | |
1700 if self.debugflag: | |
1701 self.write(*args) | |
1702 def __getattr__(self, key): | |
1703 return getattr(self.ui, key) | |
1704 | 1671 |
1705 getchange = util.cachefunc(lambda r:repo.changectx(r).changeset()) | 1672 getchange = util.cachefunc(lambda r:repo.changectx(r).changeset()) |
1706 changeiter, matchfn = walkchangerevs(ui, repo, pats, getchange, opts) | 1673 changeiter, matchfn = walkchangerevs(ui, repo, pats, getchange, opts) |
1707 | 1674 |
1708 if opts['branches']: | 1675 if opts['branches']: |
1753 dcache[:] = [man, repo.manifest.readdelta(man)] | 1720 dcache[:] = [man, repo.manifest.readdelta(man)] |
1754 if fn in dcache[1]: | 1721 if fn in dcache[1]: |
1755 return ncache[fn].get(dcache[1][fn]) | 1722 return ncache[fn].get(dcache[1][fn]) |
1756 return None | 1723 return None |
1757 | 1724 |
1758 displayer = cmdutil.show_changeset(ui, repo, opts) | 1725 displayer = cmdutil.show_changeset(ui, repo, opts, buffered=True) |
1759 for st, rev, fns in changeiter: | 1726 for st, rev, fns in changeiter: |
1760 if st == 'window': | 1727 if st == 'add': |
1761 du = dui(ui) | |
1762 displayer.ui = du | |
1763 elif st == 'add': | |
1764 du.bump(rev) | |
1765 changenode = repo.changelog.node(rev) | 1728 changenode = repo.changelog.node(rev) |
1766 parents = [p for p in repo.changelog.parentrevs(rev) | 1729 parents = [p for p in repo.changelog.parentrevs(rev) |
1767 if p != nullrev] | 1730 if p != nullrev] |
1768 if opts['no_merges'] and len(parents) == 2: | 1731 if opts['no_merges'] and len(parents) == 2: |
1769 continue | 1732 continue |
1792 for fn in getchange(rev)[3]: | 1755 for fn in getchange(rev)[3]: |
1793 rename = getrenamed(fn, rev, mf) | 1756 rename = getrenamed(fn, rev, mf) |
1794 if rename: | 1757 if rename: |
1795 copies.append((fn, rename[0])) | 1758 copies.append((fn, rename[0])) |
1796 displayer.show(rev, changenode, brinfo=br, copies=copies) | 1759 displayer.show(rev, changenode, brinfo=br, copies=copies) |
1797 if opts['patch']: | |
1798 if parents: | |
1799 prev = parents[0] | |
1800 else: | |
1801 prev = nullrev | |
1802 prev = repo.changelog.node(prev) | |
1803 patch.diff(repo, prev, changenode, match=matchfn, fp=du) | |
1804 du.write("\n\n") | |
1805 elif st == 'iter': | 1760 elif st == 'iter': |
1806 if count == limit: break | 1761 if count == limit: break |
1807 if du.header[rev]: | 1762 if displayer.flush(rev): |
1808 ui.write_header(*du.header[rev]) | |
1809 if du.hunk[rev]: | |
1810 count += 1 | 1763 count += 1 |
1811 ui.write(*du.hunk[rev]) | |
1812 | 1764 |
1813 def manifest(ui, repo, rev=None): | 1765 def manifest(ui, repo, rev=None): |
1814 """output the latest or given revision of the project manifest | 1766 """output the latest or given revision of the project manifest |
1815 | 1767 |
1816 Print a list of version controlled files for the given revision. | 1768 Print a list of version controlled files for the given revision. |
1895 for n in o: | 1847 for n in o: |
1896 parents = [p for p in repo.changelog.parents(n) if p != nullid] | 1848 parents = [p for p in repo.changelog.parents(n) if p != nullid] |
1897 if opts['no_merges'] and len(parents) == 2: | 1849 if opts['no_merges'] and len(parents) == 2: |
1898 continue | 1850 continue |
1899 displayer.show(changenode=n) | 1851 displayer.show(changenode=n) |
1900 if opts['patch']: | |
1901 prev = (parents and parents[0]) or nullid | |
1902 patch.diff(repo, prev, n) | |
1903 ui.write("\n") | |
1904 | 1852 |
1905 def parents(ui, repo, file_=None, rev=None, branches=None, **opts): | 1853 def parents(ui, repo, file_=None, rev=None, branches=None, **opts): |
1906 """show the parents of the working dir or revision | 1854 """show the parents of the working dir or revision |
1907 | 1855 |
1908 Print the working directory's parent revisions. | 1856 Print the working directory's parent revisions. |
2558 if opts['branches']: | 2506 if opts['branches']: |
2559 ui.warn(_("the --branches option is deprecated, " | 2507 ui.warn(_("the --branches option is deprecated, " |
2560 "please use 'hg branches' instead\n")) | 2508 "please use 'hg branches' instead\n")) |
2561 br = repo.branchlookup([n]) | 2509 br = repo.branchlookup([n]) |
2562 cmdutil.show_changeset(ui, repo, opts).show(changenode=n, brinfo=br) | 2510 cmdutil.show_changeset(ui, repo, opts).show(changenode=n, brinfo=br) |
2563 if opts['patch']: | |
2564 patch.diff(repo, repo.changelog.parents(n)[0], n) | |
2565 | 2511 |
2566 def unbundle(ui, repo, fname, **opts): | 2512 def unbundle(ui, repo, fname, **opts): |
2567 """apply a changegroup file | 2513 """apply a changegroup file |
2568 | 2514 |
2569 Apply a compressed changegroup file generated by the bundle | 2515 Apply a compressed changegroup file generated by the bundle |