mercurial/localrepo.py
changeset 10418 5fc090ba08a6
parent 10405 2d30d66a89ad
child 10429 1c50a954a524
--- a/mercurial/localrepo.py	Thu Feb 11 21:11:59 2010 +0100
+++ b/mercurial/localrepo.py	Thu Feb 11 16:37:43 2010 -0600
@@ -2005,6 +2005,16 @@
             # be empty during the pull
             self.manifest.addgroup(chunkiter, revmap, trp)
 
+            needfiles = {}
+            if self.ui.configbool('server', 'validate', default=False):
+                # validate incoming csets have their manifests
+                for cset in xrange(clstart, clend):
+                    mfest = self.changelog.read(self.changelog.node(cset))[0]
+                    mfest = self.manifest.readdelta(mfest)
+                    # store file nodes we must see
+                    for f, n in mfest.iteritems():
+                        needfiles.setdefault(f, set()).add(n)
+
             # process the files
             self.ui.status(_("adding file changes\n"))
             while 1:
@@ -2019,6 +2029,24 @@
                     raise util.Abort(_("received file revlog group is empty"))
                 revisions += len(fl) - o
                 files += 1
+                if f in needfiles:
+                    needs = needfiles[f]
+                    for new in xrange(o, len(fl)):
+                        n = fl.node(new)
+                        if n in needs:
+                            needs.remove(n)
+                    if not needs:
+                        del needfiles[f]
+
+            for f, needs in needfiles.iteritems():
+                fl = self.file(f)
+                for n in needs:
+                    try:
+                        fl.rev(n)
+                    except error.LookupError:
+                        raise util.Abort(
+                            _('missing file data for %s:%s - run hg verify') %
+                            (f, hex(n)))
 
             newheads = len(cl.heads())
             heads = ""