Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/cmdutil.py @ 23403:edf29f9c15f0 stable
revert: look for copy information for all local modifications
Renaming a file over an existing one marks the file as modified. So we
track rename source in modified file too.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Tue, 25 Nov 2014 19:40:54 -0800 |
parents | b564330d4b1f |
children | b913c394386f 9601229ed361 |
comparison
equal
deleted
inserted
replaced
23402:2963d5c9d90b | 23403:edf29f9c15f0 |
---|---|
2529 # or just forget etc) | 2529 # or just forget etc) |
2530 if parent == node: | 2530 if parent == node: |
2531 dsmodified = modified | 2531 dsmodified = modified |
2532 dsadded = added | 2532 dsadded = added |
2533 dsremoved = removed | 2533 dsremoved = removed |
2534 # store all local modifications, useful later for rename detection | |
2535 localchanges = dsmodified | dsadded | |
2534 modified, added, removed = set(), set(), set() | 2536 modified, added, removed = set(), set(), set() |
2535 else: | 2537 else: |
2536 changes = repo.status(node1=parent, match=m) | 2538 changes = repo.status(node1=parent, match=m) |
2537 dsmodified = set(changes[0]) | 2539 dsmodified = set(changes[0]) |
2538 dsadded = set(changes[1]) | 2540 dsadded = set(changes[1]) |
2539 dsremoved = set(changes[2]) | 2541 dsremoved = set(changes[2]) |
2542 # store all local modifications, useful later for rename detection | |
2543 localchanges = dsmodified | dsadded | |
2540 | 2544 |
2541 # only take into account for removes between wc and target | 2545 # only take into account for removes between wc and target |
2542 clean |= dsremoved - removed | 2546 clean |= dsremoved - removed |
2543 dsremoved &= removed | 2547 dsremoved &= removed |
2544 # distinct between dirstate remove and other | 2548 # distinct between dirstate remove and other |
2568 dsadded |= mergeadd | 2572 dsadded |= mergeadd |
2569 dsmodified -= mergeadd | 2573 dsmodified -= mergeadd |
2570 | 2574 |
2571 # if f is a rename, update `names` to also revert the source | 2575 # if f is a rename, update `names` to also revert the source |
2572 cwd = repo.getcwd() | 2576 cwd = repo.getcwd() |
2573 for f in dsadded: | 2577 for f in localchanges: |
2574 src = repo.dirstate.copied(f) | 2578 src = repo.dirstate.copied(f) |
2575 # XXX should we check for rename down to target node? | 2579 # XXX should we check for rename down to target node? |
2576 if src and src not in names and repo.dirstate[src] == 'r': | 2580 if src and src not in names and repo.dirstate[src] == 'r': |
2577 dsremoved.add(src) | 2581 dsremoved.add(src) |
2578 names[src] = (repo.pathto(src, cwd), True) | 2582 names[src] = (repo.pathto(src, cwd), True) |