Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 2931:0843bd53dcff
Fix bug #345.
The last hit for a file might have been before the last window, so we
can't clear copies. To reduce the load, we only store real copy
entries instead of storing hashes for every revision.
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Fri, 18 Aug 2006 10:05:44 -0700 |
parents | 773c5b82d052 |
children | f4fc0575e8fa |
comparison
equal
deleted
inserted
replaced
2930:af71034aac90 | 2931:0843bd53dcff |
---|---|
1524 follow = opts.get('follow') | 1524 follow = opts.get('follow') |
1525 for st, rev, fns in changeiter: | 1525 for st, rev, fns in changeiter: |
1526 if st == 'window': | 1526 if st == 'window': |
1527 incrementing = rev | 1527 incrementing = rev |
1528 matches.clear() | 1528 matches.clear() |
1529 copies.clear() | |
1530 elif st == 'add': | 1529 elif st == 'add': |
1531 change = repo.changelog.read(repo.lookup(str(rev))) | 1530 change = repo.changelog.read(repo.lookup(str(rev))) |
1532 mf = repo.manifest.read(change[0]) | 1531 mf = repo.manifest.read(change[0]) |
1533 matches[rev] = {} | 1532 matches[rev] = {} |
1534 for fn in fns: | 1533 for fn in fns: |
1535 if fn in skip: | 1534 if fn in skip: |
1536 continue | 1535 continue |
1537 fstate.setdefault(fn, {}) | 1536 fstate.setdefault(fn, {}) |
1538 copies.setdefault(rev, {}) | |
1539 try: | 1537 try: |
1540 grepbody(fn, rev, getfile(fn).read(mf[fn])) | 1538 grepbody(fn, rev, getfile(fn).read(mf[fn])) |
1541 if follow: | 1539 if follow: |
1542 copied = getfile(fn).renamed(mf[fn]) | 1540 copied = getfile(fn).renamed(mf[fn]) |
1543 if copied: | 1541 if copied: |
1544 copies[rev][fn] = copied[0] | 1542 copies.setdefault(rev, {})[fn] = copied[0] |
1545 except KeyError: | 1543 except KeyError: |
1546 pass | 1544 pass |
1547 elif st == 'iter': | 1545 elif st == 'iter': |
1548 states = matches[rev].items() | 1546 states = matches[rev].items() |
1549 states.sort() | 1547 states.sort() |
1550 for fn, m in states: | 1548 for fn, m in states: |
1551 copy = copies[rev].get(fn) | 1549 copy = copies.get(rev, {}).get(fn) |
1552 if fn in skip: | 1550 if fn in skip: |
1553 if copy: | 1551 if copy: |
1554 skip[copy] = True | 1552 skip[copy] = True |
1555 continue | 1553 continue |
1556 if incrementing or not opts['all'] or fstate[fn]: | 1554 if incrementing or not opts['all'] or fstate[fn]: |
1569 fstate = fstate.items() | 1567 fstate = fstate.items() |
1570 fstate.sort() | 1568 fstate.sort() |
1571 for fn, state in fstate: | 1569 for fn, state in fstate: |
1572 if fn in skip: | 1570 if fn in skip: |
1573 continue | 1571 continue |
1574 if fn not in copies[prev[fn]]: | 1572 if fn not in copies.get(prev[fn], {}): |
1575 display(fn, rev, {}, state) | 1573 display(fn, rev, {}, state) |
1576 return (count == 0 and 1) or 0 | 1574 return (count == 0 and 1) or 0 |
1577 | 1575 |
1578 def heads(ui, repo, **opts): | 1576 def heads(ui, repo, **opts): |
1579 """show current repository heads | 1577 """show current repository heads |