From 93ae6f9e114a25a538d170f579766e25139da763 Mon Sep 17 00:00:00 2001 From: cyhhao Date: Thu, 8 Dec 2022 12:15:29 +0800 Subject: [PATCH] rm level&fix bug --- package.json | 18 ++++-- src/git/git.ts | 95 +++++++++++++------------------ src/index.ts | 6 +- src/storage/ETHStorage.ts | 34 +++++++---- yarn.lock | 116 +------------------------------------- 5 files changed, 82 insertions(+), 187 deletions(-) diff --git a/package.json b/package.json index 48619c0..4eb2548 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,19 @@ "files": [ "dist/" ], + "bin": "dist/index.js", + "pkg": { + "targets": [ + "node18-macos-arm64", + "node18-macos-x64", + "node18-linux-x64", + "node18-win-x64" + ], + "outputPath": "bin" + }, "license": "MIT", "dependencies": { "debug": "^4.3.4", - "level": "^8.0.0", "rxjs": "^6.6.3", "rxjs-async-map": "^0.2.0", "rxjs-stream": "^3.2.1", @@ -17,8 +26,9 @@ }, "scripts": { "build": "yarn run clean && tsc", - "install-mac": "yarn pkg && cp ./bin/index-macos /usr/local/bin/git-remote-git3", - "pkg": "yarn run build && pkg ./dist/index.js --out-path ./bin", + "install-mac": "yarn pkg && cp ./bin/git-remote-git3-macos-x64 /usr/local/bin/git-remote-git3", + "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" }, "devDependencies": { @@ -27,4 +37,4 @@ "ts-node": "^10.9.1", "typescript": "^4.9.3" } -} +} \ No newline at end of file diff --git a/src/git/git.ts b/src/git/git.ts index 6025e24..8db908d 100644 --- a/src/git/git.ts +++ b/src/git/git.ts @@ -1,7 +1,7 @@ import { log } from './log'; import { superpathjoin as join } from 'superpathjoin'; import { ApiBaseParams } from './git-remote-helper'; -import { Storage } from '../storage/storage'; +import { Ref, Storage } from '../storage/storage'; class Git { gitdir: string remoteName: string @@ -17,86 +17,67 @@ class Git { async do_list(forPush: boolean) { let outLines: string[] = [] - let refs = this.get_refs(forPush) + let refs = await this.get_refs(forPush) for (let ref of refs) { outLines.push(`${ref.sha} ${ref.ref}`) } 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") if (head) { - outLines.push(`@${head[1]} HEAD`) + outLines.push(`@${head} HEAD`) } else { 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) { path = join(this.gitdir, path) log("fetching symbolic ref: ", path) try { - // const [status, resp] = await this.storage.download(path); - // let ref = resp.content.toString("utf8"); - // ref = ref.slice("ref: ".length).trim(); - // const rev = meta.rev; - return []; + const [_, resp] = await this.storage.download(path) + let ref = resp.toString() + ref = ref.slice("ref: ".length).trim(); + return ref; } catch (e) { return null; } } - get_refs(forPush: boolean): { sha: string, ref: string }[] { - // try { - // const loc = join(this.gitdir, "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 [] + async get_refs(forPush: boolean): Promise { + let refs = await this.storage.listRefs() + return refs } + + } export default Git \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 412e1a0..6f14e9f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -31,6 +31,7 @@ GitRemoteHelper({ forPush: boolean; }) => { log('list log', p) + return await git.do_list(p.forPush) }, /** @@ -42,6 +43,7 @@ GitRemoteHelper({ remoteUrl: string; refs: { ref: string; oid: string }[]; }) => { + log("fetch", p) return '\n\n'; }, /** @@ -57,9 +59,9 @@ GitRemoteHelper({ force: boolean; }[]; }) => { - log("push", p) - return '\n'; + return await git.do_push(p.refs) + return '\n\n'; }, }, }).catch((error: any) => { diff --git a/src/storage/ETHStorage.ts b/src/storage/ETHStorage.ts index 8eb54fb..e1aaa9f 100644 --- a/src/storage/ETHStorage.ts +++ b/src/storage/ETHStorage.ts @@ -1,6 +1,10 @@ -import { Level } from "level"; +import fs from 'fs' 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 { repoURI: string; @@ -9,11 +13,21 @@ export class ETHStorage implements Storage { this.repoURI = repoURI } - listRefs(): Promise { - throw new Error("Method not implemented."); + async listRefs(): Promise { + 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 { - throw new Error("Method not implemented."); + async addRefs(refs: Ref[]): Promise { + fs.writeFileSync(join(mockPath, "refs.json"), JSON.stringify(refs)) + return Status.SUCCEED } delRefs(refs: Ref[]): Promise { throw new Error("Method not implemented."); @@ -23,15 +37,13 @@ export class ETHStorage implements Storage { throw new Error("Method not implemented."); } async download(path: string): Promise<[Status, Buffer]> { - const prefix = "file:" - let value = await db.get(prefix + path) - return [Status.SUCCEED, Buffer.from(value)] + let buffer = fs.readFileSync(join(mockPath, path)) + return [Status.SUCCEED, buffer] } async upload(path: string, file: Buffer): Promise { - const prefix = "file:" - await db.put(prefix + path, file.toString()) + fs.writeFileSync(join(mockPath, path), file) return Status.SUCCEED } } diff --git a/yarn.lock b/yarn.lock index a847f21..b9f9eb9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -64,19 +64,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc" 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: version "8.2.0" 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" 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: version "1.1.1" 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" 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: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 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: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 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: version "0.2.0" 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== typescript@^4.9.3: - version "4.9.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" - integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== + version "4.9.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" + integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== v8-compile-cache-lib@^3.0.1: version "3.0.1"