##// END OF EJS Templates
patch.diff: add support for diffs relative to a subdirectory...
Siddharth Agarwal -
r24417:f2e1e097 default
parent child Browse files
Show More
@@ -2059,7 +2059,7 b' def difffeatureopts(ui, opts=None, untru'
2059 2059 return mdiff.diffopts(**buildopts)
2060 2060
2061 2061 def diff(repo, node1=None, node2=None, match=None, changes=None, opts=None,
2062 losedatafn=None, prefix=''):
2062 losedatafn=None, prefix='', relroot=''):
2063 2063 '''yields diff of changes to files between two nodes, or node and
2064 2064 working directory.
2065 2065
@@ -2076,7 +2076,9 b' def diff(repo, node1=None, node2=None, m'
2076 2076
2077 2077 prefix is a filename prefix that is prepended to all filenames on
2078 2078 display (used for subrepos).
2079 '''
2079
2080 relroot, if not empty, must be normalized with a trailing /. Any match
2081 patterns that fall outside it will be ignored.'''
2080 2082
2081 2083 if opts is None:
2082 2084 opts = mdiff.defaultopts
@@ -2120,9 +2122,23 b' def diff(repo, node1=None, node2=None, m'
2120 2122 if opts.git or opts.upgrade:
2121 2123 copy = copies.pathcopies(ctx1, ctx2)
2122 2124
2125 if relroot is not None:
2126 # XXX this would ideally be done in the matcher, but that is generally
2127 # meant to 'or' patterns, not 'and' them. In this case we need to 'and'
2128 # all the patterns from the matcher with relroot.
2129 def filterrel(l):
2130 return [f for f in l if f.startswith(relroot)]
2131 modified = filterrel(modified)
2132 added = filterrel(added)
2133 removed = filterrel(removed)
2134 # filter out copies where either side isn't inside the relative root
2135 copy = dict(((dst, src) for (dst, src) in copy.iteritems()
2136 if dst.startswith(relroot)
2137 and src.startswith(relroot)))
2138
2123 2139 def difffn(opts, losedata):
2124 2140 return trydiff(repo, revs, ctx1, ctx2, modified, added, removed,
2125 copy, getfilectx, opts, losedata, prefix, '')
2141 copy, getfilectx, opts, losedata, prefix, relroot)
2126 2142 if opts.upgrade and not opts.git:
2127 2143 try:
2128 2144 def losedata(fn):
General Comments 0
You need to be logged in to leave comments. Login now