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)) |