comparison mercurial/merge.py @ 18544:d0a8f09a22eb

merge: inline act() The act function had become very trivial and mainly shuffled arguments around and made it harder to see what really was going on.
author Mads Kiilerich <madski@unity3d.com>
date Mon, 04 Feb 2013 02:46:53 +0100
parents c8ba98bf0e71
children bcf29565d89f
comparison
equal deleted inserted replaced
18543:c8ba98bf0e71 18544:d0a8f09a22eb
191 191
192 overwrite = whether we clobber working files 192 overwrite = whether we clobber working files
193 partial = function to filter file lists 193 partial = function to filter file lists
194 """ 194 """
195 195
196 def act(msg, m, f, *args):
197 actions.append((f, m, args, msg))
198
199 actions, copy, movewithdir = [], {}, {} 196 actions, copy, movewithdir = [], {}, {}
200 197
201 if overwrite: 198 if overwrite:
202 pa = p1 199 pa = p1
203 elif pa == p2: # backwards 200 elif pa == p2: # backwards
204 pa = p1.p1() 201 pa = p1.p1()
205 elif pa and repo.ui.configbool("merge", "followcopies", True): 202 elif pa and repo.ui.configbool("merge", "followcopies", True):
206 ret = copies.mergecopies(repo, p1, p2, pa) 203 ret = copies.mergecopies(repo, p1, p2, pa)
207 copy, movewithdir, diverge, renamedelete = ret 204 copy, movewithdir, diverge, renamedelete = ret
208 for of, fl in diverge.iteritems(): 205 for of, fl in diverge.iteritems():
209 act("divergent renames", "dr", of, fl) 206 actions.append((of, "dr", (fl,), "divergent renames"))
210 for of, fl in renamedelete.iteritems(): 207 for of, fl in renamedelete.iteritems():
211 act("rename and delete", "rd", of, fl) 208 actions.append((of, "rd", (fl,), "rename and delete"))
212 209
213 repo.ui.note(_("resolving manifests\n")) 210 repo.ui.note(_("resolving manifests\n"))
214 repo.ui.debug(" overwrite: %s, partial: %s\n" 211 repo.ui.debug(" overwrite: %s, partial: %s\n"
215 % (bool(overwrite), bool(partial))) 212 % (bool(overwrite), bool(partial)))
216 repo.ui.debug(" ancestor: %s, local: %s, remote: %s\n" % (pa, p1, p2)) 213 repo.ui.debug(" ancestor: %s, local: %s, remote: %s\n" % (pa, p1, p2))
240 pass # same - keep local 237 pass # same - keep local
241 elif n2 == a and fl2 == fla: 238 elif n2 == a and fl2 == fla:
242 pass # remote unchanged - keep local 239 pass # remote unchanged - keep local
243 elif n == a and fl1 == fla: # local unchanged - use remote 240 elif n == a and fl1 == fla: # local unchanged - use remote
244 if n == n2: # optimization: keep local content 241 if n == n2: # optimization: keep local content
245 act("update permissions", "e", f, fl2) 242 actions.append((f, "e", (fl2,), "update permissions"))
246 else: 243 else:
247 act("remote is newer", "g", f, fl2) 244 actions.append((f, "g", (fl2,), "remote is newer"))
248 elif nol and n2 == a: # remote only changed 'x' 245 elif nol and n2 == a: # remote only changed 'x'
249 act("update permissions", "e", f, fl2) 246 actions.append((f, "e", (fl2,), "update permissions"))
250 elif nol and n == a: # local only changed 'x' 247 elif nol and n == a: # local only changed 'x'
251 act("remote is newer", "g", f, fl1) 248 actions.append((f, "g", (fl1,), "remote is newer"))
252 else: # both changed something 249 else: # both changed something
253 act("versions differ", "m", f, f, f, False) 250 actions.append((f, "m", (f, f, False), "versions differ"))
254 elif f in copied: # files we'll deal with on m2 side 251 elif f in copied: # files we'll deal with on m2 side
255 pass 252 pass
256 elif f in movewithdir: # directory rename 253 elif f in movewithdir: # directory rename
257 f2 = movewithdir[f] 254 f2 = movewithdir[f]
258 act("remote renamed directory to " + f2, "d", f, None, f2, 255 actions.append((f, "d", (None, f2, m1.flags(f)),
259 m1.flags(f)) 256 "remote renamed directory to " + f2))
260 elif f in copy: 257 elif f in copy:
261 f2 = copy[f] 258 f2 = copy[f]
262 act("local copied/moved to " + f2, "m", f, f2, f, False) 259 actions.append((f, "m", (f2, f, False),
260 "local copied/moved to " + f2))
263 elif f in ma: # clean, a different, no remote 261 elif f in ma: # clean, a different, no remote
264 if n != ma[f]: 262 if n != ma[f]:
265 prompts.append((f, "cd")) # prompt changed/deleted 263 prompts.append((f, "cd")) # prompt changed/deleted
266 elif n[20:] == "a": # added, no remote 264 elif n[20:] == "a": # added, no remote
267 act("remote deleted", "f", f) 265 actions.append((f, "f", None, "remote deleted"))
268 else: 266 else:
269 act("other deleted", "r", f) 267 actions.append((f, "r", None, "other deleted"))
270 268
271 for f, n in m2.iteritems(): 269 for f, n in m2.iteritems():
272 if partial and not partial(f): 270 if partial and not partial(f):
273 continue 271 continue
274 if f in m1 or f in copied: # files already visited 272 if f in m1 or f in copied: # files already visited
275 continue 273 continue
276 if f in movewithdir: 274 if f in movewithdir:
277 f2 = movewithdir[f] 275 f2 = movewithdir[f]
278 act("local renamed directory to " + f2, "d", None, f, f2, 276 actions.append((None, "d", (f, f2, m2.flags(f)),
279 m2.flags(f)) 277 "local renamed directory to " + f2))
280 elif f in copy: 278 elif f in copy:
281 f2 = copy[f] 279 f2 = copy[f]
282 if f2 in m2: 280 if f2 in m2:
283 act("remote copied to " + f, "m", 281 actions.append((f2, "m", (f, f, False),
284 f2, f, f, False) 282 "remote copied to " + f))
285 else: 283 else:
286 act("remote moved to " + f, "m", 284 actions.append((f2, "m", (f, f, True),
287 f2, f, f, True) 285 "remote moved to " + f))
288 elif f not in ma: 286 elif f not in ma:
289 if (not overwrite 287 if (not overwrite
290 and _checkunknownfile(repo, p1, p2, f)): 288 and _checkunknownfile(repo, p1, p2, f)):
291 act("remote differs from untracked local", 289 actions.append((f, "m", (f, f, False),
292 "m", f, f, f, False) 290 "remote differs from untracked local"))
293 else: 291 else:
294 act("remote created", "g", f, m2.flags(f)) 292 actions.append((f, "g", (m2.flags(f),), "remote created"))
295 elif n != ma[f]: 293 elif n != ma[f]:
296 prompts.append((f, "dc")) # prompt deleted/changed 294 prompts.append((f, "dc")) # prompt deleted/changed
297 295
298 for f, m in sorted(prompts): 296 for f, m in sorted(prompts):
299 if m == "cd": 297 if m == "cd":
300 if repo.ui.promptchoice( 298 if repo.ui.promptchoice(
301 _("local changed %s which remote deleted\n" 299 _("local changed %s which remote deleted\n"
302 "use (c)hanged version or (d)elete?") % f, 300 "use (c)hanged version or (d)elete?") % f,
303 (_("&Changed"), _("&Delete")), 0): 301 (_("&Changed"), _("&Delete")), 0):
304 act("prompt delete", "r", f) 302 actions.append((f, "r", None, "prompt delete"))
305 else: 303 else:
306 act("prompt keep", "a", f) 304 actions.append((f, "a", None, "prompt keep"))
307 elif m == "dc": 305 elif m == "dc":
308 if repo.ui.promptchoice( 306 if repo.ui.promptchoice(
309 _("remote changed %s which local deleted\n" 307 _("remote changed %s which local deleted\n"
310 "use (c)hanged version or leave (d)eleted?") % f, 308 "use (c)hanged version or leave (d)eleted?") % f,
311 (_("&Changed"), _("&Deleted")), 0) == 0: 309 (_("&Changed"), _("&Deleted")), 0) == 0:
312 act("prompt recreating", "g", f, m2.flags(f)) 310 actions.append((f, "g", (m2.flags(f),), "prompt recreating"))
313 else: assert False, m 311 else: assert False, m
314 return actions 312 return actions
315 313
316 def actionkey(a): 314 def actionkey(a):
317 return a[1] == "r" and -1 or 0, a 315 return a[1] == "r" and -1 or 0, a