diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py --- a/mercurial/changegroup.py +++ b/mercurial/changegroup.py @@ -656,8 +656,7 @@ class cg1packer(object): clrevorder = {} mfs = {} # needed manifests fnodes = {} # needed file nodes - # maps manifest node id -> set(changed files) - mfchangedfiles = {} + changedfiles = set() # Callback for the changelog, used to collect changed files and manifest # nodes. @@ -670,7 +669,7 @@ class cg1packer(object): mfs.setdefault(n, x) # Record a complete list of potentially-changed files in # this manifest. - mfchangedfiles.setdefault(n, set()).update(c[3]) + changedfiles.update(c[3]) return x self._verbosenote(_('uncompressed size of bundle content:\n')) @@ -703,7 +702,7 @@ class cg1packer(object): 'treemanifest' not in repo.requirements) for chunk in self.generatemanifests(commonrevs, clrevorder, - fastpathlinkrev, mfs, mfchangedfiles, fnodes): + fastpathlinkrev, mfs, fnodes): yield chunk mfs.clear() clrevs = set(cl.rev(x) for x in clnodes) @@ -719,9 +718,6 @@ class cg1packer(object): revs = ((r, llr(r)) for r in filerevlog) return dict((fln(r), cln(lr)) for r, lr in revs if lr in clrevs) - changedfiles = set() - for x in mfchangedfiles.itervalues(): - changedfiles.update(x) for chunk in self.generatefiles(changedfiles, linknodes, commonrevs, source): yield chunk @@ -732,7 +728,7 @@ class cg1packer(object): repo.hook('outgoing', node=hex(clnodes[0]), source=source) def generatemanifests(self, commonrevs, clrevorder, fastpathlinkrev, mfs, - mfchangedfiles, fnodes): + fnodes): repo = self._repo dirlog = repo.manifest.dirlog tmfnodes = {'': mfs} @@ -763,28 +759,15 @@ class cg1packer(object): """ clnode = tmfnodes[dir][x] mdata = dirlog(dir).readshallowfast(x) - if 'treemanifest' in repo.requirements: - for p, n, fl in mdata.iterentries(): - if fl == 't': # subdirectory manifest - subdir = dir + p + '/' - tmfclnodes = tmfnodes.setdefault(subdir, {}) - tmfclnode = tmfclnodes.setdefault(n, clnode) - if clrevorder[clnode] < clrevorder[tmfclnode]: - tmfclnodes[n] = clnode - else: - f = dir + p - fclnodes = fnodes.setdefault(f, {}) - fclnode = fclnodes.setdefault(n, clnode) - if clrevorder[clnode] < clrevorder[fclnode]: - fclnodes[n] = clnode - else: - for f in mfchangedfiles[x]: - try: - n = mdata[f] - except KeyError: - continue - # record the first changeset introducing this filelog - # version + for p, n, fl in mdata.iterentries(): + if fl == 't': # subdirectory manifest + subdir = dir + p + '/' + tmfclnodes = tmfnodes.setdefault(subdir, {}) + tmfclnode = tmfclnodes.setdefault(n, clnode) + if clrevorder[clnode] < clrevorder[tmfclnode]: + tmfclnodes[n] = clnode + else: + f = dir + p fclnodes = fnodes.setdefault(f, {}) fclnode = fclnodes.setdefault(n, clnode) if clrevorder[clnode] < clrevorder[fclnode]: