1006 for seqno, rev in enumerate(revs): |
1006 for seqno, rev in enumerate(revs): |
1007 single(rev, seqno + 1, fp) |
1007 single(rev, seqno + 1, fp) |
1008 |
1008 |
1009 def diffordiffstat(ui, repo, diffopts, node1, node2, match, |
1009 def diffordiffstat(ui, repo, diffopts, node1, node2, match, |
1010 changes=None, stat=False, fp=None, prefix='', |
1010 changes=None, stat=False, fp=None, prefix='', |
1011 listsubrepos=False): |
1011 relative='', listsubrepos=False): |
1012 '''show diff or diffstat.''' |
1012 '''show diff or diffstat.''' |
1013 if fp is None: |
1013 if fp is None: |
1014 write = ui.write |
1014 write = ui.write |
1015 else: |
1015 else: |
1016 def write(s, **kw): |
1016 def write(s, **kw): |
1017 fp.write(s) |
1017 fp.write(s) |
1018 |
1018 |
|
1019 if relative: |
|
1020 relroot = pathutil.canonpath(repo.root, repo.getcwd(), relative) |
|
1021 else: |
|
1022 relroot = '' |
|
1023 if relroot != '': |
|
1024 # XXX relative roots currently don't work if the root is within a |
|
1025 # subrepo |
|
1026 uirelroot = match.uipath(relroot) |
|
1027 relroot += '/' |
|
1028 for matchroot in match.files(): |
|
1029 if not matchroot.startswith(relroot): |
|
1030 ui.warn(_('warning: %s not inside relative root %s\n') % ( |
|
1031 match.uipath(matchroot), uirelroot)) |
|
1032 |
1019 if stat: |
1033 if stat: |
1020 diffopts = diffopts.copy(context=0) |
1034 diffopts = diffopts.copy(context=0) |
1021 width = 80 |
1035 width = 80 |
1022 if not ui.plain(): |
1036 if not ui.plain(): |
1023 width = ui.termwidth() |
1037 width = ui.termwidth() |
1024 chunks = patch.diff(repo, node1, node2, match, changes, diffopts, |
1038 chunks = patch.diff(repo, node1, node2, match, changes, diffopts, |
1025 prefix=prefix) |
1039 prefix=prefix, relroot=relroot) |
1026 for chunk, label in patch.diffstatui(util.iterlines(chunks), |
1040 for chunk, label in patch.diffstatui(util.iterlines(chunks), |
1027 width=width, |
1041 width=width, |
1028 git=diffopts.git): |
1042 git=diffopts.git): |
1029 write(chunk, label=label) |
1043 write(chunk, label=label) |
1030 else: |
1044 else: |
1031 for chunk, label in patch.diffui(repo, node1, node2, match, |
1045 for chunk, label in patch.diffui(repo, node1, node2, match, |
1032 changes, diffopts, prefix=prefix): |
1046 changes, diffopts, prefix=prefix, |
|
1047 relroot=relroot): |
1033 write(chunk, label=label) |
1048 write(chunk, label=label) |
1034 |
1049 |
1035 if listsubrepos: |
1050 if listsubrepos: |
1036 ctx1 = repo[node1] |
1051 ctx1 = repo[node1] |
1037 ctx2 = repo[node2] |
1052 ctx2 = repo[node2] |