Mercurial > hg
comparison mercurial/cmdutil.py @ 22396:c0213f2cb942
revert: detect unknown files in the same path as files marked as removed
Such unknown files may need to be backed up. Having them identified beforehand
will help simplify the backup logic.
We now use different sets with different backup strategies.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Sat, 30 Aug 2014 02:00:20 +0200 |
parents | 67588e47522a |
children | 1db04829bdc1 |
comparison
equal
deleted
inserted
replaced
22395:67588e47522a | 22396:c0213f2cb942 |
---|---|
2490 # XXX should we check for rename down to target node? | 2490 # XXX should we check for rename down to target node? |
2491 if src and src not in names and repo.dirstate[src] == 'r': | 2491 if src and src not in names and repo.dirstate[src] == 'r': |
2492 dsremoved.add(src) | 2492 dsremoved.add(src) |
2493 names[src] = (repo.pathto(src, cwd), True) | 2493 names[src] = (repo.pathto(src, cwd), True) |
2494 | 2494 |
2495 # For files marked as removed, we check if an unknown file is present at | |
2496 # the same path. If a such file exists it may need to be backed up. | |
2497 # Making the distinction at this stage helps have simpler backup | |
2498 # logic. | |
2499 removunk = set() | |
2500 for abs in removed: | |
2501 target = repo.wjoin(abs) | |
2502 if os.path.lexists(target): | |
2503 removunk.add(abs) | |
2504 removed -= removunk | |
2505 | |
2506 dsremovunk = set() | |
2507 for abs in dsremoved: | |
2508 target = repo.wjoin(abs) | |
2509 if os.path.lexists(target): | |
2510 dsremovunk.add(abs) | |
2511 dsremoved -= dsremovunk | |
2512 | |
2495 ## computation of the action to performs on `names` content. | 2513 ## computation of the action to performs on `names` content. |
2496 | 2514 |
2497 def removeforget(abs): | 2515 def removeforget(abs): |
2498 if repo.dirstate[abs] == 'a': | 2516 if repo.dirstate[abs] == 'a': |
2499 return _('forgetting %s\n') | 2517 return _('forgetting %s\n') |
2526 # Modified compared to target, local change | 2544 # Modified compared to target, local change |
2527 (dsmodified, actions['revert'], backup), | 2545 (dsmodified, actions['revert'], backup), |
2528 # Added since target | 2546 # Added since target |
2529 (dsadded, actions['remove'], discard), | 2547 (dsadded, actions['remove'], discard), |
2530 # Removed since target, before working copy parent | 2548 # Removed since target, before working copy parent |
2531 (removed, actions['add'], backup), | 2549 (removed, actions['add'], discard), |
2550 # Same as `removed` but an unknown file exists at the same path | |
2551 (removunk, actions['add'], backup), | |
2532 # Removed since targe, marked as such in working copy parent | 2552 # Removed since targe, marked as such in working copy parent |
2533 (dsremoved, actions['undelete'], backup), | 2553 (dsremoved, actions['undelete'], discard), |
2554 # Same as `dsremoved` but an unknown file exists at the same path | |
2555 (dsremovunk, actions['undelete'], backup), | |
2534 ## the following sets does not result in any file changes | 2556 ## the following sets does not result in any file changes |
2535 # File with no modification | 2557 # File with no modification |
2536 (clean, actions['noop'], discard), | 2558 (clean, actions['noop'], discard), |
2537 # Existing file, not tracked anywhere | 2559 # Existing file, not tracked anywhere |
2538 (unknown, actions['unknown'], discard), | 2560 (unknown, actions['unknown'], discard), |