# HG changeset patch
# User Matt Harbison <matt_harbi...@yahoo.com>
# Date 1519274700 18000
#      Wed Feb 21 23:45:00 2018 -0500
# Node ID d38f7cc80f9dc453e7968fdb594e0a1119003d14
# Parent  c8891cc3fa9ec855a3bdefd3dd759d19927c6b85
hgweb: add a hook for processing LFS Batch API requests

There really isn't a clean way to give LFS a crack at intercepting the requests
without hardcoding some LFS knowledge in the core.  The rationale for this URI
is that the spec for the Batch API[1] defines the URL as the LFS server url +
'/objects/batch'.  The default git URLs are:

    Git remote: https://git-server.com/foo/bar
    LFS server: https://git-server.com/foo/bar.git/info/lfs
    Batch API: https://git-server.com/foo/bar.git/info/lfs/objects/batch

'.git/' seems like it's not something a user would normally track.  If we adhere
to how git defines the URLs, then the hg-git extension should be able to talk to
a git based server without any additional work.

[1] https://github.com/git-lfs/git-lfs/blob/master/docs/api/batch.md

diff --git a/mercurial/hgweb/hgweb_mod.py b/mercurial/hgweb/hgweb_mod.py
--- a/mercurial/hgweb/hgweb_mod.py
+++ b/mercurial/hgweb/hgweb_mod.py
@@ -95,6 +95,12 @@
         urlel = os.path.dirname(urlel)
     return reversed(breadcrumb)
 
+def _processlfsbatchreq(repo, req):
+    """A hook for the LFS extension to wrap that handles requests to the Batch
+    API, and returns the appropriate JSON response.
+    """
+    raise ErrorResponse(HTTP_NOT_FOUND)
+
 class requestcontext(object):
     """Holds state/context for an individual request.
 
@@ -371,6 +377,11 @@
 
             return protohandler['dispatch']()
 
+        # Route LFS Batch API requests to the appropriate handler
+
+        if req.env[r'PATH_INFO'] == '/.git/info/lfs/objects/batch':
+            return _processlfsbatchreq(rctx.repo, req)
+
         # translate user-visible url structure to internal structure
 
         args = query.split('/', 2)
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to