Mercurial > hg-stable
comparison mercurial/copies.py @ 41763:d5edb5d3a337
copies: filter out copies when target is not in destination manifest
When chaining a series of commits that copied a file with a series
that removed the destination file, we would still include the copy in
the result. Similar to the previous patch, I have checked that `hg
status --copies` is not affected by this bug, but I wouldn't be
surprised if some commands are.
Differential Revision: https://phab.mercurial-scm.org/D5989
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 14 Feb 2019 22:46:18 -0800 |
parents | 3158cb74fbca |
children | 49ad315b39ee |
comparison
equal
deleted
inserted
replaced
41762:3158cb74fbca | 41763:d5edb5d3a337 |
---|---|
122 del t[v] | 122 del t[v] |
123 if v in src: | 123 if v in src: |
124 # file is a copy of an existing file | 124 # file is a copy of an existing file |
125 t[k] = v | 125 t[k] = v |
126 | 126 |
127 # remove criss-crossed copies | |
128 for k, v in list(t.items()): | 127 for k, v in list(t.items()): |
128 # remove criss-crossed copies | |
129 if k in src and v in dst: | 129 if k in src and v in dst: |
130 del t[k] | |
131 # remove copies to files that were then removed | |
132 elif k not in dst: | |
130 del t[k] | 133 del t[k] |
131 | 134 |
132 return t | 135 return t |
133 | 136 |
134 def _tracefile(fctx, am, limit=node.nullrev): | 137 def _tracefile(fctx, am, limit=node.nullrev): |