pushwork 2.0.0-a.sub.0 → 2.0.0-preview
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/branches.d.ts +19 -0
- package/dist/branches.d.ts.map +1 -0
- package/dist/branches.js +111 -0
- package/dist/branches.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +238 -272
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +84 -0
- package/dist/config.js.map +1 -0
- package/dist/fs-tree.d.ts +6 -0
- package/dist/fs-tree.d.ts.map +1 -0
- package/dist/fs-tree.js +99 -0
- package/dist/fs-tree.js.map +1 -0
- package/dist/ignore.d.ts +6 -0
- package/dist/ignore.d.ts.map +1 -0
- package/dist/ignore.js +74 -0
- package/dist/ignore.js.map +1 -0
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -4
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +3 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +14 -0
- package/dist/log.js.map +1 -0
- package/dist/pushwork.d.ts +115 -0
- package/dist/pushwork.d.ts.map +1 -0
- package/dist/pushwork.js +918 -0
- package/dist/pushwork.js.map +1 -0
- package/dist/repo.d.ts +14 -0
- package/dist/repo.d.ts.map +1 -0
- package/dist/repo.js +60 -0
- package/dist/repo.js.map +1 -0
- package/dist/shapes/custom.d.ts +3 -0
- package/dist/shapes/custom.d.ts.map +1 -0
- package/dist/shapes/custom.js +57 -0
- package/dist/shapes/custom.js.map +1 -0
- package/dist/shapes/file.d.ts +20 -0
- package/dist/shapes/file.d.ts.map +1 -0
- package/dist/shapes/file.js +140 -0
- package/dist/shapes/file.js.map +1 -0
- package/dist/shapes/index.d.ts +10 -0
- package/dist/shapes/index.d.ts.map +1 -0
- package/dist/shapes/index.js +35 -0
- package/dist/shapes/index.js.map +1 -0
- package/dist/shapes/patchwork-folder.d.ts +3 -0
- package/dist/shapes/patchwork-folder.d.ts.map +1 -0
- package/dist/shapes/patchwork-folder.js +160 -0
- package/dist/shapes/patchwork-folder.js.map +1 -0
- package/dist/shapes/types.d.ts +37 -0
- package/dist/shapes/types.d.ts.map +1 -0
- package/dist/shapes/types.js +52 -0
- package/dist/shapes/types.js.map +1 -0
- package/dist/shapes/vfs.d.ts +3 -0
- package/dist/shapes/vfs.d.ts.map +1 -0
- package/dist/shapes/vfs.js +88 -0
- package/dist/shapes/vfs.js.map +1 -0
- package/dist/stash.d.ts +23 -0
- package/dist/stash.d.ts.map +1 -0
- package/dist/stash.js +118 -0
- package/dist/stash.js.map +1 -0
- package/flake.lock +128 -0
- package/flake.nix +66 -0
- package/package.json +15 -48
- package/patches/@automerge__automerge-repo@2.6.0-subduction.15.patch +26 -0
- package/pnpm-workspace.yaml +5 -0
- package/src/branches.ts +93 -0
- package/src/cli.ts +258 -408
- package/src/config.ts +64 -0
- package/src/fs-tree.ts +70 -0
- package/src/ignore.ts +33 -0
- package/src/index.ts +38 -4
- package/src/log.ts +8 -0
- package/src/pushwork.ts +1055 -0
- package/src/repo.ts +76 -0
- package/src/shapes/custom.ts +29 -0
- package/src/shapes/file.ts +115 -0
- package/src/shapes/index.ts +19 -0
- package/src/shapes/patchwork-folder.ts +156 -0
- package/src/shapes/types.ts +79 -0
- package/src/shapes/vfs.ts +93 -0
- package/src/stash.ts +106 -0
- package/test/integration/branches.test.ts +389 -0
- package/test/integration/pushwork.test.ts +547 -0
- package/test/setup.ts +29 -0
- package/test/unit/doc-shape.test.ts +612 -0
- package/tsconfig.json +2 -3
- package/vitest.config.ts +14 -0
- package/ARCHITECTURE-ACCORDING-TO-CLAUDE.md +0 -248
- package/CLAUDE.md +0 -141
- package/README.md +0 -221
- package/babel.config.js +0 -5
- package/dist/cli/commands.d.ts +0 -71
- package/dist/cli/commands.d.ts.map +0 -1
- package/dist/cli/commands.js +0 -794
- package/dist/cli/commands.js.map +0 -1
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -19
- package/dist/cli/index.js.map +0 -1
- package/dist/commands.d.ts +0 -61
- package/dist/commands.d.ts.map +0 -1
- package/dist/commands.js +0 -861
- package/dist/commands.js.map +0 -1
- package/dist/config/index.d.ts +0 -71
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -314
- package/dist/config/index.js.map +0 -1
- package/dist/core/change-detection.d.ts +0 -80
- package/dist/core/change-detection.d.ts.map +0 -1
- package/dist/core/change-detection.js +0 -523
- package/dist/core/change-detection.js.map +0 -1
- package/dist/core/config.d.ts +0 -81
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/config.js +0 -258
- package/dist/core/config.js.map +0 -1
- package/dist/core/index.d.ts +0 -6
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -6
- package/dist/core/index.js.map +0 -1
- package/dist/core/move-detection.d.ts +0 -34
- package/dist/core/move-detection.d.ts.map +0 -1
- package/dist/core/move-detection.js +0 -121
- package/dist/core/move-detection.js.map +0 -1
- package/dist/core/snapshot.d.ts +0 -105
- package/dist/core/snapshot.d.ts.map +0 -1
- package/dist/core/snapshot.js +0 -217
- package/dist/core/snapshot.js.map +0 -1
- package/dist/core/sync-engine.d.ts +0 -151
- package/dist/core/sync-engine.d.ts.map +0 -1
- package/dist/core/sync-engine.js +0 -1346
- package/dist/core/sync-engine.js.map +0 -1
- package/dist/types/config.d.ts +0 -99
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -5
- package/dist/types/config.js.map +0 -1
- package/dist/types/documents.d.ts +0 -88
- package/dist/types/documents.d.ts.map +0 -1
- package/dist/types/documents.js +0 -20
- package/dist/types/documents.js.map +0 -1
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -4
- package/dist/types/index.js.map +0 -1
- package/dist/types/snapshot.d.ts +0 -64
- package/dist/types/snapshot.d.ts.map +0 -1
- package/dist/types/snapshot.js +0 -2
- package/dist/types/snapshot.js.map +0 -1
- package/dist/utils/content-similarity.d.ts +0 -53
- package/dist/utils/content-similarity.d.ts.map +0 -1
- package/dist/utils/content-similarity.js +0 -155
- package/dist/utils/content-similarity.js.map +0 -1
- package/dist/utils/content.d.ts +0 -10
- package/dist/utils/content.d.ts.map +0 -1
- package/dist/utils/content.js +0 -31
- package/dist/utils/content.js.map +0 -1
- package/dist/utils/directory.d.ts +0 -24
- package/dist/utils/directory.d.ts.map +0 -1
- package/dist/utils/directory.js +0 -52
- package/dist/utils/directory.js.map +0 -1
- package/dist/utils/fs.d.ts +0 -74
- package/dist/utils/fs.d.ts.map +0 -1
- package/dist/utils/fs.js +0 -248
- package/dist/utils/fs.js.map +0 -1
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -5
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/mime-types.d.ts +0 -13
- package/dist/utils/mime-types.d.ts.map +0 -1
- package/dist/utils/mime-types.js +0 -209
- package/dist/utils/mime-types.js.map +0 -1
- package/dist/utils/network-sync.d.ts +0 -36
- package/dist/utils/network-sync.d.ts.map +0 -1
- package/dist/utils/network-sync.js +0 -250
- package/dist/utils/network-sync.js.map +0 -1
- package/dist/utils/node-polyfills.d.ts +0 -9
- package/dist/utils/node-polyfills.d.ts.map +0 -1
- package/dist/utils/node-polyfills.js +0 -9
- package/dist/utils/node-polyfills.js.map +0 -1
- package/dist/utils/output.d.ts +0 -129
- package/dist/utils/output.d.ts.map +0 -1
- package/dist/utils/output.js +0 -368
- package/dist/utils/output.js.map +0 -1
- package/dist/utils/repo-factory.d.ts +0 -13
- package/dist/utils/repo-factory.d.ts.map +0 -1
- package/dist/utils/repo-factory.js +0 -46
- package/dist/utils/repo-factory.js.map +0 -1
- package/dist/utils/string-similarity.d.ts +0 -14
- package/dist/utils/string-similarity.d.ts.map +0 -1
- package/dist/utils/string-similarity.js +0 -39
- package/dist/utils/string-similarity.js.map +0 -1
- package/dist/utils/text-diff.d.ts +0 -37
- package/dist/utils/text-diff.d.ts.map +0 -1
- package/dist/utils/text-diff.js +0 -93
- package/dist/utils/text-diff.js.map +0 -1
- package/dist/utils/trace.d.ts +0 -19
- package/dist/utils/trace.d.ts.map +0 -1
- package/dist/utils/trace.js +0 -63
- package/dist/utils/trace.js.map +0 -1
- package/src/commands.ts +0 -1134
- package/src/core/change-detection.ts +0 -712
- package/src/core/config.ts +0 -313
- package/src/core/index.ts +0 -5
- package/src/core/move-detection.ts +0 -169
- package/src/core/snapshot.ts +0 -275
- package/src/core/sync-engine.ts +0 -1758
- package/src/types/config.ts +0 -111
- package/src/types/documents.ts +0 -91
- package/src/types/index.ts +0 -3
- package/src/types/snapshot.ts +0 -67
- package/src/utils/content.ts +0 -34
- package/src/utils/directory.ts +0 -73
- package/src/utils/fs.ts +0 -297
- package/src/utils/index.ts +0 -4
- package/src/utils/mime-types.ts +0 -244
- package/src/utils/network-sync.ts +0 -319
- package/src/utils/node-polyfills.ts +0 -8
- package/src/utils/output.ts +0 -450
- package/src/utils/repo-factory.ts +0 -73
- package/src/utils/string-similarity.ts +0 -54
- package/src/utils/text-diff.ts +0 -101
- package/src/utils/trace.ts +0 -70
- package/test/integration/README.md +0 -328
- package/test/integration/clone-test.sh +0 -310
- package/test/integration/conflict-resolution-test.sh +0 -309
- package/test/integration/debug-both-nested.sh +0 -74
- package/test/integration/debug-concurrent-nested.sh +0 -87
- package/test/integration/debug-nested.sh +0 -73
- package/test/integration/deletion-behavior-test.sh +0 -487
- package/test/integration/deletion-sync-test-simple.sh +0 -193
- package/test/integration/deletion-sync-test.sh +0 -297
- package/test/integration/exclude-patterns.test.ts +0 -144
- package/test/integration/full-integration-test.sh +0 -363
- package/test/integration/fuzzer.test.ts +0 -818
- package/test/integration/in-memory-sync.test.ts +0 -830
- package/test/integration/init-sync.test.ts +0 -89
- package/test/integration/manual-sync-test.sh +0 -84
- package/test/integration/sync-deletion.test.ts +0 -280
- package/test/integration/sync-flow.test.ts +0 -291
- package/test/jest.setup.ts +0 -34
- package/test/run-tests.sh +0 -225
- package/test/unit/deletion-behavior.test.ts +0 -249
- package/test/unit/enhanced-mime-detection.test.ts +0 -244
- package/test/unit/snapshot.test.ts +0 -404
- package/test/unit/sync-convergence.test.ts +0 -298
- package/test/unit/sync-timing.test.ts +0 -134
- package/test/unit/utils.test.ts +0 -366
package/package.json
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pushwork",
|
|
3
|
-
"version": "2.0.0-
|
|
3
|
+
"version": "2.0.0-preview",
|
|
4
4
|
"description": "Bidirectional directory synchronization using Automerge CRDTs",
|
|
5
|
-
"type": "module",
|
|
6
5
|
"main": "dist/index.js",
|
|
7
6
|
"exports": {
|
|
8
7
|
".": "./dist/index.js"
|
|
@@ -10,7 +9,6 @@
|
|
|
10
9
|
"bin": {
|
|
11
10
|
"pushwork": "./dist/cli.js"
|
|
12
11
|
},
|
|
13
|
-
"packageManager": "pnpm@8.15.0",
|
|
14
12
|
"engines": {
|
|
15
13
|
"node": ">=24.0.0",
|
|
16
14
|
"pnpm": ">=8.0.0"
|
|
@@ -25,72 +23,41 @@
|
|
|
25
23
|
"author": "Peter van Hardenberg",
|
|
26
24
|
"license": "MIT",
|
|
27
25
|
"dependencies": {
|
|
28
|
-
"@automerge/automerge": "^3.2.
|
|
29
|
-
"@automerge/automerge-repo": "2.6.0-subduction.
|
|
30
|
-
"@automerge/automerge-repo-
|
|
31
|
-
"@automerge/automerge-repo-
|
|
32
|
-
"@automerge/automerge-subduction": "
|
|
26
|
+
"@automerge/automerge": "^3.2.6",
|
|
27
|
+
"@automerge/automerge-repo": "2.6.0-subduction.15",
|
|
28
|
+
"@automerge/automerge-repo-network-websocket": "2.6.0-subduction.15",
|
|
29
|
+
"@automerge/automerge-repo-storage-nodefs": "2.6.0-subduction.15",
|
|
30
|
+
"@automerge/automerge-subduction": "0.8.1",
|
|
33
31
|
"@commander-js/extra-typings": "^14.0.0",
|
|
34
32
|
"chalk": "^5.3.0",
|
|
35
33
|
"commander": "^14.0.2",
|
|
34
|
+
"debug": "^4.4.3",
|
|
36
35
|
"diff": "^8.0.2",
|
|
37
|
-
"fake-indexeddb": "^6.2.5",
|
|
38
36
|
"glob": "^10.3.0",
|
|
39
37
|
"ignore": "^5.3.0",
|
|
40
38
|
"mime-types": "^2.1.35",
|
|
41
39
|
"ora": "^7.0.1"
|
|
42
40
|
},
|
|
43
41
|
"devDependencies": {
|
|
44
|
-
"@
|
|
45
|
-
"@babel/preset-env": "^7.28.6",
|
|
42
|
+
"@types/debug": "^4.1.13",
|
|
46
43
|
"@types/diff": "^5.0.3",
|
|
47
|
-
"@types/jest": "^29.5.0",
|
|
48
44
|
"@types/mime-types": "^2.1.1",
|
|
49
45
|
"@types/node": "^20.0.0",
|
|
50
46
|
"@types/tmp": "^0.2.4",
|
|
51
|
-
"
|
|
47
|
+
"@vitest/coverage-v8": "^2.1.0",
|
|
52
48
|
"fast-check": "^4.3.0",
|
|
53
|
-
"jest": "^29.7.0",
|
|
54
49
|
"tmp": "^0.2.1",
|
|
55
|
-
"ts-jest": "^29.1.0",
|
|
56
50
|
"tsx": "^4.19.2",
|
|
57
|
-
"typescript": "^5.2.0"
|
|
58
|
-
|
|
59
|
-
"jest": {
|
|
60
|
-
"preset": "ts-jest",
|
|
61
|
-
"testEnvironment": "node",
|
|
62
|
-
"roots": [
|
|
63
|
-
"<rootDir>/src",
|
|
64
|
-
"<rootDir>/test"
|
|
65
|
-
],
|
|
66
|
-
"testMatch": [
|
|
67
|
-
"**/__tests__/**/*.ts",
|
|
68
|
-
"**/*.(test|spec).ts"
|
|
69
|
-
],
|
|
70
|
-
"collectCoverageFrom": [
|
|
71
|
-
"src/**/*.ts",
|
|
72
|
-
"!src/**/*.d.ts"
|
|
73
|
-
],
|
|
74
|
-
"setupFilesAfterEnv": [
|
|
75
|
-
"<rootDir>/test/jest.setup.ts"
|
|
76
|
-
],
|
|
77
|
-
"maxWorkers": "75%",
|
|
78
|
-
"maxConcurrency": 10,
|
|
79
|
-
"transformIgnorePatterns": [
|
|
80
|
-
"node_modules/(?!.*@automerge)"
|
|
81
|
-
],
|
|
82
|
-
"transform": {
|
|
83
|
-
"^.+\\.tsx?$": "ts-jest",
|
|
84
|
-
"^.+\\.jsx?$": "babel-jest"
|
|
85
|
-
}
|
|
51
|
+
"typescript": "^5.2.0",
|
|
52
|
+
"vitest": "^2.1.0"
|
|
86
53
|
},
|
|
87
54
|
"scripts": {
|
|
88
55
|
"build": "tsc",
|
|
89
56
|
"dev": "tsc --watch",
|
|
90
|
-
"test": "
|
|
91
|
-
"test:bail": "
|
|
92
|
-
"test:watch": "
|
|
93
|
-
"test:coverage": "
|
|
57
|
+
"test": "vitest run",
|
|
58
|
+
"test:bail": "vitest run --bail 1",
|
|
59
|
+
"test:watch": "vitest",
|
|
60
|
+
"test:coverage": "vitest run --coverage",
|
|
94
61
|
"lint": "eslint src --ext .ts",
|
|
95
62
|
"lint:fix": "eslint src --ext .ts --fix",
|
|
96
63
|
"clean": "rm -rf dist",
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
diff --git a/dist/helpers/throttle.js b/dist/helpers/throttle.js
|
|
2
|
+
index 92f3cc8ed8b0c870aa9f52fa6e3605d736364534..8822b477e3800f163b58a153e747f2a7090c0d38 100644
|
|
3
|
+
--- a/dist/helpers/throttle.js
|
|
4
|
+
+++ b/dist/helpers/throttle.js
|
|
5
|
+
@@ -31,7 +31,7 @@ export const throttle = (fn, delay) => {
|
|
6
|
+
let pendingArgs;
|
|
7
|
+
const throttled = function (...args) {
|
|
8
|
+
pendingArgs = args;
|
|
9
|
+
- wait = lastCall + delay - Date.now();
|
|
10
|
+
+ wait = Math.max(0, lastCall + delay - Date.now());
|
|
11
|
+
clearTimeout(timeout);
|
|
12
|
+
timeout = setTimeout(() => {
|
|
13
|
+
timeout = undefined;
|
|
14
|
+
diff --git a/src/helpers/throttle.ts b/src/helpers/throttle.ts
|
|
15
|
+
index a0933cdc809ed9944f2129c943ac0c9e90bcd195..43050dc0375031bc4490162a7314e3b3541a3f40 100644
|
|
16
|
+
--- a/src/helpers/throttle.ts
|
|
17
|
+
+++ b/src/helpers/throttle.ts
|
|
18
|
+
@@ -42,7 +42,7 @@ export const throttle = <F extends (...args: any[]) => any>(
|
|
19
|
+
|
|
20
|
+
const throttled = function (...args: Parameters<F>) {
|
|
21
|
+
pendingArgs = args
|
|
22
|
+
- wait = lastCall + delay - Date.now()
|
|
23
|
+
+ wait = Math.max(0, lastCall + delay - Date.now())
|
|
24
|
+
clearTimeout(timeout)
|
|
25
|
+
timeout = setTimeout(() => {
|
|
26
|
+
timeout = undefined
|
package/src/branches.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import * as fs from "fs/promises";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import {
|
|
4
|
+
type AutomergeUrl,
|
|
5
|
+
type DocHandle,
|
|
6
|
+
type Repo,
|
|
7
|
+
} from "@automerge/automerge-repo";
|
|
8
|
+
import { log } from "./log.js";
|
|
9
|
+
|
|
10
|
+
const dlog = log("branches");
|
|
11
|
+
|
|
12
|
+
export const META = "@patchwork";
|
|
13
|
+
export const DEFAULT_BRANCH = "default";
|
|
14
|
+
|
|
15
|
+
export type BranchesDoc = {
|
|
16
|
+
"@patchwork": { type: "branches" };
|
|
17
|
+
branches: { [name: string]: AutomergeUrl };
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const isBranchesDoc = (doc: unknown): doc is BranchesDoc => {
|
|
21
|
+
if (!doc || typeof doc !== "object") return false;
|
|
22
|
+
const meta = (doc as Record<string, unknown>)[META];
|
|
23
|
+
return (
|
|
24
|
+
!!meta &&
|
|
25
|
+
typeof meta === "object" &&
|
|
26
|
+
(meta as Record<string, unknown>).type === "branches"
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export function detectDocType(
|
|
31
|
+
doc: unknown,
|
|
32
|
+
): "branches" | "folder" | "directory" | "unknown" {
|
|
33
|
+
if (!doc || typeof doc !== "object") return "unknown";
|
|
34
|
+
const meta = (doc as Record<string, unknown>)[META];
|
|
35
|
+
if (!meta || typeof meta !== "object") return "unknown";
|
|
36
|
+
const t = (meta as Record<string, unknown>).type;
|
|
37
|
+
if (t === "branches" || t === "folder" || t === "directory") return t;
|
|
38
|
+
return "unknown";
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export async function resolveEffectiveRoot(
|
|
42
|
+
repo: Repo,
|
|
43
|
+
rootHandle: DocHandle<unknown>,
|
|
44
|
+
branchName: string | null,
|
|
45
|
+
): Promise<DocHandle<unknown>> {
|
|
46
|
+
const doc = rootHandle.doc();
|
|
47
|
+
if (!isBranchesDoc(doc)) return rootHandle;
|
|
48
|
+
if (!branchName) {
|
|
49
|
+
throw new Error(
|
|
50
|
+
"pushwork repo uses branches but no branch name is set",
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
const url = doc.branches?.[branchName];
|
|
54
|
+
if (!url) {
|
|
55
|
+
throw new Error(
|
|
56
|
+
`branch "${branchName}" not found in branches doc ${rootHandle.url}`,
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
dlog("resolveEffectiveRoot branch=%s → %s", branchName, url);
|
|
60
|
+
return repo.find<unknown>(url);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function listBranchNames(branchesDoc: BranchesDoc): string[] {
|
|
64
|
+
return Object.keys(branchesDoc.branches ?? {}).sort();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const BRANCH_FILE = path.join(".pushwork", "branch");
|
|
68
|
+
|
|
69
|
+
export async function readBranchFile(root: string): Promise<string | null> {
|
|
70
|
+
try {
|
|
71
|
+
const text = await fs.readFile(path.join(root, BRANCH_FILE), "utf8");
|
|
72
|
+
return text.trim() || null;
|
|
73
|
+
} catch (err) {
|
|
74
|
+
if ((err as NodeJS.ErrnoException).code === "ENOENT") return null;
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export async function writeBranchFile(
|
|
80
|
+
root: string,
|
|
81
|
+
branchName: string,
|
|
82
|
+
): Promise<void> {
|
|
83
|
+
await fs.mkdir(path.join(root, ".pushwork"), { recursive: true });
|
|
84
|
+
await fs.writeFile(path.join(root, BRANCH_FILE), branchName + "\n");
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export async function deleteBranchFile(root: string): Promise<void> {
|
|
88
|
+
try {
|
|
89
|
+
await fs.unlink(path.join(root, BRANCH_FILE));
|
|
90
|
+
} catch (err) {
|
|
91
|
+
if ((err as NodeJS.ErrnoException).code !== "ENOENT") throw err;
|
|
92
|
+
}
|
|
93
|
+
}
|