mercurial/cmdutil.py
changeset 37601 2e0e61312a25
parent 37600 7800ed2e4980
child 37602 52670eaa14b4
equal deleted inserted replaced
37600:7800ed2e4980 37601:2e0e61312a25
  1012         return self
  1012         return self
  1013 
  1013 
  1014     def __exit__(self, exc_type, exc_value, exc_tb):
  1014     def __exit__(self, exc_type, exc_value, exc_tb):
  1015         pass
  1015         pass
  1016 
  1016 
  1017 def makefileobj(ctx, pat, mode='wb', modemap=None, **props):
  1017 def makefileobj(ctx, pat, mode='wb', **props):
  1018     writable = mode not in ('r', 'rb')
  1018     writable = mode not in ('r', 'rb')
  1019 
  1019 
  1020     if isstdiofilename(pat):
  1020     if isstdiofilename(pat):
  1021         repo = ctx.repo()
  1021         repo = ctx.repo()
  1022         if writable:
  1022         if writable:
  1023             fp = repo.ui.fout
  1023             fp = repo.ui.fout
  1024         else:
  1024         else:
  1025             fp = repo.ui.fin
  1025             fp = repo.ui.fin
  1026         return _unclosablefile(fp)
  1026         return _unclosablefile(fp)
  1027     fn = makefilename(ctx, pat, **props)
  1027     fn = makefilename(ctx, pat, **props)
  1028     if modemap is not None:
       
  1029         mode = modemap.get(fn, mode)
       
  1030         if mode == 'wb':
       
  1031             modemap[fn] = 'ab'
       
  1032     return open(fn, mode)
  1028     return open(fn, mode)
  1033 
  1029 
  1034 def openrevlog(repo, cmd, file_, opts):
  1030 def openrevlog(repo, cmd, file_, opts):
  1035     """opens the changelog, manifest, a filelog or a given revlog"""
  1031     """opens the changelog, manifest, a filelog or a given revlog"""
  1036     cl = opts['changelog']
  1032     cl = opts['changelog']
  1577 
  1573 
  1578 def _exportfntemplate(repo, revs, fntemplate, switch_parent, diffopts, match):
  1574 def _exportfntemplate(repo, revs, fntemplate, switch_parent, diffopts, match):
  1579     """Export changesets to possibly multiple files"""
  1575     """Export changesets to possibly multiple files"""
  1580     total = len(revs)
  1576     total = len(revs)
  1581     revwidth = max(len(str(rev)) for rev in revs)
  1577     revwidth = max(len(str(rev)) for rev in revs)
  1582     filemode = {}
  1578     filemap = util.sortdict()  # filename: [(seqno, rev), ...]
  1583 
  1579 
  1584     for seqno, rev in enumerate(revs, 1):
  1580     for seqno, rev in enumerate(revs, 1):
  1585         ctx = repo[rev]
  1581         ctx = repo[rev]
  1586         fo = makefileobj(ctx, fntemplate, mode='wb', modemap=filemode,
  1582         dest = makefilename(ctx, fntemplate,
  1587                          total=total, seqno=seqno, revwidth=revwidth)
  1583                             total=total, seqno=seqno, revwidth=revwidth)
  1588         dest = fo.name
  1584         filemap.setdefault(dest, []).append((seqno, rev))
  1589         def write(s, **kw):
  1585 
  1590             fo.write(s)
  1586     for dest in filemap:
  1591         repo.ui.note("%s\n" % dest)
  1587         with open(dest, 'wb') as fo:
  1592         _exportsingle(repo, ctx, match, switch_parent, seqno, write, diffopts)
  1588             repo.ui.note("%s\n" % dest)
  1593         fo.close()
  1589             def write(s, **kw):
       
  1590                 fo.write(s)
       
  1591             for seqno, rev in filemap[dest]:
       
  1592                 ctx = repo[rev]
       
  1593                 _exportsingle(repo, ctx, match, switch_parent, seqno, write,
       
  1594                               diffopts)
  1594 
  1595 
  1595 def export(repo, revs, fntemplate='hg-%h.patch', fp=None, switch_parent=False,
  1596 def export(repo, revs, fntemplate='hg-%h.patch', fp=None, switch_parent=False,
  1596            opts=None, match=None):
  1597            opts=None, match=None):
  1597     '''export changesets as hg patches
  1598     '''export changesets as hg patches
  1598 
  1599