Show More
@@ -44,7 +44,8 b" def makewalk(repo, pats, opts, head=''):" | |||
|
44 | 44 | |
|
45 | 45 | def walk(repo, pats, opts, head=''): |
|
46 | 46 | files, matchfn, results = makewalk(repo, pats, opts, head) |
|
47 |
for r in results: |
|
|
47 | for r in results: | |
|
48 | yield r | |
|
48 | 49 | |
|
49 | 50 | def walkchangerevs(ui, repo, cwd, pats, opts): |
|
50 | 51 | # This code most commonly needs to iterate backwards over the |
@@ -88,7 +89,8 b' def walkchangerevs(ui, repo, cwd, pats, ' | |||
|
88 | 89 | break |
|
89 | 90 | for rev in filerevgen(filelog): |
|
90 | 91 | if rev <= maxrev: |
|
91 |
if rev < minrev: |
|
|
92 | if rev < minrev: | |
|
93 | break | |
|
92 | 94 | fncache.setdefault(rev, []) |
|
93 | 95 | fncache[rev].append(file) |
|
94 | 96 | wanted[rev] = 1 |
@@ -107,7 +109,7 b' def walkchangerevs(ui, repo, cwd, pats, ' | |||
|
107 | 109 | |
|
108 | 110 | for i in xrange(0, len(revs), window): |
|
109 | 111 | yield 'window', revs[0] < revs[-1], revs[-1] |
|
110 |
nrevs = [rev for rev in revs[i |
|
|
112 | nrevs = [rev for rev in revs[i:min(i+window, len(revs))] | |
|
111 | 113 | if rev in wanted] |
|
112 | 114 | srevs = list(nrevs) |
|
113 | 115 | srevs.sort() |
@@ -205,8 +207,7 b' def make_filename(repo, r, pat, node=Non' | |||
|
205 | 207 | def make_file(repo, r, pat, node=None, |
|
206 | 208 | total=None, seqno=None, revwidth=None, mode='wb'): |
|
207 | 209 | if not pat or pat == '-': |
|
208 |
|
|
|
209 | else: return sys.stdin | |
|
210 | return 'w' in mode and sys.stdout or sys.stdin | |
|
210 | 211 | if hasattr(pat, 'write') and 'w' in mode: |
|
211 | 212 | return pat |
|
212 | 213 | if hasattr(pat, 'read') and 'r' in mode: |
@@ -455,10 +456,12 b' def addremove(ui, repo, *pats, **opts):' | |||
|
455 | 456 | for src, abs, rel, exact in walk(repo, pats, opts): |
|
456 | 457 | if src == 'f' and repo.dirstate.state(abs) == '?': |
|
457 | 458 | add.append(abs) |
|
458 |
if not exact: |
|
|
459 | if not exact: | |
|
460 | ui.status('adding ', rel, '\n') | |
|
459 | 461 | if repo.dirstate.state(abs) != 'r' and not os.path.exists(rel): |
|
460 | 462 | remove.append(abs) |
|
461 | if not exact: ui.status('removing ', rel, '\n') | |
|
463 | if not exact: | |
|
464 | ui.status('removing ', rel, '\n') | |
|
462 | 465 | repo.add(add) |
|
463 | 466 | repo.remove(remove) |
|
464 | 467 | |
@@ -672,7 +675,8 b' def debugconfig(ui):' | |||
|
672 | 675 | """show combined config settings from all hgrc files""" |
|
673 | 676 | try: |
|
674 | 677 | repo = hg.repository(ui) |
|
675 | except: pass | |
|
678 | except hg.RepoError: | |
|
679 | pass | |
|
676 | 680 | for section, name, value in ui.walkconfig(): |
|
677 | 681 | ui.write('%s.%s=%s\n' % (section, name, value)) |
|
678 | 682 | |
@@ -718,13 +722,13 b' def debugindexdot(ui, file_):' | |||
|
718 | 722 | def debugwalk(ui, repo, *pats, **opts): |
|
719 | 723 | """show how files match on given patterns""" |
|
720 | 724 | items = list(walk(repo, pats, opts)) |
|
721 |
if not items: |
|
|
725 | if not items: | |
|
726 | return | |
|
722 | 727 | fmt = '%%s %%-%ds %%-%ds %%s\n' % ( |
|
723 | 728 | max([len(abs) for (src, abs, rel, exact) in items]), |
|
724 | 729 | max([len(rel) for (src, abs, rel, exact) in items])) |
|
725 | exactly = {True: 'exact', False: ''} | |
|
726 | 730 | for src, abs, rel, exact in items: |
|
727 |
ui.write(fmt % (src, abs, rel, |
|
|
731 | ui.write(fmt % (src, abs, rel, exact and 'exact' or '')) | |
|
728 | 732 | |
|
729 | 733 | def diff(ui, repo, *pats, **opts): |
|
730 | 734 | """diff working directory (or selected files)""" |
@@ -769,7 +773,8 b' def doexport(ui, repo, changeset, seqno,' | |||
|
769 | 773 | fp.write("\n\n") |
|
770 | 774 | |
|
771 | 775 | dodiff(fp, ui, repo, prev, node, text=opts['text']) |
|
772 |
if fp != sys.stdout: |
|
|
776 | if fp != sys.stdout: | |
|
777 | fp.close() | |
|
773 | 778 | |
|
774 | 779 | def export(ui, repo, *changesets, **opts): |
|
775 | 780 | """dump the header and diffs for one or more changesets""" |
@@ -790,18 +795,23 b' def forget(ui, repo, *pats, **opts):' | |||
|
790 | 795 | for src, abs, rel, exact in walk(repo, pats, opts): |
|
791 | 796 | if repo.dirstate.state(abs) == 'a': |
|
792 | 797 | forget.append(abs) |
|
793 | if not exact: ui.status('forgetting ', rel, '\n') | |
|
798 | if not exact: | |
|
799 | ui.status('forgetting ', rel, '\n') | |
|
794 | 800 | repo.forget(forget) |
|
795 | 801 | |
|
796 | 802 | def grep(ui, repo, pattern=None, *pats, **opts): |
|
797 | 803 | """search for a pattern in specified files and revisions""" |
|
798 |
if pattern is None: |
|
|
799 | if not pattern: raise util.Abort('no pattern to search for') | |
|
804 | if pattern is None: | |
|
805 | pattern = opts['regexp'] | |
|
806 | if not pattern: | |
|
807 | raise util.Abort('no pattern to search for') | |
|
800 | 808 | reflags = 0 |
|
801 |
if opts['ignore_case']: |
|
|
809 | if opts['ignore_case']: | |
|
810 | reflags |= re.I | |
|
802 | 811 | regexp = re.compile(pattern, reflags) |
|
803 | 812 | sep, end = ':', '\n' |
|
804 |
if opts['null'] or opts['print0']: |
|
|
813 | if opts['null'] or opts['print0']: | |
|
814 | sep = end = '\0' | |
|
805 | 815 | |
|
806 | 816 | fcache = {} |
|
807 | 817 | def getfile(fn): |
@@ -814,7 +824,8 b' def grep(ui, repo, pattern=None, *pats, ' | |||
|
814 | 824 | linenum = 0 |
|
815 | 825 | while True: |
|
816 | 826 | match = regexp.search(body, begin) |
|
817 |
if not match: |
|
|
827 | if not match: | |
|
828 | break | |
|
818 | 829 | mstart, mend = match.span() |
|
819 | 830 | linenum += body.count('\n', begin, mstart) + 1 |
|
820 | 831 | lstart = body.rfind('\n', begin, mstart) + 1 or begin |
@@ -828,8 +839,10 b' def grep(ui, repo, pattern=None, *pats, ' | |||
|
828 | 839 | self.linenum = linenum |
|
829 | 840 | self.colstart = colstart |
|
830 | 841 | self.colend = colend |
|
831 |
def __eq__(self, other): |
|
|
832 | def __hash__(self): return hash(self.line) | |
|
842 | def __eq__(self, other): | |
|
843 | return self.line == other.line | |
|
844 | def __hash__(self): | |
|
845 | return hash(self.line) | |
|
833 | 846 | |
|
834 | 847 | matches = {} |
|
835 | 848 | def grepbody(fn, rev, body): |
@@ -999,11 +1012,11 b' def init(ui, dest="."):' | |||
|
999 | 1012 | |
|
1000 | 1013 | def locate(ui, repo, *pats, **opts): |
|
1001 | 1014 | """locate files matching specific patterns""" |
|
1002 | end = '\n' | |
|
1003 | if opts['print0']: end = '\0' | |
|
1015 | end = opts['print0'] and '\0' or '\n' | |
|
1004 | 1016 | |
|
1005 | 1017 | for src, abs, rel, exact in walk(repo, pats, opts, '(?:.*/|)'): |
|
1006 |
if repo.dirstate.state(abs) == '?': |
|
|
1018 | if repo.dirstate.state(abs) == '?': | |
|
1019 | continue | |
|
1007 | 1020 | if opts['fullpath']: |
|
1008 | 1021 | ui.write(os.path.join(repo.root, abs), end) |
|
1009 | 1022 | else: |
@@ -1021,9 +1034,11 b' def log(ui, repo, *pats, **opts):' | |||
|
1021 | 1034 | self.rev = rev |
|
1022 | 1035 | self.hunk[rev] = [] |
|
1023 | 1036 | def note(self, *args): |
|
1024 |
if self.verbose: |
|
|
1037 | if self.verbose: | |
|
1038 | self.write(*args) | |
|
1025 | 1039 | def status(self, *args): |
|
1026 |
if not self.quiet: |
|
|
1040 | if not self.quiet: | |
|
1041 | self.write(*args) | |
|
1027 | 1042 | def write(self, *args): |
|
1028 | 1043 | self.hunk[self.rev].append(args) |
|
1029 | 1044 | def __getattr__(self, key): |
@@ -1093,7 +1108,7 b' def paths(ui, search=None):' | |||
|
1093 | 1108 | """show definition of symbolic path names""" |
|
1094 | 1109 | try: |
|
1095 | 1110 | repo = hg.repository(ui=ui) |
|
1096 | except: | |
|
1111 | except hg.RepoError: | |
|
1097 | 1112 | pass |
|
1098 | 1113 | |
|
1099 | 1114 | if search: |
@@ -1520,21 +1535,22 b' table = {' | |||
|
1520 | 1535 | [('I', 'include', [], 'include path in search'), |
|
1521 | 1536 | ('X', 'exclude', [], 'exclude path from search')], |
|
1522 | 1537 | "hg forget [OPTION]... FILE..."), |
|
1523 |
"grep": |
|
|
1524 | [('0', 'print0', None, 'terminate file names with NUL'), | |
|
1525 | ('I', 'include', [], 'include path in search'), | |
|
1526 |
|
|
|
1527 | ('Z', 'null', None, 'terminate file names with NUL'), | |
|
1528 | ('a', 'all-revs', '', 'search all revs'), | |
|
1529 |
|
|
|
1530 | ('f', 'full-path', None, 'print complete paths'), | |
|
1531 |
|
|
|
1532 |
|
|
|
1533 | ('n', 'line-number', '', 'print line numbers'), | |
|
1534 | ('r', 'rev', [], 'search in revision rev'), | |
|
1535 | ('s', 'no-messages', None, 'do not print error messages'), | |
|
1536 |
|
|
|
1537 | "hg grep [options] [pat] [files]"), | |
|
1538 | "grep": | |
|
1539 | (grep, | |
|
1540 | [('0', 'print0', None, 'terminate file names with NUL'), | |
|
1541 | ('I', 'include', [], 'include path in search'), | |
|
1542 | ('X', 'exclude', [], 'include path in search'), | |
|
1543 | ('Z', 'null', None, 'terminate file names with NUL'), | |
|
1544 | ('a', 'all-revs', '', 'search all revs'), | |
|
1545 | ('e', 'regexp', '', 'pattern to search for'), | |
|
1546 | ('f', 'full-path', None, 'print complete paths'), | |
|
1547 | ('i', 'ignore-case', None, 'ignore case when matching'), | |
|
1548 | ('l', 'files-with-matches', None, 'print names of files with matches'), | |
|
1549 | ('n', 'line-number', '', 'print line numbers'), | |
|
1550 | ('r', 'rev', [], 'search in revision rev'), | |
|
1551 | ('s', 'no-messages', None, 'do not print error messages'), | |
|
1552 | ('v', 'invert-match', None, 'select non-matching lines')], | |
|
1553 | "hg grep [options] [pat] [files]"), | |
|
1538 | 1554 | "heads": |
|
1539 | 1555 | (heads, |
|
1540 | 1556 | [('b', 'branches', None, 'find branch info')], |
@@ -1654,8 +1670,8 b' globalopts = [' | |||
|
1654 | 1670 | ('h', 'help', None, 'display help and exit'), |
|
1655 | 1671 | ] |
|
1656 | 1672 | |
|
1657 |
norepo = "clone init version help debugconfig debugdata" |
|
|
1658 | " debugindex debugindexdot paths" | |
|
1673 | norepo = ("clone init version help debugconfig debugdata" | |
|
1674 | " debugindex debugindexdot paths") | |
|
1659 | 1675 | |
|
1660 | 1676 | def find(cmd): |
|
1661 | 1677 | for e in table.keys(): |
@@ -1812,7 +1828,8 b' def dispatch(args):' | |||
|
1812 | 1828 | elif hasattr(inst, "reason"): |
|
1813 | 1829 | u.warn("abort: error: %s\n" % inst.reason[1]) |
|
1814 | 1830 | elif hasattr(inst, "args") and inst[0] == errno.EPIPE: |
|
1815 |
if u.debugflag: |
|
|
1831 | if u.debugflag: | |
|
1832 | u.warn("broken pipe\n") | |
|
1816 | 1833 | else: |
|
1817 | 1834 | raise |
|
1818 | 1835 | except OSError, inst: |
General Comments 0
You need to be logged in to leave comments.
Login now