diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -587,7 +587,7 @@ class localrepository(repo.repository): self._wlockref = weakref.ref(l) return l - def filecommit(self, fn, manifest1, manifest2, linkrev, transaction, changelist): + def filecommit(self, fn, manifest1, manifest2, linkrev, tr, changelist): """ commit an individual file as part of a larger transaction """ @@ -645,7 +645,7 @@ class localrepository(repo.repository): return fp1 changelist.append(fn) - return fl.add(t, meta, transaction, linkrev, fp1, fp2) + return fl.add(t, meta, tr, linkrev, fp1, fp2) def rawcommit(self, files, text, user, date, p1=None, p2=None, extra={}): if p1 is None: @@ -719,6 +719,7 @@ class localrepository(repo.repository): wlock = self.wlock() lock = self.lock() tr = self.transaction() + trp = weakref.proxy(tr) # check in files new = {} @@ -729,7 +730,7 @@ class localrepository(repo.repository): for f in commit: self.ui.note(f + "\n") try: - new[f] = self.filecommit(f, m1, m2, linkrev, tr, changed) + new[f] = self.filecommit(f, m1, m2, linkrev, trp, changed) new_exec = is_exec(f) new_link = is_link(f) if not changed or changed[-1] != f: @@ -759,7 +760,7 @@ class localrepository(repo.repository): removed.append(f) elif f in m2: removed.append(f) - mn = self.manifest.add(m1, tr, linkrev, c1[0], c2[0], + mn = self.manifest.add(m1, trp, linkrev, c1[0], c2[0], (new, removed)) # add changeset @@ -796,7 +797,7 @@ class localrepository(repo.repository): text = '\n'.join(lines) if branchname: extra["branch"] = branchname - n = self.changelog.add(mn, changed + removed, text, tr, p1, p2, + n = self.changelog.add(mn, changed + removed, text, trp, p1, p2, user, date, extra) self.hook('pretxncommit', throw=True, node=hex(n), parent1=xp1, parent2=xp2) @@ -1831,11 +1832,12 @@ class localrepository(repo.repository): tr = self.transaction() try: + trp = weakref.proxy(tr) # pull off the changeset group self.ui.status(_("adding changesets\n")) cor = cl.count() - 1 chunkiter = changegroup.chunkiter(source) - if cl.addgroup(chunkiter, csmap, tr, 1) is None: + if cl.addgroup(chunkiter, csmap, trp, 1) is None: raise util.Abort(_("received changelog group is empty")) cnr = cl.count() - 1 changesets = cnr - cor @@ -1847,7 +1849,7 @@ class localrepository(repo.repository): # if the result of the merge of 1 and 2 is the same in 3 and 4, # no new manifest will be created and the manifest group will # be empty during the pull - self.manifest.addgroup(chunkiter, revmap, tr) + self.manifest.addgroup(chunkiter, revmap, trp) # process the files self.ui.status(_("adding file changes\n")) @@ -1859,13 +1861,13 @@ class localrepository(repo.repository): fl = self.file(f) o = fl.count() chunkiter = changegroup.chunkiter(source) - if fl.addgroup(chunkiter, revmap, tr) is None: + if fl.addgroup(chunkiter, revmap, trp) is None: raise util.Abort(_("received file revlog group is empty")) revisions += fl.count() - o files += 1 # make changelog see real files again - cl.finalize(tr) + cl.finalize(trp) newheads = len(self.changelog.heads()) heads = ""