Mercurial > hg-stable
changeset 23410:cd9e5e57064d
manifest: document the extra letter in working copy manifest node
As the second developer to get confused by this in November, I'm adding some
documentation for the next poor soul.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Wed, 26 Nov 2014 15:37:01 -0800 |
parents | 36dcd3db70ab |
children | 2d86f4e38c08 |
files | mercurial/context.py mercurial/merge.py |
diffstat | 2 files changed, 11 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/context.py Sun Nov 30 20:06:53 2014 +0100 +++ b/mercurial/context.py Wed Nov 26 15:37:01 2014 -0800 @@ -1035,7 +1035,13 @@ @propertycache def _manifest(self): - """generate a manifest corresponding to the values in self._status""" + """generate a manifest corresponding to the values in self._status + + This reuse the file nodeid from parent, but we append an extra letter + when modified. Modified files get an extra 'm' while added files get + appened an extra 'a'. This is used by manifests merge to see that files + are different and by update logic to avoid deleting newly added files. + """ man1 = self._parents[0].manifest() man = man1.copy()
--- a/mercurial/merge.py Sun Nov 30 20:06:53 2014 +0100 +++ b/mercurial/merge.py Wed Nov 26 15:37:01 2014 -0800 @@ -457,7 +457,10 @@ actions['r'].append((f, None, "remote delete")) else: actions['cd'].append((f, None, "prompt changed/deleted")) - elif n1[20:] == 'a': # added, no remote + elif n1[20:] == 'a': + # This extra 'a' is added by working copy manifest to mark the + # file as locally added. We should forget it instead of + # deleting it. actions['f'].append((f, None, "remote deleted")) else: actions['r'].append((f, None, "other deleted"))