@tinyrack/dotweave 0.42.13 → 0.42.19
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/README.md +6 -2
- package/dist/application.d.ts +0 -3
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +23 -22
- package/dist/application.js.map +1 -1
- package/dist/cli/autocomplete.d.ts +5 -4
- package/dist/cli/autocomplete.d.ts.map +1 -1
- package/dist/cli/autocomplete.js +33 -28
- package/dist/cli/autocomplete.js.map +1 -1
- package/dist/cli/cd.d.ts +2 -2
- package/dist/cli/cd.d.ts.map +1 -1
- package/dist/cli/cd.js +1 -4
- package/dist/cli/cd.js.map +1 -1
- package/dist/cli/doctor.d.ts +2 -2
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +19 -28
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +1 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +9 -15
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/profile/index.d.ts +1 -1
- package/dist/cli/profile/index.d.ts.map +1 -1
- package/dist/cli/profile/list.d.ts +2 -2
- package/dist/cli/profile/list.d.ts.map +1 -1
- package/dist/cli/profile/list.js +13 -23
- package/dist/cli/profile/list.js.map +1 -1
- package/dist/cli/profile/use.d.ts +2 -2
- package/dist/cli/profile/use.d.ts.map +1 -1
- package/dist/cli/profile/use.js +4 -13
- package/dist/cli/profile/use.js.map +1 -1
- package/dist/cli/pull.d.ts +2 -2
- package/dist/cli/pull.d.ts.map +1 -1
- package/dist/cli/pull.js +22 -41
- package/dist/cli/pull.js.map +1 -1
- package/dist/cli/push.d.ts +2 -2
- package/dist/cli/push.d.ts.map +1 -1
- package/dist/cli/push.js +17 -23
- package/dist/cli/push.js.map +1 -1
- package/dist/cli/root-commands.d.ts +9 -10
- package/dist/cli/root-commands.d.ts.map +1 -1
- package/dist/cli/root-commands.js +0 -4
- package/dist/cli/root-commands.js.map +1 -1
- package/dist/cli/shared-flags.d.ts +9 -0
- package/dist/cli/shared-flags.d.ts.map +1 -0
- package/dist/cli/shared-flags.js +8 -0
- package/dist/cli/shared-flags.js.map +1 -0
- package/dist/cli/status.d.ts +2 -2
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +26 -55
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/track.d.ts +2 -2
- package/dist/cli/track.d.ts.map +1 -1
- package/dist/cli/track.js +14 -33
- package/dist/cli/track.js.map +1 -1
- package/dist/cli/untrack.d.ts +2 -2
- package/dist/cli/untrack.d.ts.map +1 -1
- package/dist/cli/untrack.js +5 -14
- package/dist/cli/untrack.js.map +1 -1
- package/dist/config/constants.d.ts +1 -1
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +1 -1
- package/dist/config/constants.js.map +1 -1
- package/dist/config/global-config.d.ts +3 -3
- package/dist/config/global-config.d.ts.map +1 -1
- package/dist/config/global-config.js +7 -8
- package/dist/config/global-config.js.map +1 -1
- package/dist/config/identity-file.d.ts +0 -7
- package/dist/config/identity-file.d.ts.map +1 -1
- package/dist/config/identity-file.js +2 -44
- package/dist/config/identity-file.js.map +1 -1
- package/dist/config/runtime-env.d.ts.map +1 -1
- package/dist/config/runtime-env.js +2 -7
- package/dist/config/runtime-env.js.map +1 -1
- package/dist/config/{sync-entry.d.ts → sync-queries.d.ts} +5 -3
- package/dist/config/sync-queries.d.ts.map +1 -0
- package/dist/config/{sync-entry.js → sync-queries.js} +15 -6
- package/dist/config/sync-queries.js.map +1 -0
- package/dist/config/sync-schema.d.ts +9 -7
- package/dist/config/sync-schema.d.ts.map +1 -1
- package/dist/config/sync-schema.js +53 -18
- package/dist/config/sync-schema.js.map +1 -1
- package/dist/config/xdg.d.ts.map +1 -1
- package/dist/config/xdg.js +15 -34
- package/dist/config/xdg.js.map +1 -1
- package/dist/lib/error.js +1 -1
- package/dist/lib/error.js.map +1 -1
- package/dist/lib/git.d.ts +3 -4
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +7 -48
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/jsonc.d.ts +1 -1
- package/dist/lib/jsonc.d.ts.map +1 -1
- package/dist/lib/jsonc.js +1 -1
- package/dist/lib/jsonc.js.map +1 -1
- package/dist/lib/path.d.ts +3 -16
- package/dist/lib/path.d.ts.map +1 -1
- package/dist/lib/path.js +30 -19
- package/dist/lib/path.js.map +1 -1
- package/dist/lib/string.d.ts +1 -4
- package/dist/lib/string.d.ts.map +1 -1
- package/dist/lib/string.js +6 -4
- package/dist/lib/string.js.map +1 -1
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +2 -2
- package/dist/lib/version.js.map +1 -1
- package/dist/services/autocomplete.js +13 -13
- package/dist/services/autocomplete.js.map +1 -1
- package/dist/services/config-file.d.ts +4 -4
- package/dist/services/config-file.d.ts.map +1 -1
- package/dist/services/config-file.js +7 -8
- package/dist/services/config-file.js.map +1 -1
- package/dist/services/doctor.d.ts +1 -4
- package/dist/services/doctor.d.ts.map +1 -1
- package/dist/services/doctor.js +10 -37
- package/dist/services/doctor.js.map +1 -1
- package/dist/services/init.d.ts +1 -5
- package/dist/services/init.d.ts.map +1 -1
- package/dist/services/init.js +25 -59
- package/dist/services/init.js.map +1 -1
- package/dist/services/local-snapshot.d.ts +2 -7
- package/dist/services/local-snapshot.d.ts.map +1 -1
- package/dist/services/local-snapshot.js +12 -35
- package/dist/services/local-snapshot.js.map +1 -1
- package/dist/services/profile.d.ts +0 -4
- package/dist/services/profile.d.ts.map +1 -1
- package/dist/services/profile.js +13 -22
- package/dist/services/profile.js.map +1 -1
- package/dist/services/pull-apply.d.ts +30 -0
- package/dist/services/pull-apply.d.ts.map +1 -0
- package/dist/services/{local-materialization.js → pull-apply.js} +150 -210
- package/dist/services/pull-apply.js.map +1 -0
- package/dist/services/pull.d.ts +7 -10
- package/dist/services/pull.d.ts.map +1 -1
- package/dist/services/pull.js +19 -30
- package/dist/services/pull.js.map +1 -1
- package/dist/services/push.d.ts +4 -7
- package/dist/services/push.d.ts.map +1 -1
- package/dist/services/push.js +15 -38
- package/dist/services/push.js.map +1 -1
- package/dist/services/repo-artifacts.d.ts +5 -6
- package/dist/services/repo-artifacts.d.ts.map +1 -1
- package/dist/services/repo-artifacts.js +21 -60
- package/dist/services/repo-artifacts.js.map +1 -1
- package/dist/services/repo-snapshot.d.ts +2 -3
- package/dist/services/repo-snapshot.d.ts.map +1 -1
- package/dist/services/repo-snapshot.js +14 -26
- package/dist/services/repo-snapshot.js.map +1 -1
- package/dist/services/status.d.ts +1 -5
- package/dist/services/status.d.ts.map +1 -1
- package/dist/services/status.js +7 -17
- package/dist/services/status.js.map +1 -1
- package/dist/services/{runtime.d.ts → sync-context.d.ts} +9 -3
- package/dist/services/sync-context.d.ts.map +1 -0
- package/dist/services/{runtime.js → sync-context.js} +14 -7
- package/dist/services/sync-context.js.map +1 -0
- package/dist/services/{set.d.ts → sync-mode.d.ts} +7 -9
- package/dist/services/sync-mode.d.ts.map +1 -0
- package/dist/services/{set.js → sync-mode.js} +9 -23
- package/dist/services/sync-mode.js.map +1 -0
- package/dist/services/{paths.d.ts → sync-paths.d.ts} +2 -2
- package/dist/services/sync-paths.d.ts.map +1 -0
- package/dist/services/{paths.js → sync-paths.js} +4 -6
- package/dist/services/sync-paths.js.map +1 -0
- package/dist/services/terminal/logger.d.ts +30 -5
- package/dist/services/terminal/logger.d.ts.map +1 -1
- package/dist/services/terminal/logger.js +61 -14
- package/dist/services/terminal/logger.js.map +1 -1
- package/dist/services/terminal/path-completion.d.ts +2 -2
- package/dist/services/terminal/path-completion.d.ts.map +1 -1
- package/dist/services/terminal/path-completion.js +16 -13
- package/dist/services/terminal/path-completion.js.map +1 -1
- package/dist/services/terminal/shell.d.ts +1 -12
- package/dist/services/terminal/shell.d.ts.map +1 -1
- package/dist/services/terminal/shell.js +7 -160
- package/dist/services/terminal/shell.js.map +1 -1
- package/dist/services/terminal/spinner.d.ts +10 -0
- package/dist/services/terminal/spinner.d.ts.map +1 -0
- package/dist/services/terminal/spinner.js +61 -0
- package/dist/services/terminal/spinner.js.map +1 -0
- package/dist/services/terminal/theme.d.ts +31 -0
- package/dist/services/terminal/theme.d.ts.map +1 -0
- package/dist/services/terminal/theme.js +32 -0
- package/dist/services/terminal/theme.js.map +1 -0
- package/dist/services/track.d.ts +1 -3
- package/dist/services/track.d.ts.map +1 -1
- package/dist/services/track.js +7 -23
- package/dist/services/track.js.map +1 -1
- package/dist/services/untrack.d.ts +0 -2
- package/dist/services/untrack.d.ts.map +1 -1
- package/dist/services/untrack.js +4 -11
- package/dist/services/untrack.js.map +1 -1
- package/package.json +1 -2
- package/dist/config/sync-entry.d.ts.map +0 -1
- package/dist/config/sync-entry.js.map +0 -1
- package/dist/config/sync.d.ts +0 -8
- package/dist/config/sync.d.ts.map +0 -1
- package/dist/config/sync.js +0 -53
- package/dist/config/sync.js.map +0 -1
- package/dist/services/local-materialization.d.ts +0 -30
- package/dist/services/local-materialization.d.ts.map +0 -1
- package/dist/services/local-materialization.js.map +0 -1
- package/dist/services/paths.d.ts.map +0 -1
- package/dist/services/paths.js.map +0 -1
- package/dist/services/runtime.d.ts.map +0 -1
- package/dist/services/runtime.js.map +0 -1
- package/dist/services/set.d.ts.map +0 -1
- package/dist/services/set.js.map +0 -1
- package/dist/services/terminal/cli-runtime.d.ts +0 -18
- package/dist/services/terminal/cli-runtime.d.ts.map +0 -1
- package/dist/services/terminal/cli-runtime.js +0 -19
- package/dist/services/terminal/cli-runtime.js.map +0 -1
package/dist/services/doctor.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { resolveSyncConfigFilePath } from "#app/config/sync.ts";
|
|
2
1
|
import { formatDotweaveError } from "#app/lib/error.ts";
|
|
3
2
|
import { pathExists } from "#app/lib/filesystem.ts";
|
|
4
|
-
import {
|
|
5
|
-
import { buildEntryMaterialization } from "./
|
|
3
|
+
import { verifyIsGitRepository } from "#app/lib/git.ts";
|
|
4
|
+
import { buildEntryMaterialization } from "./pull-apply.js";
|
|
6
5
|
import { buildRepositorySnapshot } from "./repo-snapshot.js";
|
|
7
|
-
import { loadSyncConfig, resolveSyncPaths, } from "./
|
|
6
|
+
import { loadSyncConfig, resolveSyncPaths, } from "./sync-context.js";
|
|
8
7
|
const ok = (checkId, detail) => ({
|
|
9
8
|
checkId,
|
|
10
9
|
detail,
|
|
@@ -20,29 +19,23 @@ const fail = (checkId, detail) => ({
|
|
|
20
19
|
detail,
|
|
21
20
|
level: "fail",
|
|
22
21
|
});
|
|
23
|
-
export const runDoctorChecks = async (
|
|
24
|
-
reporter?.start("Running doctor checks...");
|
|
22
|
+
export const runDoctorChecks = async () => {
|
|
25
23
|
const { syncDirectory } = resolveSyncPaths();
|
|
26
|
-
const configPath = resolveSyncConfigFilePath(syncDirectory);
|
|
27
24
|
const checks = [];
|
|
28
25
|
try {
|
|
29
|
-
|
|
30
|
-
await ensureRepository(syncDirectory);
|
|
26
|
+
await verifyIsGitRepository(syncDirectory);
|
|
31
27
|
checks.push(ok("git", "Sync directory is a git repository."));
|
|
32
28
|
}
|
|
33
29
|
catch (error) {
|
|
34
30
|
checks.push(fail("git", error instanceof Error ? error.message : "Git repository check failed."));
|
|
35
31
|
return {
|
|
36
32
|
checks,
|
|
37
|
-
configPath,
|
|
38
33
|
hasFailures: true,
|
|
39
34
|
hasWarnings: false,
|
|
40
|
-
syncDirectory,
|
|
41
35
|
};
|
|
42
36
|
}
|
|
43
37
|
let config;
|
|
44
38
|
try {
|
|
45
|
-
reporter?.start("Loading sync configuration...");
|
|
46
39
|
const { effectiveConfig, fullConfig } = await loadSyncConfig(syncDirectory);
|
|
47
40
|
config = effectiveConfig;
|
|
48
41
|
checks.push(ok("config", `Loaded config with ${fullConfig.entries.length} entries and ${effectiveConfig.age.recipients.length} recipients.`));
|
|
@@ -56,13 +49,10 @@ export const runDoctorChecks = async (reporter) => {
|
|
|
56
49
|
: "Sync configuration could not be read."));
|
|
57
50
|
return {
|
|
58
51
|
checks,
|
|
59
|
-
configPath,
|
|
60
52
|
hasFailures: true,
|
|
61
53
|
hasWarnings: false,
|
|
62
|
-
syncDirectory,
|
|
63
54
|
};
|
|
64
55
|
}
|
|
65
|
-
reporter?.start("Checking age identity...");
|
|
66
56
|
checks.push((await pathExists(config.age.identityFile))
|
|
67
57
|
? ok("age", `Age identity file exists at ${config.age.identityFile}.`)
|
|
68
58
|
: fail("age", `Age identity file is missing: ${config.age.identityFile}`));
|
|
@@ -72,25 +62,14 @@ export const runDoctorChecks = async (reporter) => {
|
|
|
72
62
|
const missingEntries = config.entries.filter((entry) => {
|
|
73
63
|
return entry.mode !== "ignore" && entry.localPath.length > 0;
|
|
74
64
|
});
|
|
75
|
-
const missingCount = 0;
|
|
76
|
-
let checkedLocalPathCount = 0;
|
|
77
65
|
const healthyMissingEntries = new Set();
|
|
78
|
-
|
|
79
|
-
const repositorySnapshot = await buildRepositorySnapshot(syncDirectory, config, reporter);
|
|
80
|
-
reporter?.start("Checking tracked local paths...");
|
|
66
|
+
const repositorySnapshot = await buildRepositorySnapshot(syncDirectory, config);
|
|
81
67
|
try {
|
|
82
68
|
for (const entry of missingEntries) {
|
|
83
|
-
checkedLocalPathCount += 1;
|
|
84
|
-
if ((reporter?.level ?? 0) >= 4) {
|
|
85
|
-
reporter?.verbose(`checked tracked local path ${entry.localPath}`);
|
|
86
|
-
}
|
|
87
|
-
else if (checkedLocalPathCount % 100 === 0) {
|
|
88
|
-
reporter?.start(`Checked ${checkedLocalPathCount} tracked local paths...`);
|
|
89
|
-
}
|
|
90
69
|
if (await pathExists(entry.localPath)) {
|
|
91
70
|
continue;
|
|
92
71
|
}
|
|
93
|
-
buildEntryMaterialization(entry, repositorySnapshot, config
|
|
72
|
+
buildEntryMaterialization(entry, repositorySnapshot, config);
|
|
94
73
|
healthyMissingEntries.add(entry.repoPath);
|
|
95
74
|
}
|
|
96
75
|
}
|
|
@@ -102,25 +81,19 @@ export const runDoctorChecks = async (reporter) => {
|
|
|
102
81
|
const hasWarnings = checks.some((check) => check.level === "warn");
|
|
103
82
|
return {
|
|
104
83
|
checks,
|
|
105
|
-
configPath,
|
|
106
84
|
hasFailures,
|
|
107
85
|
hasWarnings,
|
|
108
|
-
syncDirectory,
|
|
109
86
|
};
|
|
110
87
|
}
|
|
111
|
-
checks.push(
|
|
112
|
-
?
|
|
113
|
-
|
|
114
|
-
: `All missing local paths are healthy for the current sync state (${healthyMissingEntries.size} entr${healthyMissingEntries.size === 1 ? "y" : "ies"}).`)
|
|
115
|
-
: warn("local-paths", `${missingCount} tracked local path${missingCount === 1 ? " is" : "s are"} missing.`));
|
|
88
|
+
checks.push(ok("local-paths", healthyMissingEntries.size === 0
|
|
89
|
+
? "All tracked local paths currently exist."
|
|
90
|
+
: `All missing local paths are healthy for the current sync state (${healthyMissingEntries.size} entr${healthyMissingEntries.size === 1 ? "y" : "ies"}).`));
|
|
116
91
|
const hasFailures = checks.some((check) => check.level === "fail");
|
|
117
92
|
const hasWarnings = checks.some((check) => check.level === "warn");
|
|
118
93
|
return {
|
|
119
94
|
checks,
|
|
120
|
-
configPath,
|
|
121
95
|
hasFailures,
|
|
122
96
|
hasWarnings,
|
|
123
|
-
syncDirectory,
|
|
124
97
|
};
|
|
125
98
|
};
|
|
126
99
|
//# sourceMappingURL=doctor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/services/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/services/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/services/init.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { ConsolaInstance } from "consola";
|
|
2
1
|
import { DotweaveError } from "#app/lib/error.ts";
|
|
3
2
|
export type InitRequest = Readonly<{
|
|
4
3
|
ageIdentity?: string;
|
|
@@ -9,16 +8,13 @@ export type InitRequest = Readonly<{
|
|
|
9
8
|
}>;
|
|
10
9
|
export type InitResult = Readonly<{
|
|
11
10
|
alreadyInitialized: boolean;
|
|
12
|
-
configPath: string;
|
|
13
11
|
entryCount: number;
|
|
14
12
|
gitAction: "cloned" | "existing" | "initialized";
|
|
15
13
|
gitSource?: string;
|
|
16
14
|
identityFile: string;
|
|
17
15
|
generatedIdentity: boolean;
|
|
18
16
|
recipientCount: number;
|
|
19
|
-
syncDirectory: string;
|
|
20
17
|
}>;
|
|
21
|
-
export declare const defaultSyncIdentityFile: "~/.config/dotweave/keys.txt";
|
|
22
18
|
export declare const createMissingRepositoryAgeKeyError: () => DotweaveError;
|
|
23
|
-
export declare const initializeSyncDirectory: (request: InitRequest
|
|
19
|
+
export declare const initializeSyncDirectory: (request: InitRequest) => Promise<InitResult>;
|
|
24
20
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/services/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/services/init.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAcpE,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC,CAAC;AAKH,eAAO,MAAM,kCAAkC,qBAQ9C,CAAC;AAqJF,eAAO,MAAM,uBAAuB,GAClC,SAAS,WAAW,KACnB,OAAO,CAAC,UAAU,CA4JpB,CAAC"}
|
package/dist/services/init.js
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { AppConstants } from "#app/config/constants.ts";
|
|
4
4
|
import { formatGlobalDotweaveConfig, readGlobalDotweaveConfig, } from "#app/config/global-config.ts";
|
|
5
5
|
import { resolveDefaultIdentityFile } from "#app/config/identity-file.ts";
|
|
6
6
|
import { readEnvValue } from "#app/config/runtime-env.ts";
|
|
7
|
-
import { createInitialSyncConfig, formatSyncConfig, parseSyncConfig, readSyncConfig,
|
|
7
|
+
import { createInitialSyncConfig, formatSyncConfig, parseSyncConfig, readSyncConfig, } from "#app/config/sync-schema.ts";
|
|
8
8
|
import { createAgeIdentityFile, readAgeRecipientsFromIdentityFile, writeAgeIdentityFile, } from "#app/lib/crypto.ts";
|
|
9
9
|
import { DotweaveError, wrapUnknownError } from "#app/lib/error.ts";
|
|
10
10
|
import { pathExists, writeTextFileAtomically } from "#app/lib/filesystem.ts";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { resolveAgeFromSyncConfig, resolveSyncConfigResolutionContext, resolveSyncPaths, } from "./
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
const managedRepositoryAttributesContents = "* -text\n";
|
|
11
|
+
import { initializeRepository, requireGitRepository, verifyIsGitRepository, } from "#app/lib/git.ts";
|
|
12
|
+
import { validateJsoncConfigPath } from "#app/lib/jsonc.ts";
|
|
13
|
+
import { resolveAgeFromSyncConfig, resolveSyncConfigResolutionContext, resolveSyncPaths, } from "./sync-context.js";
|
|
14
|
+
const gitAttributesFileName = ".gitattributes";
|
|
15
|
+
const gitAttributesContents = "* -text\n";
|
|
17
16
|
export const createMissingRepositoryAgeKeyError = () => {
|
|
18
17
|
return new DotweaveError("Existing repository setup requires an age private key.", {
|
|
19
18
|
code: "INIT_AGE_IDENTITY_REQUIRED",
|
|
@@ -27,11 +26,10 @@ const normalizeRecipients = (recipients) => {
|
|
|
27
26
|
return left.localeCompare(right);
|
|
28
27
|
});
|
|
29
28
|
};
|
|
30
|
-
const resolveInitAgeBootstrap = async (request
|
|
29
|
+
const resolveInitAgeBootstrap = async (request) => {
|
|
31
30
|
const identityFile = resolveDefaultIdentityFile(readEnvValue("HOME"), readEnvValue("XDG_CONFIG_HOME"));
|
|
32
31
|
const explicitRecipients = normalizeRecipients(request.recipients);
|
|
33
32
|
if (request.ageIdentity !== undefined) {
|
|
34
|
-
reporter?.start("Writing age identity file...");
|
|
35
33
|
const { recipient } = await writeAgeIdentityFile(identityFile, request.ageIdentity);
|
|
36
34
|
return {
|
|
37
35
|
generatedIdentity: false,
|
|
@@ -40,13 +38,11 @@ const resolveInitAgeBootstrap = async (request, reporter) => {
|
|
|
40
38
|
}
|
|
41
39
|
if (explicitRecipients.length === 0) {
|
|
42
40
|
if (await pathExists(identityFile)) {
|
|
43
|
-
reporter?.start("Loading age recipients from the existing identity...");
|
|
44
41
|
return {
|
|
45
42
|
generatedIdentity: false,
|
|
46
43
|
recipients: normalizeRecipients(await readAgeRecipientsFromIdentityFile(identityFile)),
|
|
47
44
|
};
|
|
48
45
|
}
|
|
49
|
-
reporter?.start("Generating a new age identity...");
|
|
50
46
|
const { recipient } = await createAgeIdentityFile(identityFile);
|
|
51
47
|
return {
|
|
52
48
|
generatedIdentity: true,
|
|
@@ -54,7 +50,6 @@ const resolveInitAgeBootstrap = async (request, reporter) => {
|
|
|
54
50
|
};
|
|
55
51
|
}
|
|
56
52
|
if (request.generateAgeIdentity === true) {
|
|
57
|
-
reporter?.start("Generating a new age identity...");
|
|
58
53
|
const { recipient } = await createAgeIdentityFile(identityFile);
|
|
59
54
|
return {
|
|
60
55
|
generatedIdentity: true,
|
|
@@ -62,20 +57,18 @@ const resolveInitAgeBootstrap = async (request, reporter) => {
|
|
|
62
57
|
};
|
|
63
58
|
}
|
|
64
59
|
if (await pathExists(identityFile)) {
|
|
65
|
-
reporter?.start("Using the existing age identity file...");
|
|
66
60
|
return {
|
|
67
61
|
generatedIdentity: false,
|
|
68
62
|
recipients: explicitRecipients,
|
|
69
63
|
};
|
|
70
64
|
}
|
|
71
|
-
reporter?.start("Generating a new age identity...");
|
|
72
65
|
const { recipient } = await createAgeIdentityFile(identityFile);
|
|
73
66
|
return {
|
|
74
67
|
generatedIdentity: true,
|
|
75
68
|
recipients: normalizeRecipients([...explicitRecipients, recipient]),
|
|
76
69
|
};
|
|
77
70
|
};
|
|
78
|
-
const
|
|
71
|
+
const assertRecipientMatch = (age, request) => {
|
|
79
72
|
if (age === undefined) {
|
|
80
73
|
return;
|
|
81
74
|
}
|
|
@@ -89,7 +82,7 @@ const assertInitRequestMatchesConfig = (age, request) => {
|
|
|
89
82
|
`Requested recipients: ${recipients.join(", ") || "(none)"}`,
|
|
90
83
|
`Configured recipients: ${normalizeRecipients([...age.recipients]).join(", ")}`,
|
|
91
84
|
],
|
|
92
|
-
hint: `Use the existing recipients, or update ${
|
|
85
|
+
hint: `Use the existing recipients, or update ${AppConstants.SYNC.CONFIG_FILE_NAME} manually if you intend to rotate recipients.`,
|
|
93
86
|
});
|
|
94
87
|
}
|
|
95
88
|
};
|
|
@@ -97,40 +90,37 @@ const buildAlreadyInitializedResult = (config, base) => {
|
|
|
97
90
|
const age = config.age !== undefined ? resolveAgeFromSyncConfig(config.age) : undefined;
|
|
98
91
|
return {
|
|
99
92
|
alreadyInitialized: true,
|
|
100
|
-
configPath: base.configPath,
|
|
101
93
|
entryCount: config.entries.length,
|
|
102
94
|
gitAction: base.gitAction,
|
|
103
95
|
...(base.gitSource === undefined ? {} : { gitSource: base.gitSource }),
|
|
104
96
|
generatedIdentity: false,
|
|
105
97
|
identityFile: age?.identityFile ?? "",
|
|
106
98
|
recipientCount: age?.recipients.length ?? 0,
|
|
107
|
-
syncDirectory: base.syncDirectory,
|
|
108
99
|
};
|
|
109
100
|
};
|
|
110
101
|
const writeGlobalSettings = async (globalConfigPath) => {
|
|
111
102
|
const existingGlobalConfig = await readGlobalDotweaveConfig(globalConfigPath);
|
|
112
103
|
const globalConfigToWrite = {
|
|
113
|
-
activeProfile: existingGlobalConfig?.activeProfile ??
|
|
114
|
-
version:
|
|
104
|
+
activeProfile: existingGlobalConfig?.activeProfile ?? AppConstants.SYNC.DEFAULT_PROFILE,
|
|
105
|
+
version: AppConstants.GLOBAL_CONFIG.CURRENT_VERSION,
|
|
115
106
|
};
|
|
116
107
|
await mkdir(dirname(globalConfigPath), { recursive: true });
|
|
117
108
|
await writeTextFileAtomically(globalConfigPath, formatGlobalDotweaveConfig(globalConfigToWrite));
|
|
118
109
|
};
|
|
119
110
|
const ensureManagedRepositoryAttributes = async (syncDirectory) => {
|
|
120
|
-
const attributesPath = join(syncDirectory,
|
|
111
|
+
const attributesPath = join(syncDirectory, gitAttributesFileName);
|
|
121
112
|
if (await pathExists(attributesPath)) {
|
|
122
113
|
const existingContents = await readFile(attributesPath, "utf8");
|
|
123
|
-
if (existingContents ===
|
|
114
|
+
if (existingContents === gitAttributesContents) {
|
|
124
115
|
return;
|
|
125
116
|
}
|
|
126
117
|
}
|
|
127
|
-
await writeTextFileAtomically(attributesPath,
|
|
118
|
+
await writeTextFileAtomically(attributesPath, gitAttributesContents);
|
|
128
119
|
};
|
|
129
|
-
export const initializeSyncDirectory = async (request
|
|
130
|
-
reporter?.start("Initializing sync directory...");
|
|
120
|
+
export const initializeSyncDirectory = async (request) => {
|
|
131
121
|
const { syncDirectory, configPath, globalConfigPath } = resolveSyncPaths();
|
|
132
122
|
const context = resolveSyncConfigResolutionContext();
|
|
133
|
-
const resolvedConfigPath = await
|
|
123
|
+
const resolvedConfigPath = await validateJsoncConfigPath(configPath);
|
|
134
124
|
const configExists = await pathExists(resolvedConfigPath);
|
|
135
125
|
const identityFile = resolveDefaultIdentityFile(readEnvValue("HOME"), readEnvValue("XDG_CONFIG_HOME"));
|
|
136
126
|
const importingRepository = request.repository !== undefined && request.repository.trim() !== "";
|
|
@@ -140,29 +130,22 @@ export const initializeSyncDirectory = async (request, reporter) => {
|
|
|
140
130
|
throw createMissingRepositoryAgeKeyError();
|
|
141
131
|
}
|
|
142
132
|
if (configExists) {
|
|
143
|
-
|
|
144
|
-
await ensureGitRepository(syncDirectory);
|
|
133
|
+
await requireGitRepository(syncDirectory);
|
|
145
134
|
await ensureManagedRepositoryAttributes(syncDirectory);
|
|
146
|
-
reporter?.start("Loading the existing sync config...");
|
|
147
135
|
const config = await readSyncConfig(syncDirectory, context);
|
|
148
|
-
|
|
149
|
-
await resolveInitAgeBootstrap(request
|
|
136
|
+
assertRecipientMatch(config.age, request);
|
|
137
|
+
await resolveInitAgeBootstrap(request);
|
|
150
138
|
return buildAlreadyInitializedResult(config, {
|
|
151
|
-
configPath,
|
|
152
139
|
gitAction: "existing",
|
|
153
|
-
syncDirectory,
|
|
154
140
|
});
|
|
155
141
|
}
|
|
156
142
|
await mkdir(dirname(syncDirectory), {
|
|
157
143
|
recursive: true,
|
|
158
144
|
});
|
|
159
|
-
reporter?.start("Preparing the sync directory...");
|
|
160
145
|
let gitAction = "existing";
|
|
161
146
|
let gitSource;
|
|
162
147
|
try {
|
|
163
|
-
|
|
164
|
-
await ensureRepository(syncDirectory);
|
|
165
|
-
reporter?.start("Using the existing git repository...");
|
|
148
|
+
await verifyIsGitRepository(syncDirectory);
|
|
166
149
|
}
|
|
167
150
|
catch {
|
|
168
151
|
const syncDirectoryExists = await pathExists(syncDirectory);
|
|
@@ -179,10 +162,7 @@ export const initializeSyncDirectory = async (request, reporter) => {
|
|
|
179
162
|
const gitSourceInput = request.repository?.trim() || undefined;
|
|
180
163
|
let gitResult;
|
|
181
164
|
try {
|
|
182
|
-
|
|
183
|
-
? "Initializing a new git repository..."
|
|
184
|
-
: `Cloning the sync directory from ${gitSourceInput}...`);
|
|
185
|
-
gitResult = await initializeRepository(syncDirectory, gitSourceInput, reporter);
|
|
165
|
+
gitResult = await initializeRepository(syncDirectory, gitSourceInput);
|
|
186
166
|
}
|
|
187
167
|
catch (error) {
|
|
188
168
|
throw wrapUnknownError(gitSourceInput === undefined
|
|
@@ -205,29 +185,23 @@ export const initializeSyncDirectory = async (request, reporter) => {
|
|
|
205
185
|
gitAction = gitResult.action;
|
|
206
186
|
gitSource = gitResult.source;
|
|
207
187
|
}
|
|
208
|
-
reporter?.start("Preparing the sync artifact directory...");
|
|
209
188
|
await mkdir(syncDirectory, { recursive: true });
|
|
210
189
|
await ensureManagedRepositoryAttributes(syncDirectory);
|
|
211
|
-
if (await pathExists(await
|
|
212
|
-
reporter?.start("Loading the existing sync config...");
|
|
190
|
+
if (await pathExists(await validateJsoncConfigPath(configPath))) {
|
|
213
191
|
const config = await readSyncConfig(syncDirectory, context);
|
|
214
|
-
const ageBootstrap = await resolveInitAgeBootstrap(request
|
|
192
|
+
const ageBootstrap = await resolveInitAgeBootstrap(request);
|
|
215
193
|
if (configExists) {
|
|
216
194
|
return buildAlreadyInitializedResult(config, {
|
|
217
|
-
configPath,
|
|
218
195
|
gitAction,
|
|
219
196
|
gitSource,
|
|
220
|
-
syncDirectory,
|
|
221
197
|
});
|
|
222
198
|
}
|
|
223
|
-
reporter?.start("Writing global dotweave settings...");
|
|
224
199
|
await writeGlobalSettings(globalConfigPath);
|
|
225
200
|
const age = config.age !== undefined
|
|
226
201
|
? resolveAgeFromSyncConfig(config.age)
|
|
227
202
|
: undefined;
|
|
228
203
|
return {
|
|
229
204
|
alreadyInitialized: false,
|
|
230
|
-
configPath,
|
|
231
205
|
entryCount: config.entries.length,
|
|
232
206
|
gitAction,
|
|
233
207
|
...(gitSource === undefined ? {} : { gitSource }),
|
|
@@ -235,31 +209,23 @@ export const initializeSyncDirectory = async (request, reporter) => {
|
|
|
235
209
|
identityFile: age?.identityFile ??
|
|
236
210
|
resolveDefaultIdentityFile(readEnvValue("HOME"), readEnvValue("XDG_CONFIG_HOME")),
|
|
237
211
|
recipientCount: age?.recipients.length ?? 0,
|
|
238
|
-
syncDirectory,
|
|
239
212
|
};
|
|
240
213
|
}
|
|
241
|
-
|
|
242
|
-
const ageBootstrap = await resolveInitAgeBootstrap(request, reporter);
|
|
243
|
-
// Write global settings.jsonc (without age)
|
|
244
|
-
reporter?.start("Writing global dotweave settings...");
|
|
214
|
+
const ageBootstrap = await resolveInitAgeBootstrap(request);
|
|
245
215
|
await writeGlobalSettings(globalConfigPath);
|
|
246
|
-
// Write sync config with age
|
|
247
216
|
const initialConfig = createInitialSyncConfig({
|
|
248
217
|
recipients: [...new Set(ageBootstrap.recipients.map((r) => r.trim()))],
|
|
249
218
|
});
|
|
250
|
-
reporter?.start("Writing sync config...");
|
|
251
219
|
parseSyncConfig(initialConfig, context);
|
|
252
220
|
await writeFile(configPath, formatSyncConfig(initialConfig), "utf8");
|
|
253
221
|
return {
|
|
254
222
|
alreadyInitialized: false,
|
|
255
|
-
configPath,
|
|
256
223
|
entryCount: 0,
|
|
257
224
|
gitAction,
|
|
258
225
|
...(gitSource === undefined ? {} : { gitSource }),
|
|
259
226
|
generatedIdentity: ageBootstrap.generatedIdentity,
|
|
260
227
|
identityFile: resolveDefaultIdentityFile(readEnvValue("HOME"), readEnvValue("XDG_CONFIG_HOME")),
|
|
261
228
|
recipientCount: ageBootstrap.recipients.length,
|
|
262
|
-
syncDirectory,
|
|
263
229
|
};
|
|
264
230
|
};
|
|
265
231
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/services/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/services/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type ResolvedSyncConfig } from "#app/config/sync.ts";
|
|
3
|
-
type SnapshotConfig = ResolvedSyncConfig & Readonly<{
|
|
4
|
-
activeProfile?: string;
|
|
5
|
-
}>;
|
|
1
|
+
import type { EffectiveSyncConfig } from "./sync-context.ts";
|
|
6
2
|
export type SnapshotNode = Readonly<{
|
|
7
3
|
type: "directory";
|
|
8
4
|
}> | Readonly<{
|
|
@@ -21,6 +17,5 @@ export type FileLikeSnapshotNode = Extract<SnapshotNode, Readonly<{
|
|
|
21
17
|
type: "file" | "symlink";
|
|
22
18
|
}>>;
|
|
23
19
|
export declare const addSnapshotNode: (snapshot: Map<string, SnapshotNode>, repoPath: string, node: SnapshotNode) => void;
|
|
24
|
-
export declare const buildLocalSnapshot: (config:
|
|
25
|
-
export {};
|
|
20
|
+
export declare const buildLocalSnapshot: (config: EffectiveSyncConfig) => Promise<Map<string, SnapshotNode>>;
|
|
26
21
|
//# sourceMappingURL=local-snapshot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-snapshot.d.ts","sourceRoot":"","sources":["../../src/services/local-snapshot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-snapshot.d.ts","sourceRoot":"","sources":["../../src/services/local-snapshot.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,MAAM,YAAY,GACpB,QAAQ,CAAC;IACP,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,CAAC;CACtB,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC,CAAC;AAEP,MAAM,MAAM,gBAAgB,GAAG,OAAO,CACpC,YAAY,EACZ,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,OAAO,CACxC,YAAY,EACZ,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CACvC,CAAC;AAYF,eAAO,MAAM,eAAe,GAC1B,UAAU,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACnC,UAAU,MAAM,EAChB,MAAM,YAAY,SAOnB,CAAC;AAoFF,eAAO,MAAM,kBAAkB,GAAU,QAAQ,mBAAmB,uCAgEnE,CAAC"}
|
|
@@ -1,29 +1,23 @@
|
|
|
1
1
|
import { lstat, readFile, readlink } from "node:fs/promises";
|
|
2
2
|
import { join, posix } from "node:path";
|
|
3
|
-
import { collectChildEntryPaths,
|
|
3
|
+
import { collectChildEntryPaths, findOwningSyncEntry, requireManagedSyncMode, } from "#app/config/sync-queries.ts";
|
|
4
4
|
import { DotweaveError } from "#app/lib/error.ts";
|
|
5
5
|
import { isExecutableMode } from "#app/lib/file-mode.ts";
|
|
6
6
|
import { getPathStats, listDirectoryEntries } from "#app/lib/filesystem.ts";
|
|
7
7
|
import { assertStorageSafeRepoPath } from "./repo-artifacts.js";
|
|
8
|
+
const resolveSnapshotExecutable = (config, repoPath, filesystemMode) => {
|
|
9
|
+
const entry = findOwningSyncEntry(config, repoPath);
|
|
10
|
+
return isExecutableMode(entry?.permission ?? filesystemMode);
|
|
11
|
+
};
|
|
8
12
|
export const addSnapshotNode = (snapshot, repoPath, node) => {
|
|
9
13
|
if (snapshot.has(repoPath)) {
|
|
10
14
|
throw new DotweaveError(`Duplicate sync path generated for ${repoPath}`);
|
|
11
15
|
}
|
|
12
16
|
snapshot.set(repoPath, node);
|
|
13
17
|
};
|
|
14
|
-
const reportLocalScanProgress = (reporter, state, repoPath, kind) => {
|
|
15
|
-
state.scannedEntryCount += 1;
|
|
16
|
-
if ((reporter?.level ?? 0) >= 4) {
|
|
17
|
-
reporter?.verbose(`scanned local ${kind} ${repoPath}`);
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
if (state.scannedEntryCount % 100 === 0) {
|
|
21
|
-
reporter?.start(`Scanned ${state.scannedEntryCount} local filesystem entries...`);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
18
|
const addLocalNode = async (snapshot, config, repoPath, path, stats) => {
|
|
25
19
|
assertStorageSafeRepoPath(repoPath);
|
|
26
|
-
const mode =
|
|
20
|
+
const mode = requireManagedSyncMode(config, repoPath, config.activeProfile);
|
|
27
21
|
if (mode === "ignore") {
|
|
28
22
|
return;
|
|
29
23
|
}
|
|
@@ -45,12 +39,12 @@ const addLocalNode = async (snapshot, config, repoPath, path, stats) => {
|
|
|
45
39
|
}
|
|
46
40
|
addSnapshotNode(snapshot, repoPath, {
|
|
47
41
|
contents: await readFile(path),
|
|
48
|
-
executable:
|
|
42
|
+
executable: resolveSnapshotExecutable(config, repoPath, stats.mode),
|
|
49
43
|
secret: mode === "secret",
|
|
50
44
|
type: "file",
|
|
51
45
|
});
|
|
52
46
|
};
|
|
53
|
-
const walkLocalDirectory = async (snapshot, config, localDirectory, repoPathPrefix, childEntryPaths
|
|
47
|
+
const walkLocalDirectory = async (snapshot, config, localDirectory, repoPathPrefix, childEntryPaths) => {
|
|
54
48
|
const entries = await listDirectoryEntries(localDirectory);
|
|
55
49
|
for (const entry of entries) {
|
|
56
50
|
const localPath = join(localDirectory, entry.name);
|
|
@@ -59,43 +53,26 @@ const walkLocalDirectory = async (snapshot, config, localDirectory, repoPathPref
|
|
|
59
53
|
continue;
|
|
60
54
|
}
|
|
61
55
|
const stats = await lstat(localPath);
|
|
62
|
-
reportLocalScanProgress(reporter, progressState, repoPath, stats.isDirectory()
|
|
63
|
-
? "directory"
|
|
64
|
-
: stats.isSymbolicLink()
|
|
65
|
-
? "symlink"
|
|
66
|
-
: stats.isFile()
|
|
67
|
-
? "file"
|
|
68
|
-
: "other");
|
|
69
56
|
if (stats.isDirectory()) {
|
|
70
57
|
assertStorageSafeRepoPath(repoPath);
|
|
71
|
-
await walkLocalDirectory(snapshot, config, localPath, repoPath, childEntryPaths
|
|
58
|
+
await walkLocalDirectory(snapshot, config, localPath, repoPath, childEntryPaths);
|
|
72
59
|
continue;
|
|
73
60
|
}
|
|
74
61
|
await addLocalNode(snapshot, config, repoPath, localPath, stats);
|
|
75
62
|
}
|
|
76
63
|
};
|
|
77
|
-
export const buildLocalSnapshot = async (config
|
|
64
|
+
export const buildLocalSnapshot = async (config) => {
|
|
78
65
|
const snapshot = new Map();
|
|
79
|
-
const progressState = { scannedEntryCount: 0 };
|
|
80
66
|
for (const entry of config.entries) {
|
|
81
|
-
reporter?.start(`Scanning tracked entry ${entry.repoPath}...`);
|
|
82
67
|
const stats = await getPathStats(entry.localPath);
|
|
83
68
|
if (stats === undefined) {
|
|
84
|
-
reporter?.verbose(`skipped missing local entry ${entry.repoPath}`);
|
|
85
69
|
continue;
|
|
86
70
|
}
|
|
87
|
-
const entryMode =
|
|
71
|
+
const entryMode = requireManagedSyncMode(config, entry.repoPath, config.activeProfile);
|
|
88
72
|
if (entry.kind === "file") {
|
|
89
73
|
if (entryMode === "ignore") {
|
|
90
74
|
continue;
|
|
91
75
|
}
|
|
92
|
-
reportLocalScanProgress(reporter, progressState, entry.repoPath, stats.isSymbolicLink()
|
|
93
|
-
? "symlink"
|
|
94
|
-
: stats.isFile()
|
|
95
|
-
? "file"
|
|
96
|
-
: stats.isDirectory()
|
|
97
|
-
? "directory"
|
|
98
|
-
: "other");
|
|
99
76
|
if (stats.isDirectory()) {
|
|
100
77
|
throw new DotweaveError(`Sync entry ${entry.repoPath} expects a file, but found a directory: ${entry.localPath}`);
|
|
101
78
|
}
|
|
@@ -109,7 +86,7 @@ export const buildLocalSnapshot = async (config, reporter) => {
|
|
|
109
86
|
if (entryMode === "ignore") {
|
|
110
87
|
continue;
|
|
111
88
|
}
|
|
112
|
-
await walkLocalDirectory(snapshot, config, entry.localPath, entry.repoPath, childEntryPaths
|
|
89
|
+
await walkLocalDirectory(snapshot, config, entry.localPath, entry.repoPath, childEntryPaths);
|
|
113
90
|
addSnapshotNode(snapshot, entry.repoPath, {
|
|
114
91
|
type: "directory",
|
|
115
92
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-snapshot.js","sourceRoot":"","sources":["../../src/services/local-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"local-snapshot.js","sourceRoot":"","sources":["../../src/services/local-snapshot.ts"],"names":[],"mappings":"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"}
|