Show More
@@ -508,7 +508,10 b' class localrepository(repo.repository):' | |||
|
508 | 508 | def wwrite(self, filename, data, flags): |
|
509 | 509 | data = self._filter("decode", filename, data) |
|
510 | 510 | if "l" in flags: |
|
511 | os.unlink(self.wjoin(filename)) | |
|
511 | try: | |
|
512 | os.unlink(self.wjoin(filename)) | |
|
513 | except OSError: | |
|
514 | pass | |
|
512 | 515 | os.symlink(data, self.wjoin(filename)) |
|
513 | 516 | else: |
|
514 | 517 | try: |
@@ -220,12 +220,17 b' def manifestmerge(repo, p1, p2, pa, over' | |||
|
220 | 220 | copy = {} |
|
221 | 221 | |
|
222 | 222 | def fmerge(f, f2=None, fa=None): |
|
223 |
"""merge |
|
|
223 | """merge flags""" | |
|
224 | 224 | if not f2: |
|
225 | 225 | f2 = f |
|
226 | 226 | fa = f |
|
227 | 227 | a, b, c = ma.execf(fa), m1.execf(f), m2.execf(f2) |
|
228 |
|
|
|
228 | if ((a^b) | (a^c)) ^ a: | |
|
229 | return 'x' | |
|
230 | a, b, c = ma.linkf(fa), m1.linkf(f), m2.linkf(f2) | |
|
231 | if ((a^b) | (a^c)) ^ a: | |
|
232 | return 'l' | |
|
233 | return '' | |
|
229 | 234 | |
|
230 | 235 | def act(msg, m, f, *args): |
|
231 | 236 | repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m)) |
@@ -250,21 +255,21 b' def manifestmerge(repo, p1, p2, pa, over' | |||
|
250 | 255 | # is remote's version newer? |
|
251 | 256 | # or are we going back in time and clean? |
|
252 | 257 | elif overwrite or m2[f] != a or (backwards and not n[20:]): |
|
253 |
act("remote is newer", "g", f, m2. |
|
|
258 | act("remote is newer", "g", f, m2.flags(f)) | |
|
254 | 259 | # local is newer, not overwrite, check mode bits |
|
255 |
elif fmerge(f) != m1. |
|
|
256 |
act("update permissions", "e", f, m2. |
|
|
260 | elif fmerge(f) != m1.flags(f): | |
|
261 | act("update permissions", "e", f, m2.flags(f)) | |
|
257 | 262 | # contents same, check mode bits |
|
258 |
elif m1. |
|
|
259 |
if overwrite or fmerge(f) != m1. |
|
|
260 |
act("update permissions", "e", f, m2. |
|
|
263 | elif m1.flags(f) != m2.flags(f): | |
|
264 | if overwrite or fmerge(f) != m1.flags(f): | |
|
265 | act("update permissions", "e", f, m2.flags(f)) | |
|
261 | 266 | elif f in copied: |
|
262 | 267 | continue |
|
263 | 268 | elif f in copy: |
|
264 | 269 | f2 = copy[f] |
|
265 | 270 | if f2 not in m2: # directory rename |
|
266 | 271 | act("remote renamed directory to " + f2, "d", |
|
267 |
f, None, f2, m1. |
|
|
272 | f, None, f2, m1.flags(f)) | |
|
268 | 273 | elif f2 in m1: # case 2 A,B/B/B |
|
269 | 274 | act("local copied to " + f2, "m", |
|
270 | 275 | f, f2, f, fmerge(f, f2, f2), False) |
@@ -295,7 +300,7 b' def manifestmerge(repo, p1, p2, pa, over' | |||
|
295 | 300 | f2 = copy[f] |
|
296 | 301 | if f2 not in m1: # directory rename |
|
297 | 302 | act("local renamed directory to " + f2, "d", |
|
298 |
None, f, f2, m2. |
|
|
303 | None, f, f2, m2.flags(f)) | |
|
299 | 304 | elif f2 in m2: # rename case 1, A/A,B/A |
|
300 | 305 | act("remote copied to " + f, "m", |
|
301 | 306 | f2, f, f, fmerge(f2, f, f2), False) |
@@ -304,14 +309,14 b' def manifestmerge(repo, p1, p2, pa, over' | |||
|
304 | 309 | f2, f, f, fmerge(f2, f, f2), True) |
|
305 | 310 | elif f in ma: |
|
306 | 311 | if overwrite or backwards: |
|
307 |
act("recreating", "g", f, m2. |
|
|
312 | act("recreating", "g", f, m2.flags(f)) | |
|
308 | 313 | elif n != ma[f]: |
|
309 | 314 | if repo.ui.prompt( |
|
310 | 315 | (_("remote changed %s which local deleted\n") % f) + |
|
311 | 316 | _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("k"): |
|
312 |
act("prompt recreating", "g", f, m2. |
|
|
317 | act("prompt recreating", "g", f, m2.flags(f)) | |
|
313 | 318 | else: |
|
314 |
act("remote created", "g", f, m2. |
|
|
319 | act("remote created", "g", f, m2.flags(f)) | |
|
315 | 320 | |
|
316 | 321 | return action |
|
317 | 322 | |
@@ -335,7 +340,7 b' def applyupdates(repo, action, wctx, mct' | |||
|
335 | 340 | (f, inst.strerror)) |
|
336 | 341 | removed += 1 |
|
337 | 342 | elif m == "m": # merge |
|
338 | f2, fd, flag, move = a[2:] | |
|
343 | f2, fd, flags, move = a[2:] | |
|
339 | 344 | r = filemerge(repo, f, f2, wctx, mctx) |
|
340 | 345 | if r > 0: |
|
341 | 346 | unresolved += 1 |
@@ -346,32 +351,32 b' def applyupdates(repo, action, wctx, mct' | |||
|
346 | 351 | merged += 1 |
|
347 | 352 | if f != fd: |
|
348 | 353 | repo.ui.debug(_("copying %s to %s\n") % (f, fd)) |
|
349 |
repo.wwrite(fd, repo.wread(f), flag |
|
|
354 | repo.wwrite(fd, repo.wread(f), flags) | |
|
350 | 355 | if move: |
|
351 | 356 | repo.ui.debug(_("removing %s\n") % f) |
|
352 | 357 | os.unlink(repo.wjoin(f)) |
|
353 | util.set_exec(repo.wjoin(fd), flag) | |
|
358 | util.set_exec(repo.wjoin(fd), "x" in flags) | |
|
354 | 359 | elif m == "g": # get |
|
355 | flag = a[2] | |
|
360 | flags = a[2] | |
|
356 | 361 | repo.ui.note(_("getting %s\n") % f) |
|
357 | 362 | t = mctx.filectx(f).data() |
|
358 |
repo.wwrite(f, t, flag |
|
|
363 | repo.wwrite(f, t, flags) | |
|
359 | 364 | updated += 1 |
|
360 | 365 | elif m == "d": # directory rename |
|
361 | f2, fd, flag = a[2:] | |
|
366 | f2, fd, flags = a[2:] | |
|
362 | 367 | if f: |
|
363 | 368 | repo.ui.note(_("moving %s to %s\n") % (f, fd)) |
|
364 | 369 | t = wctx.filectx(f).data() |
|
365 |
repo.wwrite(fd, t, flag |
|
|
370 | repo.wwrite(fd, t, flags) | |
|
366 | 371 | util.unlink(repo.wjoin(f)) |
|
367 | 372 | if f2: |
|
368 | 373 | repo.ui.note(_("getting %s to %s\n") % (f2, fd)) |
|
369 | 374 | t = mctx.filectx(f2).data() |
|
370 |
repo.wwrite(fd, t, flag |
|
|
375 | repo.wwrite(fd, t, flags) | |
|
371 | 376 | updated += 1 |
|
372 | 377 | elif m == "e": # exec |
|
373 | flag = a[2] | |
|
374 | util.set_exec(repo.wjoin(f), flag) | |
|
378 | flags = a[2] | |
|
379 | util.set_exec(repo.wjoin(f), flags) | |
|
375 | 380 | |
|
376 | 381 | return updated, merged, removed, unresolved |
|
377 | 382 |
General Comments 0
You need to be logged in to leave comments.
Login now