diff --git a/hgext/largefiles/lfutil.py b/hgext/largefiles/lfutil.py --- a/hgext/largefiles/lfutil.py +++ b/hgext/largefiles/lfutil.py @@ -15,6 +15,7 @@ import stat from mercurial import dirstate, httpconnection, match as match_, util, scmutil from mercurial.i18n import _ +from mercurial import node shortname = '.hglf' shortnameslash = shortname + '/' @@ -365,3 +366,25 @@ def getlfilestoupdate(oldstandins, newst if f[0] not in filelist: filelist.append(f[0]) return filelist + +def getlfilestoupload(repo, missing, addfunc): + for n in missing: + parents = [p for p in repo.changelog.parents(n) if p != node.nullid] + ctx = repo[n] + files = set(ctx.files()) + if len(parents) == 2: + mc = ctx.manifest() + mp1 = ctx.parents()[0].manifest() + mp2 = ctx.parents()[1].manifest() + for f in mp1: + if f not in mc: + files.add(f) + for f in mp2: + if f not in mc: + files.add(f) + for f in mc: + if mc[f] != mp1.get(f, None) or mc[f] != mp2.get(f, None): + files.add(f) + for fn in files: + if isstandin(fn) and fn in ctx: + addfunc(fn, ctx[fn].data().strip()) diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py +++ b/hgext/largefiles/overrides.py @@ -12,7 +12,7 @@ import os import copy from mercurial import hg, commands, util, cmdutil, scmutil, match as match_, \ - node, archival, error, merge, discovery, pathutil, revset + archival, error, merge, discovery, pathutil, revset from mercurial.i18n import _ from mercurial.node import hex from hgext import rebase @@ -1002,25 +1002,7 @@ def getoutgoinglfiles(ui, repo, dest=Non o.reverse() toupload = set() - for n in o: - parents = [p for p in repo.changelog.parents(n) if p != node.nullid] - ctx = repo[n] - files = set(ctx.files()) - if len(parents) == 2: - mc = ctx.manifest() - mp1 = ctx.parents()[0].manifest() - mp2 = ctx.parents()[1].manifest() - for f in mp1: - if f not in mc: - files.add(f) - for f in mp2: - if f not in mc: - files.add(f) - for f in mc: - if mc[f] != mp1.get(f, None) or mc[f] != mp2.get(f, None): - files.add(f) - toupload = toupload.union( - set([f for f in files if lfutil.isstandin(f) and f in ctx])) + lfutil.getlfilestoupload(repo, o, lambda fn, lfhash: toupload.add(fn)) return sorted(toupload) def overrideoutgoing(orig, ui, repo, dest=None, **opts): diff --git a/hgext/largefiles/reposetup.py b/hgext/largefiles/reposetup.py --- a/hgext/largefiles/reposetup.py +++ b/hgext/largefiles/reposetup.py @@ -11,7 +11,6 @@ import copy import os from mercurial import error, manifest, match as match_, util, discovery -from mercurial import node as node_ from mercurial.i18n import _ from mercurial import localrepo @@ -419,30 +418,8 @@ def reposetup(ui, repo): if outgoing.missing: toupload = set() o = self.changelog.nodesbetween(outgoing.missing, revs)[0] - for n in o: - parents = [p for p in self.changelog.parents(n) - if p != node_.nullid] - ctx = self[n] - files = set(ctx.files()) - if len(parents) == 2: - mc = ctx.manifest() - mp1 = ctx.parents()[0].manifest() - mp2 = ctx.parents()[1].manifest() - for f in mp1: - if f not in mc: - files.add(f) - for f in mp2: - if f not in mc: - files.add(f) - for f in mc: - if mc[f] != mp1.get(f, None) or mc[f] != mp2.get(f, - None): - files.add(f) - - toupload = toupload.union( - set([ctx[f].data().strip() - for f in files - if lfutil.isstandin(f) and f in ctx])) + addfunc = lambda fn, lfhash: toupload.add(lfhash) + lfutil.getlfilestoupload(self, o, addfunc) lfcommands.uploadlfiles(ui, self, remote, toupload) return super(lfilesrepo, self).push(remote, force=force, revs=revs, newbranch=newbranch)