Mercurial > public > mercurial-scm > hg
comparison mercurial/cmdutil.py @ 37602:52670eaa14b4
export: port _exportsingle() to formatter
Pass 'fm' instead of 'write', and use fm.plain(), fm.write(), etc. instead.
The callers will be updated later.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 12 Apr 2018 22:39:43 +0900 |
parents | 2e0e61312a25 |
children | 678d760c71ff |
comparison
equal
deleted
inserted
replaced
37601:2e0e61312a25 | 37602:52670eaa14b4 |
---|---|
1520 # mapping from identifier to actual export function | 1520 # mapping from identifier to actual export function |
1521 # function as to return a string to be added to the header or None | 1521 # function as to return a string to be added to the header or None |
1522 # it is given two arguments (sequencenumber, changectx) | 1522 # it is given two arguments (sequencenumber, changectx) |
1523 extraexportmap = {} | 1523 extraexportmap = {} |
1524 | 1524 |
1525 def _exportsingle(repo, ctx, match, switch_parent, seqno, write, diffopts): | 1525 def _exportsingle(repo, ctx, fm, match, switch_parent, seqno, diffopts): |
1526 node = scmutil.binnode(ctx) | 1526 node = scmutil.binnode(ctx) |
1527 parents = [p.node() for p in ctx.parents() if p] | 1527 parents = [p.node() for p in ctx.parents() if p] |
1528 branch = ctx.branch() | 1528 branch = ctx.branch() |
1529 if switch_parent: | 1529 if switch_parent: |
1530 parents.reverse() | 1530 parents.reverse() |
1532 if parents: | 1532 if parents: |
1533 prev = parents[0] | 1533 prev = parents[0] |
1534 else: | 1534 else: |
1535 prev = nullid | 1535 prev = nullid |
1536 | 1536 |
1537 write("# HG changeset patch\n") | 1537 fm.context(ctx=ctx) |
1538 write("# User %s\n" % ctx.user()) | 1538 fm.plain('# HG changeset patch\n') |
1539 write("# Date %d %d\n" % ctx.date()) | 1539 fm.write('user', '# User %s\n', ctx.user()) |
1540 write("# %s\n" % dateutil.datestr(ctx.date())) | 1540 fm.plain('# Date %d %d\n' % ctx.date()) |
1541 if branch and branch != 'default': | 1541 fm.write('date', '# %s\n', fm.formatdate(ctx.date())) |
1542 write("# Branch %s\n" % branch) | 1542 fm.condwrite(branch and branch != 'default', |
1543 write("# Node ID %s\n" % hex(node)) | 1543 'branch', '# Branch %s\n', branch) |
1544 write("# Parent %s\n" % hex(prev)) | 1544 fm.write('node', '# Node ID %s\n', hex(node)) |
1545 fm.plain('# Parent %s\n' % hex(prev)) | |
1545 if len(parents) > 1: | 1546 if len(parents) > 1: |
1546 write("# Parent %s\n" % hex(parents[1])) | 1547 fm.plain('# Parent %s\n' % hex(parents[1])) |
1547 | 1548 fm.data(parents=fm.formatlist(pycompat.maplist(hex, parents), name='node')) |
1549 | |
1550 # TODO: redesign extraexportmap function to support formatter | |
1548 for headerid in extraexport: | 1551 for headerid in extraexport: |
1549 header = extraexportmap[headerid](seqno, ctx) | 1552 header = extraexportmap[headerid](seqno, ctx) |
1550 if header is not None: | 1553 if header is not None: |
1551 write('# %s\n' % header) | 1554 fm.plain('# %s\n' % header) |
1552 write(ctx.description().rstrip()) | 1555 |
1553 write("\n\n") | 1556 fm.write('desc', '%s\n', ctx.description().rstrip()) |
1554 | 1557 fm.plain('\n') |
1555 for chunk, label in patch.diffui(repo, prev, node, match, opts=diffopts): | 1558 |
1556 write(chunk, label=label) | 1559 if fm.isplain(): |
1560 chunkiter = patch.diffui(repo, prev, node, match, opts=diffopts) | |
1561 for chunk, label in chunkiter: | |
1562 fm.plain(chunk, label=label) | |
1563 else: | |
1564 chunkiter = patch.diff(repo, prev, node, match, opts=diffopts) | |
1565 # TODO: make it structured? | |
1566 fm.data(diff=b''.join(chunkiter)) | |
1557 | 1567 |
1558 def _exportfile(repo, revs, fp, switch_parent, diffopts, match): | 1568 def _exportfile(repo, revs, fp, switch_parent, diffopts, match): |
1559 """Export changesets to stdout or a single file""" | 1569 """Export changesets to stdout or a single file""" |
1560 dest = '<unnamed>' | 1570 dest = '<unnamed>' |
1561 if fp: | 1571 if fp: |
1562 dest = getattr(fp, 'name', dest) | 1572 dest = getattr(fp, 'name', dest) |
1563 def write(s, **kw): | 1573 fm = formatter.formatter(repo.ui, fp, 'export', {}) |
1564 fp.write(s) | |
1565 else: | 1574 else: |
1566 write = repo.ui.write | 1575 fm = repo.ui.formatter('export', {}) |
1567 | 1576 |
1568 for seqno, rev in enumerate(revs, 1): | 1577 for seqno, rev in enumerate(revs, 1): |
1569 ctx = repo[rev] | 1578 ctx = repo[rev] |
1570 if not dest.startswith('<'): | 1579 if not dest.startswith('<'): |
1571 repo.ui.note("%s\n" % dest) | 1580 repo.ui.note("%s\n" % dest) |
1572 _exportsingle(repo, ctx, match, switch_parent, seqno, write, diffopts) | 1581 fm.startitem() |
1582 _exportsingle(repo, ctx, fm, match, switch_parent, seqno, diffopts) | |
1583 fm.end() | |
1573 | 1584 |
1574 def _exportfntemplate(repo, revs, fntemplate, switch_parent, diffopts, match): | 1585 def _exportfntemplate(repo, revs, fntemplate, switch_parent, diffopts, match): |
1575 """Export changesets to possibly multiple files""" | 1586 """Export changesets to possibly multiple files""" |
1576 total = len(revs) | 1587 total = len(revs) |
1577 revwidth = max(len(str(rev)) for rev in revs) | 1588 revwidth = max(len(str(rev)) for rev in revs) |
1582 dest = makefilename(ctx, fntemplate, | 1593 dest = makefilename(ctx, fntemplate, |
1583 total=total, seqno=seqno, revwidth=revwidth) | 1594 total=total, seqno=seqno, revwidth=revwidth) |
1584 filemap.setdefault(dest, []).append((seqno, rev)) | 1595 filemap.setdefault(dest, []).append((seqno, rev)) |
1585 | 1596 |
1586 for dest in filemap: | 1597 for dest in filemap: |
1587 with open(dest, 'wb') as fo: | 1598 with formatter.openformatter(repo.ui, dest, 'export', {}) as fm: |
1588 repo.ui.note("%s\n" % dest) | 1599 repo.ui.note("%s\n" % dest) |
1589 def write(s, **kw): | |
1590 fo.write(s) | |
1591 for seqno, rev in filemap[dest]: | 1600 for seqno, rev in filemap[dest]: |
1601 fm.startitem() | |
1592 ctx = repo[rev] | 1602 ctx = repo[rev] |
1593 _exportsingle(repo, ctx, match, switch_parent, seqno, write, | 1603 _exportsingle(repo, ctx, fm, match, switch_parent, seqno, |
1594 diffopts) | 1604 diffopts) |
1595 | 1605 |
1596 def export(repo, revs, fntemplate='hg-%h.patch', fp=None, switch_parent=False, | 1606 def export(repo, revs, fntemplate='hg-%h.patch', fp=None, switch_parent=False, |
1597 opts=None, match=None): | 1607 opts=None, match=None): |
1598 '''export changesets as hg patches | 1608 '''export changesets as hg patches |