mercurial/revlog.py
changeset 49077 5b65721a75eb
parent 49037 642e31cb55f0
child 49248 2bcf5e14bb7e
equal deleted inserted replaced
49076:b999edb15f8c 49077:5b65721a75eb
   296         censorable=False,
   296         censorable=False,
   297         upperboundcomp=None,
   297         upperboundcomp=None,
   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
   304 
   305 
   305         opener is a function that abstracts the file opening operation
   306         opener is a function that abstracts the file opening operation
   370         self._adding_group = None
   371         self._adding_group = None
   371 
   372 
   372         self._loadindex()
   373         self._loadindex()
   373 
   374 
   374         self._concurrencychecker = concurrencychecker
   375         self._concurrencychecker = concurrencychecker
       
   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
   375 
   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 
   379         These values might be affected when actually reading on disk information.
   387         These values might be affected when actually reading on disk information.
   896         except IndexError:
   904         except IndexError:
   897             if rev == wdirrev:
   905             if rev == wdirrev:
   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
   905 
   916 
   906     def node(self, rev):
   917     def node(self, rev):
   917         return self.start(rev) + self.length(rev)
   928         return self.start(rev) + self.length(rev)
   918 
   929 
   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]
   926 
   941 
   927     def _chaininfo(self, rev):
   942     def _chaininfo(self, rev):