@riboseinc/isogit-lfs v0.2.0
Aspirationally, a set of helpers to simplify working with Git LFS through Isomorphic Git.
Currently the API is fairly low-level.
NOTE: While Isomorphic Git maintenance status is unclear, this library is in turn not likely to receive new features.
== Installation
Peer dependencies:
- Isomorphic Git ^1.7.8
- @aws-crypto/sha256-universal ^2.0.0
== Usage
As of 0.2.0 (to be released), API offers the following functions (blobs are Uint8Array instances):
downloadBlobFromPointer({ http, headers, url, auth }, lfsPointer) => Uint8Array
+
where http is an HttpClient as supported by Isomorphic Git,
URL is repository URL
and lfsPointer is an object returned by readPointer().
+
Uses cache, if the object had been previously retrieved.
uploadBlob({ http, headers, url, auth }, blob) => PointerInfo
+
where first argument is the same as for the download function,
and returned pointer info can be used to write a pointer file in place
of actual object in Git repository (pass it through formatPointerInfo()).
readPointer({ gitdir, content }) => Pointer
+
where gitdir behavior mimics that of Isomorphic Git
(for non-bare repositories it’s not working directory but the .git in it)
and content is a Uint8Array.
+
Returns an LFS pointer together with Git repo object path of the full blob
(which may or may not be retrieved).
readPointerInfo(blob) => PointerInfo
+ converts a Uint8Array into an LFS pointer structure sufficient for requesting actual LFS blob.
formatPointerInfo(lfsPointerInfo) => Uint8Array
+ converts pointer info to appropriately formatted blob suitable to be stored in Git repository in place of actual object data.
populateCache(gitdir, ref?)
+
where gitdir is same as for readPointer()
and ref should probably be left at the default "HEAD".
+
Attempts to download all LFS objects.
+
NOTE: This particular function is a very tentative piece of API.
Downloads are not particularly optimized, it’s likely quite slow.
== Known shortcomings
- The
@aws-crypto/sha256-universaldependency is suboptimal. It pulls extra dependencies of its own, while it’s not that difficult to provide corresponding implementation using subtle crypto which is compatible between Node and modern browsers. - Originally written for Node runtime, but should work in browser as of 0.2.0.
- Lacks automated tests.
== Considered within scope
- Implement batch uploads and downloads (parallelise requests? use native batch API?)
- Find a way to generalize UA header handling
- Make it work in browser runtime as well (if feasible?) — should be done in 0.2.0