rm level&fix bug

master
cyhhao 2 years ago
parent e699611000
commit 93ae6f9e11

@ -6,10 +6,19 @@
"files": [ "files": [
"dist/" "dist/"
], ],
"bin": "dist/index.js",
"pkg": {
"targets": [
"node18-macos-arm64",
"node18-macos-x64",
"node18-linux-x64",
"node18-win-x64"
],
"outputPath": "bin"
},
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"debug": "^4.3.4", "debug": "^4.3.4",
"level": "^8.0.0",
"rxjs": "^6.6.3", "rxjs": "^6.6.3",
"rxjs-async-map": "^0.2.0", "rxjs-async-map": "^0.2.0",
"rxjs-stream": "^3.2.1", "rxjs-stream": "^3.2.1",
@ -17,8 +26,9 @@
}, },
"scripts": { "scripts": {
"build": "yarn run clean && tsc", "build": "yarn run clean && tsc",
"install-mac": "yarn pkg && cp ./bin/index-macos /usr/local/bin/git-remote-git3", "install-mac": "yarn pkg && cp ./bin/git-remote-git3-macos-x64 /usr/local/bin/git-remote-git3",
"pkg": "yarn run build && pkg ./dist/index.js --out-path ./bin", "install-mac-arm": "yarn pkg && cp ./bin/git-remote-git3-macos-arm64 /usr/local/bin/git-remote-git3",
"pkg": "yarn run build && pkg .",
"clean": "rm -rf ./dist ./bin" "clean": "rm -rf ./dist ./bin"
}, },
"devDependencies": { "devDependencies": {

@ -1,7 +1,7 @@
import { log } from './log'; import { log } from './log';
import { superpathjoin as join } from 'superpathjoin'; import { superpathjoin as join } from 'superpathjoin';
import { ApiBaseParams } from './git-remote-helper'; import { ApiBaseParams } from './git-remote-helper';
import { Storage } from '../storage/storage'; import { Ref, Storage } from '../storage/storage';
class Git { class Git {
gitdir: string gitdir: string
remoteName: string remoteName: string
@ -17,86 +17,67 @@ class Git {
async do_list(forPush: boolean) { async do_list(forPush: boolean) {
let outLines: string[] = [] let outLines: string[] = []
let refs = this.get_refs(forPush) let refs = await this.get_refs(forPush)
for (let ref of refs) { for (let ref of refs) {
outLines.push(`${ref.sha} ${ref.ref}`) outLines.push(`${ref.sha} ${ref.ref}`)
} }
if (!forPush) { if (!forPush) {
// head = self.read_symbolic_ref("HEAD")
// if head:
// _write("@%s HEAD" % head[1])
// else:
// self._trace("no default branch on remote", Level.INFO)
// convert to typescript
let head = await this.read_symbolic_ref("HEAD") let head = await this.read_symbolic_ref("HEAD")
if (head) { if (head) {
outLines.push(`@${head[1]} HEAD`) outLines.push(`@${head} HEAD`)
} else { } else {
log("no default branch on remote") log("no default branch on remote")
} }
} }
return "" return outLines.join("\n") + "\n"
} }
async do_fetch(refs: { ref: string; oid: string }[]) {
}
async do_push(refs: {
src: string;
dst: string;
force: boolean;
}[]) {
// let remoteHead = null
for (let ref of refs) {
if (ref.src == "") {
this.storage.delete(ref.dst)
} else {
this.push(ref.src, ref.dst)
}
}
return '\n\n'
}
async push(src: string, dst: string) {
}
async read_symbolic_ref(path: string) { async read_symbolic_ref(path: string) {
path = join(this.gitdir, path) path = join(this.gitdir, path)
log("fetching symbolic ref: ", path) log("fetching symbolic ref: ", path)
try { try {
// const [status, resp] = await this.storage.download(path); const [_, resp] = await this.storage.download(path)
// let ref = resp.content.toString("utf8"); let ref = resp.toString()
// ref = ref.slice("ref: ".length).trim(); ref = ref.slice("ref: ".length).trim();
// const rev = meta.rev; return ref;
return [];
} catch (e) { } catch (e) {
return null; return null;
} }
} }
get_refs(forPush: boolean): { sha: string, ref: string }[] { async get_refs(forPush: boolean): Promise<Ref[]> {
// try { let refs = await this.storage.listRefs()
// const loc = join(this.gitdir, "refs") return refs
// let res = this._connection.files_list_folder(loc, recursive = true)
// let files = res.entries;
// while (res.has_more) {
// res = this._connection.files_list_folder_continue(res.cursor);
// files.extend(res.entries);
// }
// } catch (e) {
// if (e instanceof Error) {
// throw e;
// }
// if (forPush) {
// // this._first_push = true;
// } else {
// log("repository is empty")
// }
// return [];
// }
// files = files.filter((i) => i instanceof dropbox.files.FileMetadata);
// const paths = files.map((i) => i.path_lower);
// if (!paths.length) {
// return [];
// }
// let revs: string[] = [];
// let data: Uint8Array[] = [];
// for (let [rev, datum] of this._get_files(paths)) {
// revs.push(rev);
// data.push(datum);
// }
// const refs = [];
// for (let [path, rev, datum] of zip(paths, revs, data)) {
// const name = this._ref_name_from_path(path);
// const sha = datum.decode("utf8").strip();
// this._refs[name] = [rev, sha];
// refs.push([sha, name]);
// }
// return refs;
return []
} }
} }
export default Git export default Git

@ -31,6 +31,7 @@ GitRemoteHelper({
forPush: boolean; forPush: boolean;
}) => { }) => {
log('list log', p) log('list log', p)
return await git.do_list(p.forPush) return await git.do_list(p.forPush)
}, },
/** /**
@ -42,6 +43,7 @@ GitRemoteHelper({
remoteUrl: string; remoteUrl: string;
refs: { ref: string; oid: string }[]; refs: { ref: string; oid: string }[];
}) => { }) => {
log("fetch", p)
return '\n\n'; return '\n\n';
}, },
/** /**
@ -57,9 +59,9 @@ GitRemoteHelper({
force: boolean; force: boolean;
}[]; }[];
}) => { }) => {
log("push", p) log("push", p)
return '\n'; return await git.do_push(p.refs)
return '\n\n';
}, },
}, },
}).catch((error: any) => { }).catch((error: any) => {

@ -1,6 +1,10 @@
import { Level } from "level"; import fs from 'fs'
import { Ref, Status, Storage } from "./storage"; import { Ref, Status, Storage } from "./storage";
const db = new Level('mock') import { superpathjoin as join } from 'superpathjoin';
const mockPath = process.env.HOME + "/.git3/mock"
fs.mkdirSync(mockPath, { recursive: true })
const log = console.error
log("mock path", mockPath)
export class ETHStorage implements Storage { export class ETHStorage implements Storage {
repoURI: string; repoURI: string;
@ -9,11 +13,21 @@ export class ETHStorage implements Storage {
this.repoURI = repoURI this.repoURI = repoURI
} }
listRefs(): Promise<Ref[]> { async listRefs(): Promise<Ref[]> {
throw new Error("Method not implemented."); try {
let refsJson = fs.readFileSync(join(mockPath, "refs.json"))
return JSON.parse(refsJson.toString())
}
catch (e) {
log("no refs found")
return []
}
} }
addRefs(refs: Ref[]): Promise<Status> { async addRefs(refs: Ref[]): Promise<Status> {
throw new Error("Method not implemented."); fs.writeFileSync(join(mockPath, "refs.json"), JSON.stringify(refs))
return Status.SUCCEED
} }
delRefs(refs: Ref[]): Promise<Status> { delRefs(refs: Ref[]): Promise<Status> {
throw new Error("Method not implemented."); throw new Error("Method not implemented.");
@ -23,15 +37,13 @@ export class ETHStorage implements Storage {
throw new Error("Method not implemented."); throw new Error("Method not implemented.");
} }
async download(path: string): Promise<[Status, Buffer]> { async download(path: string): Promise<[Status, Buffer]> {
const prefix = "file:" let buffer = fs.readFileSync(join(mockPath, path))
let value = await db.get(prefix + path) return [Status.SUCCEED, buffer]
return [Status.SUCCEED, Buffer.from(value)]
} }
async upload(path: string, file: Buffer): Promise<Status> { async upload(path: string, file: Buffer): Promise<Status> {
const prefix = "file:" fs.writeFileSync(join(mockPath, path), file)
await db.put(prefix + path, file.toString())
return Status.SUCCEED return Status.SUCCEED
} }
} }

@ -64,19 +64,6 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc"
integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g== integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g==
abstract-level@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741"
integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==
dependencies:
buffer "^6.0.3"
catering "^2.1.0"
is-buffer "^2.0.5"
level-supports "^4.0.0"
level-transcoder "^1.0.1"
module-error "^1.0.1"
queue-microtask "^1.2.3"
acorn-walk@^8.1.1: acorn-walk@^8.1.1:
version "8.2.0" version "8.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
@ -92,45 +79,6 @@ arg@^4.1.0:
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
browser-level@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011"
integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==
dependencies:
abstract-level "^1.0.2"
catering "^2.1.1"
module-error "^1.0.2"
run-parallel-limit "^1.1.0"
buffer@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
dependencies:
base64-js "^1.3.1"
ieee754 "^1.2.1"
catering@^2.1.0, catering@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510"
integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==
classic-level@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.2.0.tgz#2d52bdec8e7a27f534e67fdeb890abef3e643c27"
integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==
dependencies:
abstract-level "^1.0.2"
catering "^2.1.0"
module-error "^1.0.1"
napi-macros "~2.0.0"
node-gyp-build "^4.3.0"
create-require@^1.1.0: create-require@^1.1.0:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
@ -148,74 +96,16 @@ diff@^4.0.1:
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
is-buffer@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
level-supports@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a"
integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==
level-transcoder@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c"
integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==
dependencies:
buffer "^6.0.3"
module-error "^1.0.1"
level@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394"
integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==
dependencies:
browser-level "^1.0.1"
classic-level "^1.2.0"
make-error@^1.1.1: make-error@^1.1.1:
version "1.3.6" version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
module-error@^1.0.1, module-error@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86"
integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==
ms@2.1.2: ms@2.1.2:
version "2.1.2" version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
napi-macros@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b"
integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==
node-gyp-build@^4.3.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40"
integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==
queue-microtask@^1.2.2, queue-microtask@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
run-parallel-limit@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba"
integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==
dependencies:
queue-microtask "^1.2.2"
rxjs-async-map@^0.2.0: rxjs-async-map@^0.2.0:
version "0.2.0" version "0.2.0"
resolved "https://registry.yarnpkg.com/rxjs-async-map/-/rxjs-async-map-0.2.0.tgz#5af3d069e85983602afb8f2091bc67bcc4306ac6" resolved "https://registry.yarnpkg.com/rxjs-async-map/-/rxjs-async-map-0.2.0.tgz#5af3d069e85983602afb8f2091bc67bcc4306ac6"
@ -265,9 +155,9 @@ tslib@^1.9.0:
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
typescript@^4.9.3: typescript@^4.9.3:
version "4.9.3" version "4.9.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78"
integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==
v8-compile-cache-lib@^3.0.1: v8-compile-cache-lib@^3.0.1:
version "3.0.1" version "3.0.1"

Loading…
Cancel
Save