@riboseinc/isogit-lfs
v0.2.0
Published
LFS helpers for Isomorphic Git
Downloads
3
Keywords
Readme
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-universal
dependency 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