lfs: factor out a method for extracting the pointer of a single file
authorMatt Harbison <matt_harbison@yahoo.com>
Sat, 27 Jan 2018 14:53:16 -0500
changeset 35921 47e737d27e01
parent 35920 2912bed9b0c7
child 35922 0b79f99fd7b0
lfs: factor out a method for extracting the pointer of a single file This will be useful for filesets, among other things, instead of traversing the whole context.
hgext/lfs/wrapper.py
--- a/hgext/lfs/wrapper.py	Mon Feb 05 13:24:02 2018 +0530
+++ b/hgext/lfs/wrapper.py	Sat Jan 27 14:53:16 2018 -0500
@@ -307,20 +307,27 @@
             pointers[p.oid()] = p
     return sorted(pointers.values())
 
+def pointerfromctx(ctx, f):
+    """return a pointer for the named file from the given changectx, or None if
+    the file isn't LFS."""
+    if f not in ctx:
+        return None
+    fctx = ctx[f]
+    if not _islfs(fctx.filelog(), fctx.filenode()):
+        return None
+    try:
+        return pointer.deserialize(fctx.rawdata())
+    except pointer.InvalidPointer as ex:
+        raise error.Abort(_('lfs: corrupted pointer (%s@%s): %s\n')
+                          % (f, short(ctx.node()), ex))
+
 def pointersfromctx(ctx):
     """return a dict {path: pointer} for given single changectx"""
     result = {}
     for f in ctx.files():
-        if f not in ctx:
-            continue
-        fctx = ctx[f]
-        if not _islfs(fctx.filelog(), fctx.filenode()):
-            continue
-        try:
-            result[f] = pointer.deserialize(fctx.rawdata())
-        except pointer.InvalidPointer as ex:
-            raise error.Abort(_('lfs: corrupted pointer (%s@%s): %s\n')
-                              % (f, short(ctx.node()), ex))
+        p = pointerfromctx(ctx, f)
+        if p:
+            result[f] = p
     return result
 
 def uploadblobs(repo, pointers):