diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -314,7 +314,7 @@ class revlogoldio(object): return index, nodemap, None - def packentry(self, entry, node, version): + def packentry(self, entry, node, version, rev): e2 = (getoffset(entry[0]), entry[1], entry[3], entry[4], node(entry[5]), node(entry[6]), entry[7]) return _pack(indexformatv0, *e2) @@ -388,9 +388,9 @@ class revlogio(object): return index, nodemap, cache - def packentry(self, entry, node, version): + def packentry(self, entry, node, version, rev): p = _pack(indexformatng, *entry) - if not entry[3] and not getoffset(entry[0]) and entry[5] == nullrev: + if rev == 0: p = _pack(versionformat, version) + p[4:] return p @@ -972,7 +972,7 @@ class revlog(object): self.version &= ~(REVLOGNGINLINEDATA) self._inline = False for i in xrange(self.count()): - e = self._io.packentry(self.index[i], self.node, self.version) + e = self._io.packentry(self.index[i], self.node, self.version, i) fp.write(e) # if we don't call rename, the temp file will never replace the @@ -1027,7 +1027,7 @@ class revlog(object): self.index.insert(-1, e) self.nodemap[node] = curr - entry = self._io.packentry(e, self.node, self.version) + entry = self._io.packentry(e, self.node, self.version, curr) if not self._inline: transaction.add(self.datafile, offset) transaction.add(self.indexfile, curr * len(entry)) @@ -1179,7 +1179,7 @@ class revlog(object): link, self.rev(p1), self.rev(p2), node) self.index.insert(-1, e) self.nodemap[node] = r - entry = self._io.packentry(e, self.node, self.version) + entry = self._io.packentry(e, self.node, self.version, r) if self._inline: ifh.write(entry) ifh.write(cdelta) diff --git a/tests/test-revlog-packentry b/tests/test-revlog-packentry new file mode 100755 --- /dev/null +++ b/tests/test-revlog-packentry @@ -0,0 +1,14 @@ +#!/bin/sh + +hg init repo +cd repo + +touch foo +hg ci -Am 'add foo' + +hg up -C null +# this should be stored as a delta against rev 0 +echo foo bar baz > foo +hg ci -Am 'add foo again' + +hg debugindex .hg/store/data/foo.i diff --git a/tests/test-revlog-packentry.out b/tests/test-revlog-packentry.out new file mode 100644 --- /dev/null +++ b/tests/test-revlog-packentry.out @@ -0,0 +1,6 @@ +adding foo +0 files updated, 0 files merged, 1 files removed, 0 files unresolved +adding foo + rev offset length base linkrev nodeid p1 p2 + 0 0 0 0 0 b80de5d13875 000000000000 000000000000 + 1 0 24 0 1 0376abec49b8 000000000000 000000000000