0.3.0 - usar fetch y coso
This commit is contained in:
parent
d44e35d40e
commit
b22f2b5741
3 changed files with 17 additions and 35 deletions
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@nulo/isogit-lfs",
|
||||
"version": "0.2.9",
|
||||
"version": "0.3.0",
|
||||
"description": "LFS helpers for Isomorphic Git",
|
||||
"main": "dist/index.js",
|
||||
"repository": "git@github.com:riboseinc/isogit-lfs.git",
|
||||
|
|
|
@ -3,7 +3,7 @@ import { Buffer } from "buffer";
|
|||
|
||||
import { bodyToBuffer, getAuthHeader, isWriteable } from "./util";
|
||||
import { Pointer } from "./pointers";
|
||||
import { HTTPRequest } from "./types";
|
||||
import { HTTPRequest, BasicAuth } from "./types";
|
||||
import { PromiseFsClient } from "isomorphic-git";
|
||||
|
||||
interface LFSInfoResponse {
|
||||
|
@ -29,9 +29,10 @@ function isValidLFSInfoResponseData(
|
|||
*/
|
||||
export default async function downloadBlobFromPointer(
|
||||
fs: PromiseFsClient | null,
|
||||
{ http: { request }, headers = {}, url, auth }: HTTPRequest,
|
||||
url: string,
|
||||
auth: BasicAuth | {},
|
||||
{ info, objectPath }: Pointer
|
||||
): Promise<Buffer> {
|
||||
): Promise<Blob> {
|
||||
if (fs) {
|
||||
try {
|
||||
const cached = await fs?.promises.readFile(objectPath);
|
||||
|
@ -46,7 +47,8 @@ export default async function downloadBlobFromPointer(
|
|||
}
|
||||
}
|
||||
|
||||
const authHeaders: Record<string, string> = auth ? getAuthHeader(auth) : {};
|
||||
const authHeaders: Record<string, string> =
|
||||
"username" in auth ? getAuthHeader(auth) : {};
|
||||
|
||||
// Request LFS transfer
|
||||
|
||||
|
@ -56,29 +58,18 @@ export default async function downloadBlobFromPointer(
|
|||
objects: [info],
|
||||
};
|
||||
|
||||
const { body: lfsInfoBody } = await request({
|
||||
url: `${url}/info/lfs/objects/batch`,
|
||||
const lfsInfoRes = await fetch(`${url}/info/lfs/objects/batch`, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
// Github LFS doesn’t seem to accept this UA, but works fine without any
|
||||
// 'User-Agent': `git/isomorphic-git@${git.version()}`,
|
||||
...headers,
|
||||
...authHeaders,
|
||||
Accept: "application/vnd.git-lfs+json",
|
||||
"Content-Type": "application/vnd.git-lfs+json",
|
||||
},
|
||||
body: [Buffer.from(JSON.stringify(lfsInfoRequestData))],
|
||||
body: JSON.stringify(lfsInfoRequestData),
|
||||
});
|
||||
|
||||
const lfsInfoResponseRaw = (await bodyToBuffer(lfsInfoBody)).toString();
|
||||
let lfsInfoResponseData: any;
|
||||
try {
|
||||
lfsInfoResponseData = JSON.parse(lfsInfoResponseRaw);
|
||||
} catch (e) {
|
||||
throw new Error(
|
||||
`Unexpected structure received from LFS server: unable to parse JSON ${lfsInfoResponseRaw}`
|
||||
);
|
||||
}
|
||||
const lfsInfoResponseData = await lfsInfoRes.json();
|
||||
|
||||
if (isValidLFSInfoResponseData(lfsInfoResponseData)) {
|
||||
// Request the actual blob
|
||||
|
@ -87,19 +78,14 @@ export default async function downloadBlobFromPointer(
|
|||
const lfsObjectDownloadURL = downloadAction.href;
|
||||
const lfsObjectDownloadHeaders = downloadAction.header ?? {};
|
||||
|
||||
const dlHeaders = {
|
||||
...headers,
|
||||
const lfsObjectRes = await fetch(lfsObjectDownloadURL, {
|
||||
method: "GET",
|
||||
headers: {
|
||||
...authHeaders,
|
||||
...lfsObjectDownloadHeaders,
|
||||
};
|
||||
|
||||
const { body: lfsObjectBody } = await request({
|
||||
url: lfsObjectDownloadURL,
|
||||
method: "GET",
|
||||
headers: dlHeaders,
|
||||
},
|
||||
});
|
||||
|
||||
const blob = await bodyToBuffer(lfsObjectBody);
|
||||
const blob = await lfsObjectRes.blob();
|
||||
|
||||
if (fs) {
|
||||
// Write LFS cache for this object, if cache path is accessible.
|
||||
|
|
|
@ -75,11 +75,7 @@ export default async function populateCache(
|
|||
total: 10,
|
||||
});
|
||||
|
||||
await downloadBlobFromPointer(
|
||||
fs,
|
||||
{ http, url: remoteURL },
|
||||
pointer
|
||||
);
|
||||
await downloadBlobFromPointer(fs, remoteURL, {}, pointer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue