comparison mercurial/commands.py @ 729:626aa658e2a9

Turn make_filename into make_file, which returns a file handle.
author Bryan O'Sullivan <bos@serpentine.com>
date Wed, 20 Jul 2005 02:48:16 -0800
parents acee766fcb79
children 91ca3afab8e8
comparison
equal deleted inserted replaced
728:f6588fd14272 729:626aa658e2a9
112 for rev in xrange(start, end, step): 112 for rev in xrange(start, end, step):
113 yield str(rev) 113 yield str(rev)
114 else: 114 else:
115 yield spec 115 yield spec
116 116
117 def make_filename(repo, r, pat, node=None, 117 def make_file(repo, r, pat, node=None,
118 total=None, seqno=None, revwidth=None): 118 total=None, seqno=None, revwidth=None, mode='wb'):
119 if pat == '-':
120 if 'w' in mode: return sys.stdout
121 else: return sys.stdin
119 node_expander = { 122 node_expander = {
120 'H': lambda: hg.hex(node), 123 'H': lambda: hg.hex(node),
121 'R': lambda: str(r.rev(node)), 124 'R': lambda: str(r.rev(node)),
122 'h': lambda: hg.short(node), 125 'h': lambda: hg.short(node),
123 } 126 }
147 i += 1 150 i += 1
148 c = pat[i] 151 c = pat[i]
149 c = expander[c]() 152 c = expander[c]()
150 newname.append(c) 153 newname.append(c)
151 i += 1 154 i += 1
152 return ''.join(newname) 155 return open(''.join(newname), mode)
153 except KeyError, inst: 156 except KeyError, inst:
154 raise Abort("invalid format spec '%%%s' in output file name", 157 raise Abort("invalid format spec '%%%s' in output file name",
155 inst.args[0]) 158 inst.args[0])
156 159
157 def dodiff(fp, ui, repo, files=None, node1=None, node2=None): 160 def dodiff(fp, ui, repo, files=None, node1=None, node2=None):
407 r = repo.file(relpath(repo, [file1])[0]) 410 r = repo.file(relpath(repo, [file1])[0])
408 if rev: 411 if rev:
409 n = r.lookup(rev) 412 n = r.lookup(rev)
410 else: 413 else:
411 n = r.tip() 414 n = r.tip()
412 if opts['output'] and opts['output'] != '-': 415 fp = make_file(repo, r, opts['output'], node=n)
413 fp = open(make_filename(repo, r, opts['output'], node=n), 'wb')
414 else:
415 fp = sys.stdout
416 fp.write(r.read(n)) 416 fp.write(r.read(n))
417 417
418 def clone(ui, source, dest=None, **opts): 418 def clone(ui, source, dest=None, **opts):
419 """make a copy of an existing repository""" 419 """make a copy of an existing repository"""
420 if dest is None: 420 if dest is None:
568 def doexport(ui, repo, changeset, seqno, total, revwidth, opts): 568 def doexport(ui, repo, changeset, seqno, total, revwidth, opts):
569 node = repo.lookup(changeset) 569 node = repo.lookup(changeset)
570 prev, other = repo.changelog.parents(node) 570 prev, other = repo.changelog.parents(node)
571 change = repo.changelog.read(node) 571 change = repo.changelog.read(node)
572 572
573 if opts['output'] and opts['output'] != '-': 573 fp = make_file(repo, repo.changelog, opts['output'],
574 outname = make_filename(repo, repo.changelog, opts['output'], 574 node=node, total=total, seqno=seqno,
575 node=node, total=total, seqno=seqno, 575 revwidth=revwidth)
576 revwidth=revwidth) 576 if fp != sys.stdout:
577 ui.note("Exporting patch to '%s'.\n" % outname) 577 ui.note("Exporting patch to '%s'.\n" % fp.name)
578 fp = open(outname, 'wb')
579 else:
580 fp = sys.stdout
581 578
582 fp.write("# HG changeset patch\n") 579 fp.write("# HG changeset patch\n")
583 fp.write("# User %s\n" % change[1]) 580 fp.write("# User %s\n" % change[1])
584 fp.write("# Node ID %s\n" % hg.hex(node)) 581 fp.write("# Node ID %s\n" % hg.hex(node))
585 fp.write("# Parent %s\n" % hg.hex(prev)) 582 fp.write("# Parent %s\n" % hg.hex(prev))