##// END OF EJS Templates
revlog: recommit 49fd21f32695 with a fix for issue6528...
Joerg Sonnenberger -
r49876:5b65721a default
parent child Browse files
Show More
@@ -992,6 +992,16 b' class basefilectx:'
992 if self._repo._encodefilterpats:
992 if self._repo._encodefilterpats:
993 # can't rely on size() because wdir content may be decoded
993 # can't rely on size() because wdir content may be decoded
994 return self._filelog.cmp(self._filenode, fctx.data())
994 return self._filelog.cmp(self._filenode, fctx.data())
995 # filelog.size() has two special cases:
996 # - censored metadata
997 # - copy/rename tracking
998 # The first is detected by peaking into the delta,
999 # the second is detected by abusing parent order
1000 # in the revlog index as flag bit. This leaves files using
1001 # the dummy encoding and non-standard meta attributes.
1002 # The following check is a special case for the empty
1003 # metadata block used if the raw file content starts with '\1\n'.
1004 # Cases of arbitrary metadata flags are currently mishandled.
995 if self.size() - 4 == fctx.size():
1005 if self.size() - 4 == fctx.size():
996 # size() can match:
1006 # size() can match:
997 # if file data starts with '\1\n', empty metadata block is
1007 # if file data starts with '\1\n', empty metadata block is
@@ -32,6 +32,7 b' class filelog:'
32 target=(revlog_constants.KIND_FILELOG, path),
32 target=(revlog_constants.KIND_FILELOG, path),
33 radix=b'/'.join((b'data', path)),
33 radix=b'/'.join((b'data', path)),
34 censorable=True,
34 censorable=True,
35 canonical_parent_order=False, # see comment in revlog.py
35 )
36 )
36 # Full name of the user visible file, relative to the repository root.
37 # Full name of the user visible file, relative to the repository root.
37 # Used by LFS.
38 # Used by LFS.
@@ -207,6 +208,7 b' class filelog:'
207 return 0
208 return 0
208
209
209 # XXX if self.read(node).startswith("\1\n"), this returns (size+4)
210 # XXX if self.read(node).startswith("\1\n"), this returns (size+4)
211 # XXX See also basefilectx.cmp.
210 return self._revlog.size(rev)
212 return self._revlog.size(rev)
211
213
212 def cmp(self, node, text):
214 def cmp(self, node, text):
@@ -298,6 +298,7 b' class revlog:'
298 persistentnodemap=False,
298 persistentnodemap=False,
299 concurrencychecker=None,
299 concurrencychecker=None,
300 trypending=False,
300 trypending=False,
301 canonical_parent_order=True,
301 ):
302 ):
302 """
303 """
303 create a revlog object
304 create a revlog object
@@ -373,6 +374,13 b' class revlog:'
373
374
374 self._concurrencychecker = concurrencychecker
375 self._concurrencychecker = concurrencychecker
375
376
377 # parent order is supposed to be semantically irrelevant, so we
378 # normally resort parents to ensure that the first parent is non-null,
379 # if there is a non-null parent at all.
380 # filelog abuses the parent order as flag to mark some instances of
381 # meta-encoded files, so allow it to disable this behavior.
382 self.canonical_parent_order = canonical_parent_order
383
376 def _init_opts(self):
384 def _init_opts(self):
377 """process options (from above/config) to setup associated default revlog mode
385 """process options (from above/config) to setup associated default revlog mode
378
386
@@ -898,7 +906,10 b' class revlog:'
898 raise error.WdirUnsupported
906 raise error.WdirUnsupported
899 raise
907 raise
900
908
901 return entry[5], entry[6]
909 if self.canonical_parent_order and entry[5] == nullrev:
910 return entry[6], entry[5]
911 else:
912 return entry[5], entry[6]
902
913
903 # fast parentrevs(rev) where rev isn't filtered
914 # fast parentrevs(rev) where rev isn't filtered
904 _uncheckedparentrevs = parentrevs
915 _uncheckedparentrevs = parentrevs
@@ -919,7 +930,11 b' class revlog:'
919 def parents(self, node):
930 def parents(self, node):
920 i = self.index
931 i = self.index
921 d = i[self.rev(node)]
932 d = i[self.rev(node)]
922 return i[d[5]][7], i[d[6]][7] # map revisions to nodes inline
933 # inline node() to avoid function call overhead
934 if self.canonical_parent_order and d[5] == self.nullid:
935 return i[d[6]][7], i[d[5]][7]
936 else:
937 return i[d[5]][7], i[d[6]][7]
923
938
924 def chainlen(self, rev):
939 def chainlen(self, rev):
925 return self._chaininfo(rev)[0]
940 return self._chaininfo(rev)[0]
@@ -179,7 +179,7 b' has been emitted, just in a different or'
179
179
180
180
181 $ hg log -T '{if(ellipsis,"...")}{node|short} {p1node|short} {p2node|short} {desc}\n' | sort
181 $ hg log -T '{if(ellipsis,"...")}{node|short} {p1node|short} {p2node|short} {desc}\n' | sort
182 ...2a20009de83e 000000000000 3ac1f5779de3 outside 10
182 ...2a20009de83e 3ac1f5779de3 000000000000 outside 10
183 ...3ac1f5779de3 bb96a08b062a 465567bdfb2d merge a/b/c/d 9
183 ...3ac1f5779de3 bb96a08b062a 465567bdfb2d merge a/b/c/d 9
184 ...8d874d57adea 7ef88b4dd4fa 000000000000 outside 12
184 ...8d874d57adea 7ef88b4dd4fa 000000000000 outside 12
185 ...b844052e7b3b 000000000000 000000000000 outside 2c
185 ...b844052e7b3b 000000000000 000000000000 outside 2c
General Comments 0
You need to be logged in to leave comments. Login now