[PATCH 1 of 3] lfs: factor out a method for extracting the pointer of a single file

Matt Harbison mharbison72 at gmail.com
Sun Feb 4 01:18:23 EST 2018


# HG changeset patch
# User Matt Harbison <matt_harbison at yahoo.com>
# Date 1517082796 18000
#      Sat Jan 27 14:53:16 2018 -0500
# Node ID 359c61b92d8b47b866a8b527829643f45bba8970
# Parent  a9802c9ecfb5aa20d89480763ae15b03f78f3a88
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.

diff --git a/hgext/lfs/wrapper.py b/hgext/lfs/wrapper.py
--- a/hgext/lfs/wrapper.py
+++ b/hgext/lfs/wrapper.py
@@ -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):


More information about the Mercurial-devel mailing list