Mercurial > hg
changeset 18422:f009804e2a43
validate: check for spurious incoming filelog entries
Accepting those will lead to "mild corruption", correctly reported as
an error by hg verify, but often not a problem in practice.
Enabled when server.validate is switched on.
author | Sune Foldager <cryo@cyanite.org> |
---|---|
date | Tue, 11 Dec 2012 20:13:21 +0100 |
parents | e8982483f9dc |
children | 5d6ee2494f63 |
files | mercurial/localrepo.py tests/test-push-validation.t |
diffstat | 2 files changed, 44 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/localrepo.py Thu Jan 17 01:06:00 2013 +0100 +++ b/mercurial/localrepo.py Tue Dec 11 20:13:21 2012 +0100 @@ -2311,6 +2311,9 @@ n = fl.node(new) if n in needs: needs.remove(n) + else: + raise util.Abort( + _("received spurious file revlog entry")) if not needs: del needfiles[f] self.ui.progress(_('files'), None)
--- a/tests/test-push-validation.t Thu Jan 17 01:06:00 2013 +0100 +++ b/tests/test-push-validation.t Tue Dec 11 20:13:21 2012 +0100 @@ -18,7 +18,48 @@ updating to branch default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved +Test spurious filelog entries: + $ cd test-clone + $ echo blah >> beta + $ cp .hg/store/data/beta.i tmp1 + $ hg ci -m 2 + $ cp .hg/store/data/beta.i tmp2 + $ hg -q rollback + $ mv tmp2 .hg/store/data/beta.i + $ echo blah >> beta + $ hg ci -m '2 (corrupt)' + +Expected to fail: + + $ hg verify + checking changesets + checking manifests + crosschecking files in changesets and manifests + checking files + beta@1: dddc47b3ba30 not in manifests + 2 files, 2 changesets, 4 total revisions + 1 integrity errors encountered! + (first damaged changeset appears to be 1) + [1] + + $ hg push + pushing to $TESTTMP/test + searching for changes + adding changesets + adding manifests + adding file changes + transaction abort! + rollback completed + abort: received spurious file revlog entry + [255] + + $ hg -q rollback + $ mv tmp1 .hg/store/data/beta.i + $ echo beta > beta + +Test missing filelog entries: + $ cp .hg/store/data/beta.i tmp $ echo blah >> beta $ hg ci -m '2 (corrupt)' @@ -37,8 +78,6 @@ (first damaged changeset appears to be 1) [1] -Expected to fail: - $ hg push pushing to $TESTTMP/test (glob) searching for changes