mercurial/commands.py
changeset 729 626aa658e2a9
parent 727 acee766fcb79
child 731 91ca3afab8e8
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))