largefiles: call readstandin() with changectx itself instead of rev or node
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Fri, 24 Mar 2017 22:26:34 +0900
changeset 31616 10561eb97c7f
parent 31615 f0f316cb8259
child 31617 1f6c932862e5
largefiles: call readstandin() with changectx itself instead of rev or node readstandin() takes "node" argument to get changectx by "repo[node]". There are some readstandin() invocations, which use ctx.node(), ctx.rev(), or '.' as "node" argument above, even though corresponded changectx object is already looked up on caller side. This patch calls readstandin() with already known changectx itself, to avoid meaningless re-construction of changectx (indirect case via copytostore() is also included). BTW, copytostore() uses "rev" argument only for readstandin() invocation. Therefore, this patch also renames it to "revorctx" to indicate that it can take not only revision ID or so but also changectx, for readability.
hgext/largefiles/lfutil.py
hgext/largefiles/overrides.py
--- a/hgext/largefiles/lfutil.py	Fri Mar 24 22:24:59 2017 +0900
+++ b/hgext/largefiles/lfutil.py	Fri Mar 24 22:26:34 2017 +0900
@@ -245,9 +245,9 @@
         return False
     return True
 
-def copytostore(repo, rev, file, uploaded=False):
+def copytostore(repo, revorctx, file, uploaded=False):
     wvfs = repo.wvfs
-    hash = readstandin(repo, file, rev)
+    hash = readstandin(repo, file, revorctx)
     if instore(repo, hash):
         return
     if wvfs.exists(file):
@@ -263,7 +263,7 @@
     for filename in ctx.files():
         realfile = splitstandin(filename)
         if realfile is not None and filename in ctx.manifest():
-            copytostore(repo, ctx.node(), realfile)
+            copytostore(repo, ctx, realfile)
 
 def copytostoreabsolute(repo, file, hash):
     if inusercache(repo.ui, hash):
@@ -485,6 +485,11 @@
     lfdirstate.write()
 
     # As part of committing, copy all of the largefiles into the cache.
+    #
+    # Using "node" instead of "ctx" implies additional "repo[node]"
+    # lookup while copyalltostore(), but can omit redundant check for
+    # files comming from the 2nd parent, which should exist in store
+    # at merging.
     copyalltostore(repo, node)
 
 def getlfilestoupdate(oldstandins, newstandins):
--- a/hgext/largefiles/overrides.py	Fri Mar 24 22:24:59 2017 +0900
+++ b/hgext/largefiles/overrides.py	Fri Mar 24 22:26:34 2017 +0900
@@ -1354,7 +1354,7 @@
                     data = repo.wwritedata(f, data)
                 fp.write(data)
             else:
-                hash = lfutil.readstandin(repo, lf, ctx.rev())
+                hash = lfutil.readstandin(repo, lf, ctx)
                 if not lfutil.inusercache(repo.ui, hash):
                     store = storefactory.openstore(repo)
                     success, missing = store.get([(lf, hash)])
@@ -1405,7 +1405,7 @@
             lfutil.writestandin(repo, standin, lfhash,
                                 lfutil.getexecutable(lfileabs))
             if (standin in pctx and
-                lfhash == lfutil.readstandin(repo, lfile, '.')):
+                lfhash == lfutil.readstandin(repo, lfile, pctx)):
                 oldclean.add(lfile)
         for lfile in s.added:
             lfutil.updatestandin(repo, lfutil.standin(lfile))