Patchwork [5,of,7] largefiles: call readstandin() with changectx itself instead of rev or node

mail settings
Submitter Katsunori FUJIWARA
Date March 24, 2017, 1:38 p.m.
Message ID <d8e91cf37cc9409c79c5.1490362719@speaknoevil>
Download mbox | patch
Permalink /patch/19637/
State Accepted
Headers show


Katsunori FUJIWARA - March 24, 2017, 1:38 p.m.
# HG changeset patch
# User FUJIWARA Katsunori <>
# Date 1490361994 -32400
#      Fri Mar 24 22:26:34 2017 +0900
# Node ID d8e91cf37cc9409c79c5d97969c1e63d0dbe8908
# Parent  ae4c9a5c687a7f7a8460dac36cd3f5f8404ef06b
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.


diff --git a/hgext/largefiles/ b/hgext/largefiles/
--- a/hgext/largefiles/
+++ b/hgext/largefiles/
@@ -245,9 +245,9 @@  def copyfromcache(repo, hash, filename):
         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):
     if wvfs.exists(file):
@@ -263,7 +263,7 @@  def copyalltostore(repo, node):
     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 @@  def markcommitted(orig, ctx, node):
     # 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):
diff --git a/hgext/largefiles/ b/hgext/largefiles/
--- a/hgext/largefiles/
+++ b/hgext/largefiles/
@@ -1354,7 +1354,7 @@  def overridecat(orig, ui, repo, file1, *
                     data = repo.wwritedata(f, data)
-                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 @@  def mergeupdate(orig, repo, node, branch
             lfutil.writestandin(repo, standin, lfhash,
             if (standin in pctx and
-                lfhash == lfutil.readstandin(repo, lfile, '.')):
+                lfhash == lfutil.readstandin(repo, lfile, pctx)):
         for lfile in s.added:
             lfutil.updatestandin(repo, lfutil.standin(lfile))