Patchwork D8369: manifest: teach treemanifest about long hashes

login
register
mail settings
Submitter phabricator
Date April 14, 2020, 3:29 p.m.
Message ID <000245493a5faf5b3c9d4b4ca8f54c50@localhost.localdomain>
Download mbox | patch
Permalink /patch/46079/
State Not Applicable
Headers show

Comments

phabricator - April 14, 2020, 3:29 p.m.
durin42 updated this revision to Diff 21051.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D8369?vs=20972&id=21051

BRANCH
  default

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D8369/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D8369

AFFECTED FILES
  mercurial/manifest.py

CHANGE DETAILS




To: durin42, #hg-reviewers, Alphare
Cc: Alphare, mercurial-devel

Patch

diff --git a/mercurial/manifest.py b/mercurial/manifest.py
--- a/mercurial/manifest.py
+++ b/mercurial/manifest.py
@@ -1027,7 +1027,12 @@ 
                 self._dirs[dir] = treemanifest(self._subpath(dir))
             self._dirs[dir].__setitem__(subpath, n)
         else:
-            self._files[f] = n[:21]  # to match manifestdict's behavior
+            # manifest nodes are either 20 bytes or 32 bytes,
+            # depending on the hash in use. An extra byte is
+            # occasionally used by hg, but won't ever be
+            # persisted. Trim to 21 or 33 bytes as appropriate.
+            trim = 21 if len(n) < 25 else 33
+            self._files[f] = n[:trim]  # to match manifestdict's behavior
         self._dirty = True
 
     def _load(self):