Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 1570:6a104941d56a
hg log -p should show file deletions
author | Benoit Boissinot <benoit.boissinot@ens-lyon.org> |
---|---|
date | Wed, 14 Dec 2005 20:53:45 -0600 |
parents | 1d7d0c07e8f3 |
children | bcdc030c59f8 |
comparison
equal
deleted
inserted
replaced
1569:dd186cb70a64 | 1570:6a104941d56a |
---|---|
64 | 64 |
65 We walk a window of revisions in the desired order. Within the | 65 We walk a window of revisions in the desired order. Within the |
66 window, we first walk forwards to gather data, then in the desired | 66 window, we first walk forwards to gather data, then in the desired |
67 order (usually backwards) to display it. | 67 order (usually backwards) to display it. |
68 | 68 |
69 This function returns an (iterator, getchange) pair. The | 69 This function returns an (iterator, getchange, matchfn) tuple. The |
70 getchange function returns the changelog entry for a numeric | 70 getchange function returns the changelog entry for a numeric |
71 revision. The iterator yields 3-tuples. They will be of one of | 71 revision. The iterator yields 3-tuples. They will be of one of |
72 the following forms: | 72 the following forms: |
73 | 73 |
74 "window", incrementing, lastrev: stepping through a window, | 74 "window", incrementing, lastrev: stepping through a window, |
80 possible display | 80 possible display |
81 | 81 |
82 "iter", rev, None: in-order traversal of the revs earlier iterated | 82 "iter", rev, None: in-order traversal of the revs earlier iterated |
83 over with "add" - use to display data''' | 83 over with "add" - use to display data''' |
84 | 84 |
85 files, matchfn, anypats, cwd = matchpats(repo, pats, opts) | |
86 | |
85 if repo.changelog.count() == 0: | 87 if repo.changelog.count() == 0: |
86 return [], False | 88 return [], False, matchfn |
87 | 89 |
88 files, matchfn, anypats, cwd = matchpats(repo, pats, opts) | |
89 revs = map(int, revrange(ui, repo, opts['rev'] or ['tip:0'])) | 90 revs = map(int, revrange(ui, repo, opts['rev'] or ['tip:0'])) |
90 wanted = {} | 91 wanted = {} |
91 slowpath = anypats | 92 slowpath = anypats |
92 window = 300 | 93 window = 300 |
93 fncache = {} | 94 fncache = {} |
151 for rev in srevs: | 152 for rev in srevs: |
152 fns = fncache.get(rev) or filter(matchfn, getchange(rev)[3]) | 153 fns = fncache.get(rev) or filter(matchfn, getchange(rev)[3]) |
153 yield 'add', rev, fns | 154 yield 'add', rev, fns |
154 for rev in nrevs: | 155 for rev in nrevs: |
155 yield 'iter', rev, None | 156 yield 'iter', rev, None |
156 return iterate(), getchange | 157 return iterate(), getchange, matchfn |
157 | 158 |
158 revrangesep = ':' | 159 revrangesep = ':' |
159 | 160 |
160 def revrange(ui, repo, revs, revlog=None): | 161 def revrange(ui, repo, revs, revlog=None): |
161 """Yield revision as strings from a list of revision specifications.""" | 162 """Yield revision as strings from a list of revision specifications.""" |
1285 counts[change] += 1 | 1286 counts[change] += 1 |
1286 return counts['+'], counts['-'] | 1287 return counts['+'], counts['-'] |
1287 | 1288 |
1288 fstate = {} | 1289 fstate = {} |
1289 skip = {} | 1290 skip = {} |
1290 changeiter, getchange = walkchangerevs(ui, repo, pats, opts) | 1291 changeiter, getchange, matchfn = walkchangerevs(ui, repo, pats, opts) |
1291 count = 0 | 1292 count = 0 |
1292 incrementing = False | 1293 incrementing = False |
1293 for st, rev, fns in changeiter: | 1294 for st, rev, fns in changeiter: |
1294 if st == 'window': | 1295 if st == 'window': |
1295 incrementing = rev | 1296 incrementing = rev |
1548 def debug(self, *args): | 1549 def debug(self, *args): |
1549 if self.debugflag: | 1550 if self.debugflag: |
1550 self.write(*args) | 1551 self.write(*args) |
1551 def __getattr__(self, key): | 1552 def __getattr__(self, key): |
1552 return getattr(self.ui, key) | 1553 return getattr(self.ui, key) |
1553 changeiter, getchange = walkchangerevs(ui, repo, pats, opts) | 1554 changeiter, getchange, matchfn = walkchangerevs(ui, repo, pats, opts) |
1554 for st, rev, fns in changeiter: | 1555 for st, rev, fns in changeiter: |
1555 if st == 'window': | 1556 if st == 'window': |
1556 du = dui(ui) | 1557 du = dui(ui) |
1557 elif st == 'add': | 1558 elif st == 'add': |
1558 du.bump(rev) | 1559 du.bump(rev) |
1564 if opts['only_merges'] and len(parents) != 2: | 1565 if opts['only_merges'] and len(parents) != 2: |
1565 continue | 1566 continue |
1566 | 1567 |
1567 br = None | 1568 br = None |
1568 if opts['keyword']: | 1569 if opts['keyword']: |
1569 changes = repo.changelog.read(repo.changelog.node(rev)) | 1570 changes = getchange(rev) |
1570 miss = 0 | 1571 miss = 0 |
1571 for k in [kw.lower() for kw in opts['keyword']]: | 1572 for k in [kw.lower() for kw in opts['keyword']]: |
1572 if not (k in changes[1].lower() or | 1573 if not (k in changes[1].lower() or |
1573 k in changes[4].lower() or | 1574 k in changes[4].lower() or |
1574 k in " ".join(changes[3][:20]).lower()): | 1575 k in " ".join(changes[3][:20]).lower()): |
1581 br = repo.branchlookup([repo.changelog.node(rev)]) | 1582 br = repo.branchlookup([repo.changelog.node(rev)]) |
1582 | 1583 |
1583 show_changeset(du, repo, rev, brinfo=br) | 1584 show_changeset(du, repo, rev, brinfo=br) |
1584 if opts['patch']: | 1585 if opts['patch']: |
1585 prev = (parents and parents[0]) or nullid | 1586 prev = (parents and parents[0]) or nullid |
1586 dodiff(du, du, repo, prev, changenode, fns) | 1587 dodiff(du, du, repo, prev, changenode, match=matchfn) |
1587 du.write("\n\n") | 1588 du.write("\n\n") |
1588 elif st == 'iter': | 1589 elif st == 'iter': |
1589 for args in du.hunk[rev]: | 1590 for args in du.hunk[rev]: |
1590 ui.write(*args) | 1591 ui.write(*args) |
1591 | 1592 |