2384 def removeforget(abs): |
2384 def removeforget(abs): |
2385 if repo.dirstate[abs] == 'a': |
2385 if repo.dirstate[abs] == 'a': |
2386 return _('forgetting %s\n') |
2386 return _('forgetting %s\n') |
2387 return _('removing %s\n') |
2387 return _('removing %s\n') |
2388 |
2388 |
|
2389 # split between files known in target manifest and the others |
|
2390 smf = set(mf) |
|
2391 |
|
2392 missingmodified = modified - smf |
|
2393 modified -= missingmodified |
|
2394 missingadded = added - smf |
|
2395 added -= missingadded |
|
2396 missingremoved = removed - smf |
|
2397 removed -= missingremoved |
|
2398 missingdeleted = deleted - smf |
|
2399 deleted -= missingdeleted |
|
2400 |
2389 # action to be actually performed by revert |
2401 # action to be actually performed by revert |
2390 # (<list of file>, message>) tuple |
2402 # (<list of file>, message>) tuple |
2391 actions = {'revert': ([], _('reverting %s\n')), |
2403 actions = {'revert': ([], _('reverting %s\n')), |
2392 'add': ([], _('adding %s\n')), |
2404 'add': ([], _('adding %s\n')), |
2393 'remove': ([], removeforget), |
2405 'remove': ([], removeforget), |
2394 'undelete': ([], _('undeleting %s\n'))} |
2406 'undelete': ([], _('undeleting %s\n'))} |
2395 |
2407 |
2396 disptable = ( |
2408 disptable = ( |
2397 # dispatch table: |
2409 # dispatch table: |
2398 # file state |
2410 # file state |
2399 # action if in target manifest |
2411 # action |
2400 # action if not in target manifest |
2412 # make backup |
2401 # make backup if in target manifest |
2413 (modified, (actions['revert'], True)), |
2402 # make backup if not in target manifest |
2414 (missingmodified, (actions['remove'], True)), |
2403 (modified, (actions['revert'], True), |
2415 (added, (actions['revert'], True)), |
2404 (actions['remove'], True)), |
2416 (missingadded, (actions['remove'], False)), |
2405 (added, (actions['revert'], True), |
2417 (removed, (actions['undelete'], True)), |
2406 (actions['remove'], False)), |
2418 (missingremoved, (None, False)), |
2407 (removed, (actions['undelete'], True), |
2419 (deleted, (actions['revert'], False)), |
2408 (None, False)), |
2420 (missingdeleted, (actions['remove'], False)), |
2409 (deleted, (actions['revert'], False), |
|
2410 (actions['remove'], False)), |
|
2411 ) |
2421 ) |
2412 |
2422 |
2413 for abs, (rel, exact) in sorted(names.items()): |
2423 for abs, (rel, exact) in sorted(names.items()): |
2414 # hash on file in target manifest (or None if missing from target) |
2424 # hash on file in target manifest (or None if missing from target) |
2415 mfentry = mf.get(abs) |
2425 mfentry = mf.get(abs) |
2431 msg = msg(abs) |
2441 msg = msg(abs) |
2432 ui.status(msg % rel) |
2442 ui.status(msg % rel) |
2433 # search the entry in the dispatch table. |
2443 # search the entry in the dispatch table. |
2434 # if the file is in any of this sets, it was touched in the working |
2444 # if the file is in any of this sets, it was touched in the working |
2435 # directory parent and we are sure it needs to be reverted. |
2445 # directory parent and we are sure it needs to be reverted. |
2436 for table, hit, miss in disptable: |
2446 for table, (action, backup) in disptable: |
2437 if abs not in table: |
2447 if abs not in table: |
2438 continue |
2448 continue |
2439 # file has changed in dirstate |
2449 if action is not None: |
2440 if mfentry: |
2450 handle(action, backup) |
2441 handle(*hit) |
|
2442 elif miss[0] is not None: |
|
2443 handle(*miss) |
|
2444 break |
2451 break |
2445 else: |
2452 else: |
2446 # Not touched in current dirstate. |
2453 # Not touched in current dirstate. |
2447 |
2454 |
2448 # file is unknown in parent, restore older version or ignore. |
2455 # file is unknown in parent, restore older version or ignore. |