comparison mercurial/commands.py @ 1030:28e2f13ca7c4

Merge with MPM.
author Bryan O'Sullivan <bos@serpentine.com>
date Tue, 23 Aug 2005 21:57:22 -0700
parents 25e7ea0f2cff 836667830fee
children 503aaf19a040
comparison
equal deleted inserted replaced
1029:b5f0ccad8917 1030:28e2f13ca7c4
138 if hasattr(pat, 'read') and 'r' in mode: 138 if hasattr(pat, 'read') and 'r' in mode:
139 return pat 139 return pat
140 return open(make_filename(repo, r, pat, node, total, seqno, revwidth), 140 return open(make_filename(repo, r, pat, node, total, seqno, revwidth),
141 mode) 141 mode)
142 142
143 def dodiff(fp, ui, repo, files=None, node1=None, node2=None, match=util.always, changes=None): 143 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always,
144 changes=None, text=False):
144 def date(c): 145 def date(c):
145 return time.asctime(time.gmtime(float(c[2].split(' ')[0]))) 146 return time.asctime(time.gmtime(float(c[2].split(' ')[0])))
146 147
147 if not changes: 148 if not changes:
148 (c, a, d, u) = repo.changes(node1, node2, files, match = match) 149 (c, a, d, u) = repo.changes(node1, node2, files, match = match)
180 for f in c: 181 for f in c:
181 to = None 182 to = None
182 if f in mmap: 183 if f in mmap:
183 to = repo.file(f).read(mmap[f]) 184 to = repo.file(f).read(mmap[f])
184 tn = read(f) 185 tn = read(f)
185 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r)) 186 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text))
186 for f in a: 187 for f in a:
187 to = None 188 to = None
188 tn = read(f) 189 tn = read(f)
189 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r)) 190 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text))
190 for f in d: 191 for f in d:
191 to = repo.file(f).read(mmap[f]) 192 to = repo.file(f).read(mmap[f])
192 tn = None 193 tn = None
193 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r)) 194 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text))
194 195
195 def show_changeset(ui, repo, rev=0, changenode=None, filelog=None, brinfo=None): 196 def show_changeset(ui, repo, rev=0, changenode=None, filelog=None, brinfo=None):
196 """show a single changeset or file revision""" 197 """show a single changeset or file revision"""
197 changelog = repo.changelog 198 changelog = repo.changelog
198 if filelog: 199 if filelog:
430 node = repo.changelog.lookup(opts['rev']) 431 node = repo.changelog.lookup(opts['rev'])
431 else: 432 else:
432 node = repo.dirstate.parents()[0] 433 node = repo.dirstate.parents()[0]
433 change = repo.changelog.read(node) 434 change = repo.changelog.read(node)
434 mmap = repo.manifest.read(change[0]) 435 mmap = repo.manifest.read(change[0])
436
435 for src, abs, rel, exact in walk(repo, pats, opts): 437 for src, abs, rel, exact in walk(repo, pats, opts):
436 if abs not in mmap: 438 if abs not in mmap:
437 ui.warn("warning: %s is not in the repository!\n" % rel) 439 ui.warn("warning: %s is not in the repository!\n" % rel)
438 continue 440 continue
439 441
440 lines = repo.file(abs).annotate(mmap[abs]) 442 f = repo.file(abs)
443 if not opts['text'] and util.binary(f.read(mmap[abs])):
444 ui.write("%s: binary file\n" % rel)
445 continue
446
447 lines = f.annotate(mmap[abs])
441 pieces = [] 448 pieces = []
442 449
443 for o, f in opmap: 450 for o, f in opmap:
444 if opts[o]: 451 if opts[o]:
445 l = [f(n) for n, dummy in lines] 452 l = [f(n) for n, dummy in lines]
648 for src, abs, rel, exact in items: 655 for src, abs, rel, exact in items:
649 print fmt % (src, abs, rel, exactly[exact]) 656 print fmt % (src, abs, rel, exactly[exact])
650 657
651 def diff(ui, repo, *pats, **opts): 658 def diff(ui, repo, *pats, **opts):
652 """diff working directory (or selected files)""" 659 """diff working directory (or selected files)"""
653 revs = [] 660 node1, node2 = None, None
654 if opts['rev']: 661 revs = [repo.lookup(x) for x in opts['rev']]
655 revs = map(lambda x: repo.lookup(x), opts['rev']) 662
656 663 if len(revs) > 0:
664 node1 = revs[0]
665 if len(revs) > 1:
666 node2 = revs[1]
657 if len(revs) > 2: 667 if len(revs) > 2:
658 raise util.Abort("too many revisions to diff") 668 raise util.Abort("too many revisions to diff")
659 669
660 files = [] 670 files = []
661 match = util.always 671 match = util.always
662 if pats: 672 if pats:
663 roots, match, results = makewalk(repo, pats, opts) 673 roots, match, results = makewalk(repo, pats, opts)
664 for src, abs, rel, exact in results: 674 for src, abs, rel, exact in results:
665 files.append(abs) 675 files.append(abs)
666 dodiff(sys.stdout, ui, repo, files, *revs, **{'match': match}) 676
677 dodiff(sys.stdout, ui, repo, node1, node2, files, match=match,
678 text=opts['text'])
667 679
668 def doexport(ui, repo, changeset, seqno, total, revwidth, opts): 680 def doexport(ui, repo, changeset, seqno, total, revwidth, opts):
669 node = repo.lookup(changeset) 681 node = repo.lookup(changeset)
670 prev, other = repo.changelog.parents(node) 682 prev, other = repo.changelog.parents(node)
671 change = repo.changelog.read(node) 683 change = repo.changelog.read(node)
683 if other != hg.nullid: 695 if other != hg.nullid:
684 fp.write("# Parent %s\n" % hg.hex(other)) 696 fp.write("# Parent %s\n" % hg.hex(other))
685 fp.write(change[4].rstrip()) 697 fp.write(change[4].rstrip())
686 fp.write("\n\n") 698 fp.write("\n\n")
687 699
688 dodiff(fp, ui, repo, None, prev, node) 700 dodiff(fp, ui, repo, prev, node, text=opts['text'])
689 if fp != sys.stdout: fp.close() 701 if fp != sys.stdout: fp.close()
690 702
691 def export(ui, repo, *changesets, **opts): 703 def export(ui, repo, *changesets, **opts):
692 """dump the header and diffs for one or more changesets""" 704 """dump the header and diffs for one or more changesets"""
693 if not changesets: 705 if not changesets:
866 if filelog: 878 if filelog:
867 filenode = filelog.node(i) 879 filenode = filelog.node(i)
868 i = filelog.linkrev(filenode) 880 i = filelog.linkrev(filenode)
869 changenode = repo.changelog.node(i) 881 changenode = repo.changelog.node(i)
870 prev, other = repo.changelog.parents(changenode) 882 prev, other = repo.changelog.parents(changenode)
871 dodiff(sys.stdout, ui, repo, files, prev, changenode) 883 dodiff(sys.stdout, ui, repo, prev, changenode, files)
872 ui.write("\n\n") 884 ui.write("\n\n")
873 885
874 def manifest(ui, repo, rev=None): 886 def manifest(ui, repo, rev=None):
875 """output the latest or given revision of the project manifest""" 887 """output the latest or given revision of the project manifest"""
876 if rev: 888 if rev:
1284 ('X', 'exclude', [], 'exclude path from search')], 1296 ('X', 'exclude', [], 'exclude path from search')],
1285 "hg addremove [OPTION]... [FILE]..."), 1297 "hg addremove [OPTION]... [FILE]..."),
1286 "^annotate": 1298 "^annotate":
1287 (annotate, 1299 (annotate,
1288 [('r', 'rev', '', 'revision'), 1300 [('r', 'rev', '', 'revision'),
1301 ('a', 'text', None, 'treat all files as text'),
1289 ('u', 'user', None, 'show user'), 1302 ('u', 'user', None, 'show user'),
1290 ('n', 'number', None, 'show revision number'), 1303 ('n', 'number', None, 'show revision number'),
1291 ('c', 'changeset', None, 'show changeset'), 1304 ('c', 'changeset', None, 'show changeset'),
1292 ('I', 'include', [], 'include path in search'), 1305 ('I', 'include', [], 'include path in search'),
1293 ('X', 'exclude', [], 'exclude path from search')], 1306 ('X', 'exclude', [], 'exclude path from search')],
1325 ('X', 'exclude', [], 'exclude path from search')], 1338 ('X', 'exclude', [], 'exclude path from search')],
1326 'debugwalk [OPTION]... [FILE]...'), 1339 'debugwalk [OPTION]... [FILE]...'),
1327 "^diff": 1340 "^diff":
1328 (diff, 1341 (diff,
1329 [('r', 'rev', [], 'revision'), 1342 [('r', 'rev', [], 'revision'),
1343 ('a', 'text', None, 'treat all files as text'),
1330 ('I', 'include', [], 'include path in search'), 1344 ('I', 'include', [], 'include path in search'),
1331 ('X', 'exclude', [], 'exclude path from search')], 1345 ('X', 'exclude', [], 'exclude path from search')],
1332 'hg diff [-I] [-X] [-r REV1 [-r REV2]] [FILE]...'), 1346 'hg diff [-I] [-X] [-r REV1 [-r REV2]] [FILE]...'),
1333 "^export": 1347 "^export":
1334 (export, 1348 (export,
1335 [('o', 'output', "", 'output to file')], 1349 [('o', 'output', "", 'output to file'),
1350 ('a', 'text', None, 'treat all files as text')],
1336 "hg export [-o OUTFILE] REV..."), 1351 "hg export [-o OUTFILE] REV..."),
1337 "forget": 1352 "forget":
1338 (forget, 1353 (forget,
1339 [('I', 'include', [], 'include path in search'), 1354 [('I', 'include', [], 'include path in search'),
1340 ('X', 'exclude', [], 'exclude path from search')], 1355 ('X', 'exclude', [], 'exclude path from search')],