mercurial/commands.py
changeset 2562 a020024c5870
parent 2494 73ac95671788
child 2565 7f78ca2c7977
equal deleted inserted replaced
2561:494f7787d8ee 2562:a020024c5870
   246             if rev in seen:
   246             if rev in seen:
   247                 continue
   247                 continue
   248             seen[rev] = 1
   248             seen[rev] = 1
   249             yield str(rev)
   249             yield str(rev)
   250 
   250 
   251 def make_filename(repo, r, pat, node=None,
   251 def make_filename(repo, pat, node,
   252                   total=None, seqno=None, revwidth=None, pathname=None):
   252                   total=None, seqno=None, revwidth=None, pathname=None):
   253     node_expander = {
   253     node_expander = {
   254         'H': lambda: hex(node),
   254         'H': lambda: hex(node),
   255         'R': lambda: str(r.rev(node)),
   255         'R': lambda: str(repo.changelog.rev(node)),
   256         'h': lambda: short(node),
   256         'h': lambda: short(node),
   257         }
   257         }
   258     expander = {
   258     expander = {
   259         '%': lambda: '%',
   259         '%': lambda: '%',
   260         'b': lambda: os.path.basename(repo.root),
   260         'b': lambda: os.path.basename(repo.root),
   290         return ''.join(newname)
   290         return ''.join(newname)
   291     except KeyError, inst:
   291     except KeyError, inst:
   292         raise util.Abort(_("invalid format spec '%%%s' in output file name"),
   292         raise util.Abort(_("invalid format spec '%%%s' in output file name"),
   293                     inst.args[0])
   293                     inst.args[0])
   294 
   294 
   295 def make_file(repo, r, pat, node=None,
   295 def make_file(repo, pat, node=None,
   296               total=None, seqno=None, revwidth=None, mode='wb', pathname=None):
   296               total=None, seqno=None, revwidth=None, mode='wb', pathname=None):
   297     if not pat or pat == '-':
   297     if not pat or pat == '-':
   298         return 'w' in mode and sys.stdout or sys.stdin
   298         return 'w' in mode and sys.stdout or sys.stdin
   299     if hasattr(pat, 'write') and 'w' in mode:
   299     if hasattr(pat, 'write') and 'w' in mode:
   300         return pat
   300         return pat
   301     if hasattr(pat, 'read') and 'r' in mode:
   301     if hasattr(pat, 'read') and 'r' in mode:
   302         return pat
   302         return pat
   303     return open(make_filename(repo, r, pat, node, total, seqno, revwidth,
   303     return open(make_filename(repo, pat, node, total, seqno, revwidth,
   304                               pathname),
   304                               pathname),
   305                 mode)
   305                 mode)
   306 
   306 
   307 def write_bundle(cg, filename=None, compress=True):
   307 def write_bundle(cg, filename=None, compress=True):
   308     """Write a bundle file and return its filename.
   308     """Write a bundle file and return its filename.
   777         node, p2 = repo.dirstate.parents()
   777         node, p2 = repo.dirstate.parents()
   778         if p2 != nullid:
   778         if p2 != nullid:
   779             raise util.Abort(_('uncommitted merge - please provide a '
   779             raise util.Abort(_('uncommitted merge - please provide a '
   780                                'specific revision'))
   780                                'specific revision'))
   781 
   781 
   782     dest = make_filename(repo, repo.changelog, dest, node)
   782     dest = make_filename(repo, dest, node)
   783     if os.path.realpath(dest) == repo.root:
   783     if os.path.realpath(dest) == repo.root:
   784         raise util.Abort(_('repository root cannot be destination'))
   784         raise util.Abort(_('repository root cannot be destination'))
   785     dummy, matchfn, dummy = matchpats(repo, [], opts)
   785     dummy, matchfn, dummy = matchpats(repo, [], opts)
   786     kind = opts.get('type') or 'files'
   786     kind = opts.get('type') or 'files'
   787     prefix = opts['prefix']
   787     prefix = opts['prefix']
   788     if dest == '-':
   788     if dest == '-':
   789         if kind == 'files':
   789         if kind == 'files':
   790             raise util.Abort(_('cannot archive plain files to stdout'))
   790             raise util.Abort(_('cannot archive plain files to stdout'))
   791         dest = sys.stdout
   791         dest = sys.stdout
   792         if not prefix: prefix = os.path.basename(repo.root) + '-%h'
   792         if not prefix: prefix = os.path.basename(repo.root) + '-%h'
   793     prefix = make_filename(repo, repo.changelog, prefix, node)
   793     prefix = make_filename(repo, prefix, node)
   794     archival.archive(repo, dest, node, kind, not opts['no_decode'],
   794     archival.archive(repo, dest, node, kind, not opts['no_decode'],
   795                      matchfn, prefix)
   795                      matchfn, prefix)
   796 
   796 
   797 def backout(ui, repo, rev, **opts):
   797 def backout(ui, repo, rev, **opts):
   798     '''reverse effect of earlier changeset
   798     '''reverse effect of earlier changeset
   889     change = repo.changelog.read(node)
   889     change = repo.changelog.read(node)
   890     mf = repo.manifest.read(change[0])
   890     mf = repo.manifest.read(change[0])
   891     for src, abs, rel, exact in walk(repo, (file1,) + pats, opts, node):
   891     for src, abs, rel, exact in walk(repo, (file1,) + pats, opts, node):
   892         r = repo.file(abs)
   892         r = repo.file(abs)
   893         n = mf[abs]
   893         n = mf[abs]
   894         fp = make_file(repo, r, opts['output'], node=n, pathname=abs)
   894         fp = make_file(repo, opts['output'], node, pathname=abs)
   895         fp.write(r.read(n))
   895         fp.write(r.read(n))
   896 
   896 
   897 def clone(ui, source, dest=None, **opts):
   897 def clone(ui, source, dest=None, **opts):
   898     """make a copy of an existing repository
   898     """make a copy of an existing repository
   899 
   899 
  1441     if opts['switch_parent']:
  1441     if opts['switch_parent']:
  1442         parents.reverse()
  1442         parents.reverse()
  1443     prev = (parents and parents[0]) or nullid
  1443     prev = (parents and parents[0]) or nullid
  1444     change = repo.changelog.read(node)
  1444     change = repo.changelog.read(node)
  1445 
  1445 
  1446     fp = make_file(repo, repo.changelog, opts['output'],
  1446     fp = make_file(repo, opts['output'], node, total=total, seqno=seqno,
  1447                    node=node, total=total, seqno=seqno,
       
  1448                    revwidth=revwidth)
  1447                    revwidth=revwidth)
  1449     if fp != sys.stdout:
  1448     if fp != sys.stdout:
  1450         ui.note("%s\n" % fp.name)
  1449         ui.note("%s\n" % fp.name)
  1451 
  1450 
  1452     fp.write("# HG changeset patch\n")
  1451     fp.write("# HG changeset patch\n")