comparison mercurial/copies.py @ 6425:2d9328a2f81f

copies: skip directory rename checks when not merging The directory rename checks are not meaningful unless we're moving or copying files across a branch during a merge.
author Matt Mackall <mpm@selenic.com>
date Sat, 29 Mar 2008 12:39:47 -0500
parents d8f44384c3ee
children e2c49ef2dd6e
comparison
equal deleted inserted replaced
6424:d8f44384c3ee 6425:2d9328a2f81f
51 # return old names sorted by depth 51 # return old names sorted by depth
52 old = old.values() 52 old = old.values()
53 old.sort() 53 old.sort()
54 return [o[1] for o in old] 54 return [o[1] for o in old]
55 55
56 def copies(repo, c1, c2, ca): 56 def copies(repo, c1, c2, ca, checkdirs=False):
57 """ 57 """
58 Find moves and copies between context c1 and c2 58 Find moves and copies between context c1 and c2
59 """ 59 """
60 # avoid silly behavior for update from empty dir 60 # avoid silly behavior for update from empty dir
61 if not c1 or not c2: 61 if not c1 or not c2:
102 if c1 != ca or c2 != ca: # merge needed? 102 if c1 != ca or c2 != ca: # merge needed?
103 copy[f] = of 103 copy[f] = of
104 elif of in ma: 104 elif of in ma:
105 diverge.setdefault(of, []).append(f) 105 diverge.setdefault(of, []).append(f)
106 106
107 if not repo.ui.configbool("merge", "followcopies", True):
108 return {}, {}
109
110 repo.ui.debug(_(" searching for copies back to rev %d\n") % limit) 107 repo.ui.debug(_(" searching for copies back to rev %d\n") % limit)
111 108
112 u1 = _nonoverlap(m1, m2, ma) 109 u1 = _nonoverlap(m1, m2, ma)
113 u2 = _nonoverlap(m2, m1, ma) 110 u2 = _nonoverlap(m2, m1, ma)
114 111
138 if f in copy: note += "*" 135 if f in copy: note += "*"
139 if f in diverge2: note += "!" 136 if f in diverge2: note += "!"
140 repo.ui.debug(_(" %s -> %s %s\n") % (f, fullcopy[f], note)) 137 repo.ui.debug(_(" %s -> %s %s\n") % (f, fullcopy[f], note))
141 del diverge2 138 del diverge2
142 139
143 if not fullcopy or not repo.ui.configbool("merge", "followdirs", True): 140 if not fullcopy or not checkdirs:
144 return copy, diverge 141 return copy, diverge
145 142
146 repo.ui.debug(_(" checking for directory renames\n")) 143 repo.ui.debug(_(" checking for directory renames\n"))
147 144
148 # generate a directory move map 145 # generate a directory move map
185 for f in u1 + u2: 182 for f in u1 + u2:
186 if f not in fullcopy: 183 if f not in fullcopy:
187 for d in dirmove: 184 for d in dirmove:
188 if f.startswith(d): 185 if f.startswith(d):
189 # new file added in a directory that was moved, move it 186 # new file added in a directory that was moved, move it
190 copy[f] = dirmove[d] + f[len(d):] 187 df = dirmove[d] + f[len(d):]
188 copy[f] = df
191 repo.ui.debug(_(" file %s -> %s\n") % (f, copy[f])) 189 repo.ui.debug(_(" file %s -> %s\n") % (f, copy[f]))
192 break 190 break
193 191
194 return copy, diverge 192 return copy, diverge