Mercurial > public > mercurial-scm > hg
comparison mercurial/localrepo.py @ 19291:93635f69c93b
changegroup: move changegroup file adding to a separate function
Moving the logic that adds files to a changegroup to a different function
allows extensions to override it and customize the way filelogs are added
to changegroups.
No logic is changed.
author | Durham Goode <durham@fb.com> |
---|---|
date | Thu, 30 May 2013 19:26:56 -0700 |
parents | e9c5b1c246dc |
children | 14c91b18d798 |
comparison
equal
deleted
inserted
replaced
19290:f21f4a1b6c24 | 19291:93635f69c93b |
---|---|
2141 pr.step = _('files') | 2141 pr.step = _('files') |
2142 pr.count = 1 | 2142 pr.count = 1 |
2143 pr.total = efiles | 2143 pr.total = efiles |
2144 source.callback = None | 2144 source.callback = None |
2145 | 2145 |
2146 while True: | 2146 newrevs, newfiles = self.addchangegroupfiles(source, revmap, trp, |
2147 chunkdata = source.filelogheader() | 2147 pr, needfiles) |
2148 if not chunkdata: | 2148 revisions += newrevs |
2149 break | 2149 files += newfiles |
2150 f = chunkdata["filename"] | |
2151 self.ui.debug("adding %s revisions\n" % f) | |
2152 pr() | |
2153 fl = self.file(f) | |
2154 o = len(fl) | |
2155 if not fl.addgroup(source, revmap, trp): | |
2156 raise util.Abort(_("received file revlog group is empty")) | |
2157 revisions += len(fl) - o | |
2158 files += 1 | |
2159 if f in needfiles: | |
2160 needs = needfiles[f] | |
2161 for new in xrange(o, len(fl)): | |
2162 n = fl.node(new) | |
2163 if n in needs: | |
2164 needs.remove(n) | |
2165 else: | |
2166 raise util.Abort( | |
2167 _("received spurious file revlog entry")) | |
2168 if not needs: | |
2169 del needfiles[f] | |
2170 self.ui.progress(_('files'), None) | |
2171 | |
2172 for f, needs in needfiles.iteritems(): | |
2173 fl = self.file(f) | |
2174 for n in needs: | |
2175 try: | |
2176 fl.rev(n) | |
2177 except error.LookupError: | |
2178 raise util.Abort( | |
2179 _('missing file data for %s:%s - run hg verify') % | |
2180 (f, hex(n))) | |
2181 | 2150 |
2182 dh = 0 | 2151 dh = 0 |
2183 if oldheads: | 2152 if oldheads: |
2184 heads = cl.heads() | 2153 heads = cl.heads() |
2185 dh = len(heads) - len(oldheads) | 2154 dh = len(heads) - len(oldheads) |
2254 # never return 0 here: | 2223 # never return 0 here: |
2255 if dh < 0: | 2224 if dh < 0: |
2256 return dh - 1 | 2225 return dh - 1 |
2257 else: | 2226 else: |
2258 return dh + 1 | 2227 return dh + 1 |
2228 | |
2229 def addchangegroupfiles(self, source, revmap, trp, pr, needfiles): | |
2230 revisions = 0 | |
2231 files = 0 | |
2232 while True: | |
2233 chunkdata = source.filelogheader() | |
2234 if not chunkdata: | |
2235 break | |
2236 f = chunkdata["filename"] | |
2237 self.ui.debug("adding %s revisions\n" % f) | |
2238 pr() | |
2239 fl = self.file(f) | |
2240 o = len(fl) | |
2241 if not fl.addgroup(source, revmap, trp): | |
2242 raise util.Abort(_("received file revlog group is empty")) | |
2243 revisions += len(fl) - o | |
2244 files += 1 | |
2245 if f in needfiles: | |
2246 needs = needfiles[f] | |
2247 for new in xrange(o, len(fl)): | |
2248 n = fl.node(new) | |
2249 if n in needs: | |
2250 needs.remove(n) | |
2251 else: | |
2252 raise util.Abort( | |
2253 _("received spurious file revlog entry")) | |
2254 if not needs: | |
2255 del needfiles[f] | |
2256 self.ui.progress(_('files'), None) | |
2257 | |
2258 for f, needs in needfiles.iteritems(): | |
2259 fl = self.file(f) | |
2260 for n in needs: | |
2261 try: | |
2262 fl.rev(n) | |
2263 except error.LookupError: | |
2264 raise util.Abort( | |
2265 _('missing file data for %s:%s - run hg verify') % | |
2266 (f, hex(n))) | |
2267 | |
2268 return revisions, files | |
2259 | 2269 |
2260 def stream_in(self, remote, requirements): | 2270 def stream_in(self, remote, requirements): |
2261 lock = self.lock() | 2271 lock = self.lock() |
2262 try: | 2272 try: |
2263 # Save remote branchmap. We will use it later | 2273 # Save remote branchmap. We will use it later |