mercurial/changegroup.py
changeset 27754 a09f143daaf4
parent 27753 d4071cc73f46
child 27867 7ced54ebf972
equal deleted inserted replaced
27753:d4071cc73f46 27754:a09f143daaf4
   514     version = '03'
   514     version = '03'
   515 
   515 
   516     def _deltaheader(self, headertuple, prevnode):
   516     def _deltaheader(self, headertuple, prevnode):
   517         node, p1, p2, deltabase, cs, flags = headertuple
   517         node, p1, p2, deltabase, cs, flags = headertuple
   518         return node, p1, p2, deltabase, cs, flags
   518         return node, p1, p2, deltabase, cs, flags
       
   519 
       
   520     def _unpackmanifests(self, repo, revmap, trp, prog, numchanges):
       
   521         super(cg3unpacker, self)._unpackmanifests(repo, revmap, trp, prog,
       
   522                                                   numchanges)
       
   523         while True:
       
   524             chunkdata = self.filelogheader()
       
   525             if not chunkdata:
       
   526                 break
       
   527             # If we get here, there are directory manifests in the changegroup
       
   528             d = chunkdata["filename"]
       
   529             repo.ui.debug("adding %s revisions\n" % d)
       
   530             dirlog = repo.manifest.dirlog(d)
       
   531             if not dirlog.addgroup(self, revmap, trp):
       
   532                 raise error.Abort(_("received dir revlog group is empty"))
   519 
   533 
   520 class headerlessfixup(object):
   534 class headerlessfixup(object):
   521     def __init__(self, fh, h):
   535     def __init__(self, fh, h):
   522         self._h = h
   536         self._h = h
   523         self._fh = fh
   537         self._fh = fh
  1053     return changegroupsubset(repo, basenodes, repo.heads(), source)
  1067     return changegroupsubset(repo, basenodes, repo.heads(), source)
  1054 
  1068 
  1055 def _addchangegroupfiles(repo, source, revmap, trp, pr, needfiles):
  1069 def _addchangegroupfiles(repo, source, revmap, trp, pr, needfiles):
  1056     revisions = 0
  1070     revisions = 0
  1057     files = 0
  1071     files = 0
  1058     submfsdone = False
       
  1059     while True:
  1072     while True:
  1060         chunkdata = source.filelogheader()
  1073         chunkdata = source.filelogheader()
  1061         if not chunkdata:
  1074         if not chunkdata:
  1062             if source.version == "03" and not submfsdone:
       
  1063                 submfsdone = True
       
  1064                 continue
       
  1065             break
  1075             break
  1066         f = chunkdata["filename"]
  1076         f = chunkdata["filename"]
  1067         repo.ui.debug("adding %s revisions\n" % f)
  1077         repo.ui.debug("adding %s revisions\n" % f)
  1068         pr()
  1078         pr()
  1069         directory = (f[-1] == '/')
  1079         fl = repo.file(f)
  1070         if directory:
       
  1071             # a directory using treemanifests
       
  1072             fl = repo.manifest.dirlog(f)
       
  1073         else:
       
  1074             fl = repo.file(f)
       
  1075         o = len(fl)
  1080         o = len(fl)
  1076         try:
  1081         try:
  1077             if not fl.addgroup(source, revmap, trp):
  1082             if not fl.addgroup(source, revmap, trp):
  1078                 raise error.Abort(_("received file revlog group is empty"))
  1083                 raise error.Abort(_("received file revlog group is empty"))
  1079         except error.CensoredBaseError as e:
  1084         except error.CensoredBaseError as e:
  1080             raise error.Abort(_("received delta base is censored: %s") % e)
  1085             raise error.Abort(_("received delta base is censored: %s") % e)
  1081         if not directory:
  1086         revisions += len(fl) - o
  1082             revisions += len(fl) - o
  1087         files += 1
  1083             files += 1
       
  1084         if f in needfiles:
  1088         if f in needfiles:
  1085             needs = needfiles[f]
  1089             needs = needfiles[f]
  1086             for new in xrange(o, len(fl)):
  1090             for new in xrange(o, len(fl)):
  1087                 n = fl.node(new)
  1091                 n = fl.node(new)
  1088                 if n in needs:
  1092                 if n in needs: