@filen/sync 0.2.1 → 0.3.2
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/.node-version +1 -1
- package/dist/ignorer.d.ts +6 -0
- package/dist/ignorer.js +43 -24
- package/dist/ignorer.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/deltas.d.ts +58 -2
- package/dist/lib/deltas.js +693 -108
- package/dist/lib/deltas.js.map +1 -1
- package/dist/lib/environment.d.ts +47 -0
- package/dist/lib/environment.js +71 -0
- package/dist/lib/environment.js.map +1 -0
- package/dist/lib/filesystems/dirTree.d.ts +70 -0
- package/dist/lib/filesystems/dirTree.js +157 -0
- package/dist/lib/filesystems/dirTree.js.map +1 -0
- package/dist/lib/filesystems/local.d.ts +18 -8
- package/dist/lib/filesystems/local.js +166 -160
- package/dist/lib/filesystems/local.js.map +1 -1
- package/dist/lib/filesystems/remote.d.ts +12 -5
- package/dist/lib/filesystems/remote.js +226 -172
- package/dist/lib/filesystems/remote.js.map +1 -1
- package/dist/lib/ipc.js +1 -2
- package/dist/lib/ipc.js.map +1 -1
- package/dist/lib/lock.js +19 -12
- package/dist/lib/lock.js.map +1 -1
- package/dist/lib/logger.js +9 -7
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/state.js +159 -63
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/sync.d.ts +18 -0
- package/dist/lib/sync.js +165 -96
- package/dist/lib/sync.js.map +1 -1
- package/dist/lib/tasks.d.ts +7 -8
- package/dist/lib/tasks.js +38 -45
- package/dist/lib/tasks.js.map +1 -1
- package/dist/semaphore.d.ts +1 -0
- package/dist/semaphore.js +22 -5
- package/dist/semaphore.js.map +1 -1
- package/dist/utils.js +51 -35
- package/dist/utils.js.map +1 -1
- package/eslint.config.mjs +36 -0
- package/package.json +19 -15
- package/tests/bench/collapse.bench.ts +114 -0
- package/tests/bench/cycle.bench.ts +111 -0
- package/tests/bench/deltas.bench.ts +151 -0
- package/tests/bench/harness/fake-sync.ts +32 -0
- package/tests/bench/harness/measure.ts +276 -0
- package/tests/bench/harness/scale-world.ts +160 -0
- package/tests/bench/harness/trees.ts +275 -0
- package/tests/bench/local-scan.bench.ts +74 -0
- package/tests/bench/longrun.bench.ts +130 -0
- package/tests/bench/profile-incremental.ts +90 -0
- package/tests/bench/remote-build.bench.ts +104 -0
- package/tests/bench/render.ts +14 -0
- package/tests/bench/semaphore.bench.ts +79 -0
- package/tests/bench/state.bench.ts +85 -0
- package/tests/bench/tasks-dispatch.bench.ts +156 -0
- package/tests/conformance/virtual-fs.test.ts +213 -0
- package/tests/e2e/backup.e2e.test.ts +130 -0
- package/tests/e2e/confirm.e2e.test.ts +191 -0
- package/tests/e2e/conflict.e2e.test.ts +261 -0
- package/tests/e2e/edge.e2e.test.ts +339 -0
- package/tests/e2e/harness/account.ts +104 -0
- package/tests/e2e/harness/assert.ts +127 -0
- package/tests/e2e/harness/drive.ts +88 -0
- package/tests/e2e/harness/mutations.ts +249 -0
- package/tests/e2e/harness/world.ts +222 -0
- package/tests/e2e/ignore.e2e.test.ts +123 -0
- package/tests/e2e/lifecycle.e2e.test.ts +290 -0
- package/tests/e2e/modes.e2e.test.ts +215 -0
- package/tests/e2e/platform.e2e.test.ts +157 -0
- package/tests/e2e/property.e2e.test.ts +163 -0
- package/tests/e2e/races.e2e.test.ts +90 -0
- package/tests/e2e/regressions.e2e.test.ts +212 -0
- package/tests/e2e/resilience.e2e.test.ts +231 -0
- package/tests/e2e/special.e2e.test.ts +185 -0
- package/tests/e2e/state.e2e.test.ts +229 -0
- package/tests/e2e/sync.e2e.test.ts +222 -0
- package/tests/fakes/fake-cloud.test.ts +267 -0
- package/tests/fakes/fake-cloud.ts +1094 -0
- package/tests/fakes/virtual-fs.ts +354 -0
- package/tests/harness/known-bug.ts +17 -0
- package/tests/harness/mutations.ts +65 -0
- package/tests/harness/runner.ts +141 -0
- package/tests/harness/snapshot.ts +113 -0
- package/tests/harness/world.ts +187 -0
- package/tests/scenarios/a-baseline.test.ts +107 -0
- package/tests/scenarios/aa-races.test.ts +258 -0
- package/tests/scenarios/ab-mode-property.test.ts +189 -0
- package/tests/scenarios/ac-platform.test.ts +320 -0
- package/tests/scenarios/ad-unicode-normalization.test.ts +67 -0
- package/tests/scenarios/b-additions.test.ts +160 -0
- package/tests/scenarios/c-modifications.test.ts +194 -0
- package/tests/scenarios/d-deletions.test.ts +259 -0
- package/tests/scenarios/e-rename-move.test.ts +288 -0
- package/tests/scenarios/f-ignore-filter.test.ts +346 -0
- package/tests/scenarios/g-large-deletion.test.ts +277 -0
- package/tests/scenarios/h-resilience.test.ts +167 -0
- package/tests/scenarios/i-lifecycle.test.ts +353 -0
- package/tests/scenarios/j-state-cache.test.ts +264 -0
- package/tests/scenarios/k-scale.test.ts +202 -0
- package/tests/scenarios/l-property.test.ts +145 -0
- package/tests/scenarios/m-golden.test.ts +452 -0
- package/tests/scenarios/o-task-errors.test.ts +497 -0
- package/tests/scenarios/p-remote-originated.test.ts +306 -0
- package/tests/scenarios/q-cycle-lifecycle.test.ts +234 -0
- package/tests/scenarios/r-rename-stress.test.ts +208 -0
- package/tests/scenarios/s-upgrade-transition.test.ts +171 -0
- package/tests/scenarios/t-type-change.test.ts +144 -0
- package/tests/scenarios/u-mode-local-to-cloud.test.ts +347 -0
- package/tests/scenarios/v-mode-local-backup.test.ts +201 -0
- package/tests/scenarios/w-mode-cloud-to-local.test.ts +304 -0
- package/tests/scenarios/x-mode-cloud-backup.test.ts +201 -0
- package/tests/scenarios/y-conflict-matrix.test.ts +292 -0
- package/tests/scenarios/z-cross-ops.test.ts +285 -0
- package/tests/scenarios/zb-dir-rename-cross.test.ts +296 -0
- package/tests/scenarios/zc-crash-recovery.test.ts +189 -0
- package/tests/scenarios/zd-inode-reuse.test.ts +118 -0
- package/tests/scenarios/ze-move-into-new-dir.test.ts +130 -0
- package/tests/scenarios/zf-remote-change-unchanged-local.test.ts +81 -0
- package/tests/scenarios/zg-edit-during-scan.test.ts +68 -0
- package/tests/scenarios/zh-dir-delete-vs-child.test.ts +104 -0
- package/tests/scenarios/zi-smoke-test-outage.test.ts +78 -0
- package/tests/scenarios/zj-trash-cleanup.test.ts +133 -0
- package/tests/scenarios/zk-ignore-asymmetry.test.ts +150 -0
- package/tests/scenarios/zl-mode-atomicity.test.ts +104 -0
- package/tests/scenarios/zm-scan-concurrency.test.ts +78 -0
- package/tests/scenarios/zn-delta-ordering.test.ts +130 -0
- package/tests/scenarios/zo-download-temp-cleanup.test.ts +65 -0
- package/tests/unit/collapse-deltas.test.ts +276 -0
- package/tests/unit/dir-tree.test.ts +159 -0
- package/tests/unit/icloud.test.ts +115 -0
- package/tests/unit/ignorer-cache-regression.test.ts +70 -0
- package/tests/unit/ignorer.test.ts +63 -0
- package/tests/unit/ipc-lock.test.ts +438 -0
- package/tests/unit/lock.test.ts +135 -0
- package/tests/unit/n-unit.test.ts +632 -0
- package/tests/unit/remote-tree-unordered-regression.test.ts +101 -0
- package/tests/unit/semaphore-regression.test.ts +140 -0
- package/tests/unit/state-refencode-regression.test.ts +224 -0
- package/tests/unit/state.test.ts +809 -0
- package/tests/unit/tasks-dispatch-order-regression.test.ts +53 -0
- package/tests/unit/worker-api.test.ts +379 -0
- package/tsconfig.json +10 -1
- package/tsconfig.test.json +12 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/vitest.bench.config.ts +32 -0
- package/vitest.config.ts +27 -0
- package/vitest.e2e.config.ts +68 -0
- package/.eslintrc +0 -16
- package/jest.config.js +0 -5
package/dist/lib/sync.js
CHANGED
|
@@ -15,7 +15,6 @@ const ignorer_1 = __importDefault(require("../ignorer"));
|
|
|
15
15
|
const utils_1 = require("../utils");
|
|
16
16
|
const lock_1 = __importDefault(require("./lock"));
|
|
17
17
|
const path_1 = __importDefault(require("path"));
|
|
18
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
19
18
|
const uuid_1 = require("uuid");
|
|
20
19
|
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
21
20
|
/**
|
|
@@ -54,6 +53,7 @@ class Sync {
|
|
|
54
53
|
this.taskErrors = [];
|
|
55
54
|
this.localTreeErrors = [];
|
|
56
55
|
this.cleaningLocalTrash = false;
|
|
56
|
+
this.cleanupLocalTrashInterval = undefined;
|
|
57
57
|
this.isPreviousSavedTreeStateEmpty = true;
|
|
58
58
|
this.deletionConfirmationResult = "waiting";
|
|
59
59
|
this.worker = worker;
|
|
@@ -63,6 +63,7 @@ class Sync {
|
|
|
63
63
|
this.excludeDotFiles = syncPair.excludeDotFiles;
|
|
64
64
|
this.dbPath = worker.dbPath;
|
|
65
65
|
this.sdk = worker.sdk;
|
|
66
|
+
this.environment = worker.environment;
|
|
66
67
|
this.localTrashDisabled = syncPair.localTrashDisabled;
|
|
67
68
|
this.requireConfirmationOnLargeDeletion =
|
|
68
69
|
typeof syncPair.requireConfirmationOnLargeDeletion === "boolean" ? syncPair.requireConfirmationOnLargeDeletion : false;
|
|
@@ -79,80 +80,99 @@ class Sync {
|
|
|
79
80
|
this.cleanupLocalTrash();
|
|
80
81
|
}
|
|
81
82
|
async smokeTest() {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
83
|
+
// Loop rather than recurse: during a prolonged outage this retries once per SYNC_INTERVAL, and the
|
|
84
|
+
// old `return await this.smokeTest()` tail-recursion accumulated one suspended async frame per retry
|
|
85
|
+
// (unbounded memory growth over a long outage). `this.removed` is re-checked every iteration so a
|
|
86
|
+
// pair removed mid-outage aborts promptly. The caller runs this BEFORE acquiring the lock, so an
|
|
87
|
+
// outage stalls only this pair's cycle and never holds the account lock (cross-device starvation).
|
|
88
|
+
while (true) {
|
|
89
|
+
if (this.removed) {
|
|
90
|
+
throw new Error("Aborted");
|
|
91
|
+
}
|
|
92
|
+
const localSmokeTest = this.mode === "cloudBackup" || this.mode === "cloudToLocal" || this.mode === "twoWay"
|
|
93
|
+
? await this.localFileSystem.isPathWritable(this.syncPair.localPath)
|
|
94
|
+
: await this.localFileSystem.isPathReadable(this.syncPair.localPath);
|
|
95
|
+
if (!localSmokeTest) {
|
|
96
|
+
await this.localFileSystem.stopDirectoryWatcher();
|
|
97
|
+
this.worker.logger.log("error", "Local smoke test failed, path not existing or not readable or writable", this.syncPair.localPath);
|
|
98
|
+
(0, ipc_1.postMessageToMain)({
|
|
99
|
+
type: "cycleLocalSmokeTestFailed",
|
|
100
|
+
syncPair: this.syncPair
|
|
101
|
+
});
|
|
102
|
+
await new Promise(resolve => setTimeout(resolve, constants_1.SYNC_INTERVAL));
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const remoteSmokeTest = await this.remoteFileSystem.remoteDirPathExisting();
|
|
106
|
+
if (!remoteSmokeTest) {
|
|
107
|
+
this.worker.logger.log("error", "Remote smoke test failed, path does not exist or is in the trash", this.syncPair.remotePath);
|
|
108
|
+
(0, ipc_1.postMessageToMain)({
|
|
109
|
+
type: "cycleRemoteSmokeTestFailed",
|
|
110
|
+
syncPair: this.syncPair
|
|
111
|
+
});
|
|
112
|
+
await new Promise(resolve => setTimeout(resolve, constants_1.SYNC_INTERVAL));
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
return;
|
|
107
116
|
}
|
|
108
117
|
}
|
|
109
118
|
cleanupLocalTrash() {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
this.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
119
|
+
// Keep the timer handle so cleanup() can clear it. Previously the handle was discarded, so a removed
|
|
120
|
+
// pair's interval kept firing every 5 minutes forever — pinning the whole Sync (and its trees) in
|
|
121
|
+
// memory and burning a periodic glob/stat on a dead pair.
|
|
122
|
+
this.cleanupLocalTrashInterval = setInterval(() => {
|
|
123
|
+
void this.cleanupLocalTrashOnce();
|
|
124
|
+
}, 300000);
|
|
125
|
+
}
|
|
126
|
+
async cleanupLocalTrashOnce() {
|
|
127
|
+
if (this.cleaningLocalTrash) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
this.cleaningLocalTrash = true;
|
|
131
|
+
try {
|
|
132
|
+
const localTrashPath = path_1.default.join(this.syncPair.localPath, constants_1.LOCAL_TRASH_NAME);
|
|
133
|
+
if (await this.environment.fs.exists(localTrashPath)) {
|
|
134
|
+
const now = Date.now();
|
|
135
|
+
const dir = await fast_glob_1.default.async("**/*", {
|
|
136
|
+
dot: true,
|
|
137
|
+
onlyDirectories: false,
|
|
138
|
+
// Deletes move whole DIRECTORIES into the trash (by basename), so the eviction sweep must
|
|
139
|
+
// age out directories too. With onlyFiles:true the glob skipped every trashed directory and
|
|
140
|
+
// (because deep:0 also stops it descending) their contents — so trashed directories leaked
|
|
141
|
+
// and accumulated forever. The rm below already recurses, so an old top-level dir is removed
|
|
142
|
+
// wholesale.
|
|
143
|
+
onlyFiles: false,
|
|
144
|
+
throwErrorOnBrokenSymbolicLink: false,
|
|
145
|
+
cwd: localTrashPath,
|
|
146
|
+
followSymbolicLinks: false,
|
|
147
|
+
deep: 0,
|
|
148
|
+
fs: this.environment.globFs,
|
|
149
|
+
suppressErrors: true,
|
|
150
|
+
stats: true,
|
|
151
|
+
unique: true,
|
|
152
|
+
objectMode: true
|
|
153
|
+
});
|
|
154
|
+
for (const entry of dir) {
|
|
155
|
+
if (!entry) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (entry.stats && entry.stats.atimeMs + 86400000 * 30 < now) {
|
|
159
|
+
await this.environment.fs.rm(path_1.default.join(localTrashPath, entry.path), {
|
|
160
|
+
force: true,
|
|
161
|
+
maxRetries: 60 * 10,
|
|
162
|
+
recursive: true,
|
|
163
|
+
retryDelay: 100
|
|
164
|
+
});
|
|
145
165
|
}
|
|
146
166
|
}
|
|
147
167
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
this.worker.logger.log("error", e, "sync.cleanupLocalTrash");
|
|
171
|
+
this.worker.logger.log("error", e);
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
this.cleaningLocalTrash = false;
|
|
175
|
+
}
|
|
156
176
|
}
|
|
157
177
|
async initialize() {
|
|
158
178
|
if (this.isInitialized) {
|
|
@@ -173,6 +193,10 @@ class Sync {
|
|
|
173
193
|
}
|
|
174
194
|
}
|
|
175
195
|
async cleanup({ deleteLocalDbFiles = false }) {
|
|
196
|
+
if (this.cleanupLocalTrashInterval) {
|
|
197
|
+
clearInterval(this.cleanupLocalTrashInterval);
|
|
198
|
+
this.cleanupLocalTrashInterval = undefined;
|
|
199
|
+
}
|
|
176
200
|
try {
|
|
177
201
|
await Promise.all([
|
|
178
202
|
this.localFileSystem.stopDirectoryWatcher(),
|
|
@@ -201,6 +225,40 @@ class Sync {
|
|
|
201
225
|
});
|
|
202
226
|
return;
|
|
203
227
|
}
|
|
228
|
+
try {
|
|
229
|
+
await this.runCycle();
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
if (this.worker.runOnce || this.removed) {
|
|
233
|
+
await this.cleanup({
|
|
234
|
+
deleteLocalDbFiles: this.removed
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
(0, ipc_1.postMessageToMain)({
|
|
239
|
+
type: "cycleRestarting",
|
|
240
|
+
syncPair: this.syncPair
|
|
241
|
+
});
|
|
242
|
+
setTimeout(() => {
|
|
243
|
+
this.run();
|
|
244
|
+
}, constants_1.SYNC_INTERVAL);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Run exactly one synchronization cycle without scheduling the next one.
|
|
250
|
+
*
|
|
251
|
+
* This is the body of a single pass: error/pause gating, lock acquisition,
|
|
252
|
+
* tree diffing, delta processing, task execution and state persistence. It
|
|
253
|
+
* never throws (failures are caught and reported as a "cycleError" message)
|
|
254
|
+
* and never reschedules — {@link run} owns the self-scheduling loop. Exposed
|
|
255
|
+
* so a single cycle can be driven deterministically.
|
|
256
|
+
*
|
|
257
|
+
* @public
|
|
258
|
+
* @async
|
|
259
|
+
* @returns {Promise<void>}
|
|
260
|
+
*/
|
|
261
|
+
async runCycle() {
|
|
204
262
|
try {
|
|
205
263
|
if (this.taskErrors.length > 0 || this.localTreeErrors.length > 0) {
|
|
206
264
|
if (this.worker.runOnce) {
|
|
@@ -262,6 +320,11 @@ class Sync {
|
|
|
262
320
|
type: "cycleStarted",
|
|
263
321
|
syncPair: this.syncPair
|
|
264
322
|
});
|
|
323
|
+
// Smoke-test BEFORE acquiring the lock. The local smoke test retries every SYNC_INTERVAL for as
|
|
324
|
+
// long as the local path is unavailable (an unmounted drive, a disconnected network FS). Under the
|
|
325
|
+
// lock that would hold the account lock for the WHOLE outage and starve every other device; run
|
|
326
|
+
// outside it, an outage stalls only this pair's cycle.
|
|
327
|
+
await this.smokeTest();
|
|
265
328
|
const acquireLockMessageTimeout = setTimeout(() => {
|
|
266
329
|
(0, ipc_1.postMessageToMain)({
|
|
267
330
|
type: "cycleAcquiringLockStarted",
|
|
@@ -275,7 +338,6 @@ class Sync {
|
|
|
275
338
|
syncPair: this.syncPair
|
|
276
339
|
});
|
|
277
340
|
try {
|
|
278
|
-
await this.smokeTest();
|
|
279
341
|
await this.localFileSystem.waitForLocalDirectoryChanges();
|
|
280
342
|
(0, ipc_1.postMessageToMain)({
|
|
281
343
|
type: "cycleWaitingForLocalDirectoryChangesDone",
|
|
@@ -338,12 +400,17 @@ class Sync {
|
|
|
338
400
|
type: "cycleProcessingDeltasStarted",
|
|
339
401
|
syncPair: this.syncPair
|
|
340
402
|
});
|
|
341
|
-
const { deltas, deleteLocalDirectoryCountRaw, deleteLocalFileCountRaw, deleteRemoteDirectoryCountRaw, deleteRemoteFileCountRaw
|
|
403
|
+
const { deltas, deleteLocalDirectoryCountRaw, deleteLocalFileCountRaw, deleteRemoteDirectoryCountRaw, deleteRemoteFileCountRaw,
|
|
404
|
+
// The mode the deltas were computed under (snapshotted once inside process()). Use it for the
|
|
405
|
+
// deletion-confirmation gate below so the gate and the delta set never disagree when
|
|
406
|
+
// updateMode() races the cycle. (M6)
|
|
407
|
+
mode: cycleMode } = await this.deltas.process({
|
|
342
408
|
currentLocalTree: currentLocalTree.result,
|
|
343
409
|
currentRemoteTree: currentRemoteTree.result,
|
|
344
410
|
previousLocalTree: this.previousLocalTree,
|
|
345
411
|
previousRemoteTree: this.previousRemoteTree,
|
|
346
|
-
currentLocalTreeErrors: currentLocalTree.errors
|
|
412
|
+
currentLocalTreeErrors: currentLocalTree.errors,
|
|
413
|
+
currentLocalTreeIgnored: currentLocalTree.ignored
|
|
347
414
|
});
|
|
348
415
|
(0, ipc_1.postMessageToMain)({
|
|
349
416
|
type: "deltasCount",
|
|
@@ -367,12 +434,12 @@ class Sync {
|
|
|
367
434
|
currentLocalTree.result.size === 0 &&
|
|
368
435
|
deleteRemoteDirectoryCountRaw + deleteRemoteFileCountRaw > 0 &&
|
|
369
436
|
this.previousLocalTree.size <= deleteRemoteDirectoryCountRaw + deleteRemoteFileCountRaw &&
|
|
370
|
-
(
|
|
437
|
+
(cycleMode === "twoWay" || cycleMode === "localToCloud");
|
|
371
438
|
const confirmRemoteDeletion = this.previousRemoteTree.size > 0 &&
|
|
372
439
|
currentRemoteTree.result.size === 0 &&
|
|
373
|
-
deleteLocalDirectoryCountRaw + deleteLocalFileCountRaw > 0
|
|
374
|
-
|
|
375
|
-
(
|
|
440
|
+
deleteLocalDirectoryCountRaw + deleteLocalFileCountRaw > 0 &&
|
|
441
|
+
this.previousRemoteTree.size <= deleteLocalDirectoryCountRaw + deleteLocalFileCountRaw &&
|
|
442
|
+
(cycleMode === "twoWay" || cycleMode === "cloudToLocal");
|
|
376
443
|
let skipSyncDueToConfirmDeletionRestart = false;
|
|
377
444
|
// If the previous tree has nodes and the current one is empty, we should prompt the user to confirm deletion
|
|
378
445
|
if (this.requireConfirmationOnLargeDeletion && (confirmLocalDeletion || confirmRemoteDeletion)) {
|
|
@@ -399,7 +466,11 @@ class Sync {
|
|
|
399
466
|
sendConfirmationMessage();
|
|
400
467
|
await new Promise(resolve => {
|
|
401
468
|
const interval = setInterval(() => {
|
|
402
|
-
|
|
469
|
+
// Also bail when the pair is paused or removed while we wait — otherwise the cycle
|
|
470
|
+
// spins here indefinitely (the user may never answer) while HOLDING the lock, which
|
|
471
|
+
// starves every other device on the account. A bail-out leaves the decision as
|
|
472
|
+
// "waiting", so the skip-and-restart path below releases the lock and exits cleanly.
|
|
473
|
+
if (this.deletionConfirmationResult !== "waiting" || this.paused || this.removed) {
|
|
403
474
|
clearInterval(interval);
|
|
404
475
|
resolve();
|
|
405
476
|
}
|
|
@@ -489,9 +560,23 @@ class Sync {
|
|
|
489
560
|
type: "cycleSavingStateStarted",
|
|
490
561
|
syncPair: this.syncPair
|
|
491
562
|
});
|
|
492
|
-
//
|
|
493
|
-
|
|
494
|
-
|
|
563
|
+
// Snapshot the trees as the next cycle's base. We need NEW tree/inode/uuid MAPS so the
|
|
564
|
+
// directory-tree cache's in-place incremental updates (the watcher add/remove/rename path)
|
|
565
|
+
// can never bleed into the base — but the item objects can be SHARED by reference: an item
|
|
566
|
+
// is always created fresh and replaced in the map, never mutated field-by-field, so the
|
|
567
|
+
// base's items are immutable once snapshotted. A full structuredClone instead deep-copied
|
|
568
|
+
// every item on every change-cycle — O(tree) CPU plus a second full copy of the tree in
|
|
569
|
+
// memory — for isolation a shallow map copy already provides. (P3)
|
|
570
|
+
this.previousLocalTree = {
|
|
571
|
+
tree: Object.assign({}, currentLocalTree.result.tree),
|
|
572
|
+
inodes: Object.assign({}, currentLocalTree.result.inodes),
|
|
573
|
+
size: currentLocalTree.result.size
|
|
574
|
+
};
|
|
575
|
+
this.previousRemoteTree = {
|
|
576
|
+
tree: Object.assign({}, currentRemoteTree.result.tree),
|
|
577
|
+
uuids: Object.assign({}, currentRemoteTree.result.uuids),
|
|
578
|
+
size: currentRemoteTree.result.size
|
|
579
|
+
};
|
|
495
580
|
await this.state.save();
|
|
496
581
|
(0, ipc_1.postMessageToMain)({
|
|
497
582
|
type: "cycleSavingStateDone",
|
|
@@ -531,22 +616,6 @@ class Sync {
|
|
|
531
616
|
});
|
|
532
617
|
}
|
|
533
618
|
}
|
|
534
|
-
finally {
|
|
535
|
-
if (this.worker.runOnce || this.removed) {
|
|
536
|
-
await this.cleanup({
|
|
537
|
-
deleteLocalDbFiles: this.removed
|
|
538
|
-
});
|
|
539
|
-
}
|
|
540
|
-
else {
|
|
541
|
-
(0, ipc_1.postMessageToMain)({
|
|
542
|
-
type: "cycleRestarting",
|
|
543
|
-
syncPair: this.syncPair
|
|
544
|
-
});
|
|
545
|
-
setTimeout(() => {
|
|
546
|
-
this.run();
|
|
547
|
-
}, constants_1.SYNC_INTERVAL);
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
619
|
}
|
|
551
620
|
}
|
|
552
621
|
exports.Sync = Sync;
|
package/dist/lib/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":";;;;;;AAEA,4CAA8D;AAC9D,+CAAqF;AACrF,iDAAmE;AACnE,sDAA6B;AAC7B,oDAA+C;AAC/C,oDAA2B;AAC3B,+BAAyC;AACzC,yDAAgC;AAChC,oCAAyC;AAEzC,kDAAyB;AACzB,gDAA6B;AAC7B,wDAAyB;AACzB,+BAAmC;AACnC,0DAAgC;AAEhC;;;;;;GAMG;AACH,MAAa,IAAI;IAsChB;;;;;;;;OAQG;IACH,YAAmB,EAAE,QAAQ,EAAE,MAAM,EAA8C;QA5C3E,kBAAa,GAAG,KAAK,CAAA;QAItB,sBAAiB,GAAc;YACrC,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,CAAC;SACP,CAAA;QACM,uBAAkB,GAAe;YACvC,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,CAAC;SACP,CAAA;QACM,oBAAe,GAA2B,EAAE,CAAA;QAInC,qBAAgB,GAAoC,EAAE,CAAA;QACtD,iBAAY,GAAgC,EAAE,CAAA;QAMvD,YAAO,GAAY,KAAK,CAAA;QAExB,eAAU,GAAgB,EAAE,CAAA;QAE5B,oBAAe,GAAqB,EAAE,CAAA;QACtC,uBAAkB,GAAY,KAAK,CAAA;QACnC,kCAA6B,GAAY,IAAI,CAAA;QAE7C,+BAA0B,GAAqC,SAAS,CAAA;QAY9E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;QACzB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;QAC7B,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAA;QAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAC3B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;QACrB,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAA;QACrD,IAAI,CAAC,kCAAkC;YACtC,OAAO,QAAQ,CAAC,kCAAkC,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC,CAAC,KAAK,CAAA;QACvH,IAAI,CAAC,eAAe,GAAG,IAAI,uBAAe,CAAC,IAAI,CAAC,CAAA;QAChD,IAAI,CAAC,gBAAgB,GAAG,IAAI,yBAAgB,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,eAAK,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,eAAK,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,cAAI,CAAC;YACpB,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,yBAAyB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;SACnE,CAAC,CAAA;QAEF,IAAI,CAAC,iBAAiB,EAAE,CAAA;IACzB,CAAC;IAEM,KAAK,CAAC,SAAS;QACrB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAA;QAC3B,CAAC;QAED,MAAM,cAAc,GACnB,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YACpF,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YACpE,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAEtE,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAA;YAEjD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CACrB,OAAO,EACP,wEAAwE,EACxE,IAAI,CAAC,QAAQ,CAAC,SAAS,CACvB,CAAA;YAED,IAAA,uBAAiB,EAAC;gBACjB,IAAI,EAAE,2BAA2B;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC,CAAA;YAEF,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,yBAAa,CAAC,CAAC,CAAA;YAEtE,OAAO,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QAC9B,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAA;QAE3E,IAAI,CAAC,eAAe,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,kEAAkE,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;YAE7H,IAAA,uBAAiB,EAAC;gBACjB,IAAI,EAAE,4BAA4B;gBAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC,CAAA;YAEF,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,yBAAa,CAAC,CAAC,CAAA;YAEtE,OAAO,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QAC9B,CAAC;IACF,CAAC;IAEM,iBAAiB;QACvB,WAAW,CAAC,KAAK,IAAI,EAAE;YACtB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC7B,OAAM;YACP,CAAC;YAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAA;YAE9B,IAAI,CAAC;gBACJ,MAAM,cAAc,GAAG,cAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,4BAAgB,CAAC,CAAA;gBAEjF,IAAI,MAAM,kBAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;oBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;oBACtB,MAAM,GAAG,GAAG,MAAM,mBAAQ,CAAC,KAAK,CAAC,MAAM,EAAE;wBACxC,GAAG,EAAE,IAAI;wBACT,eAAe,EAAE,KAAK;wBACtB,SAAS,EAAE,IAAI;wBACf,8BAA8B,EAAE,KAAK;wBACrC,GAAG,EAAE,cAAc;wBACnB,mBAAmB,EAAE,KAAK;wBAC1B,IAAI,EAAE,CAAC;wBACP,EAAE,EAAF,kBAAE;wBACF,cAAc,EAAE,IAAI;wBACpB,KAAK,EAAE,IAAI;wBACX,MAAM,EAAE,IAAI;wBACZ,UAAU,EAAE,IAAI;qBAChB,CAAC,CAAA;oBAEF,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;wBACzB,IAAI,CAAC,KAAK,EAAE,CAAC;4BACZ,OAAM;wBACP,CAAC;wBAED,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;4BAC9D,MAAM,kBAAE,CAAC,EAAE,CAAC,cAAU,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;gCACxD,KAAK,EAAE,IAAI;gCACX,UAAU,EAAE,EAAE,GAAG,EAAE;gCACnB,SAAS,EAAE,IAAI;gCACf,UAAU,EAAE,GAAG;6BACf,CAAC,CAAA;wBACH,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,wBAAwB,CAAC,CAAA;gBAC5D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;YACnC,CAAC;oBAAS,CAAC;gBACV,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAA;YAChC,CAAC;QACF,CAAC,EAAE,MAAM,CAAC,CAAA;IACX,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAM;QACP,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QAEzB,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;YAEtB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;YAEvE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YAEtE,IAAI,CAAC,GAAG,EAAE,CAAA;QACX,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAA;YACrD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;YAElC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;YAE1B,MAAM,CAAC,CAAA;QACR,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,KAAK,EAAoC;QACpF,IAAI,CAAC;YACJ,MAAM,OAAO,CAAC,GAAG,CAAC;gBACjB,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;gBAC3C,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;aACtE,CAAC,CAAA;YAEF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QACxE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,CAAA;YAClD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACnC,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QAEnB,IAAA,uBAAiB,EAAC;YACjB,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC,CAAA;IACH,CAAC;IAEM,KAAK,CAAC,sBAAsB;QAClC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACzG,CAAC;IAEO,KAAK,CAAC,GAAG;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,OAAO,CAAC;gBAClB,kBAAkB,EAAE,IAAI;aACxB,CAAC,CAAA;YAEF,OAAM;QACP,CAAC;QAED,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnE,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACzB,MAAM,IAAI,CAAC,OAAO,CAAC;wBAClB,kBAAkB,EAAE,KAAK;qBACzB,CAAC,CAAA;oBAEF,OAAM;gBACP,CAAC;gBAED,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE;wBACL,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iCAC7B,CAAC,KACJ,KAAK,EAAE,IAAA,sBAAc,EAAC,CAAC,CAAC,KAAK,CAAC,IAC7B,CAAC;qBACH;iBACD,CAAC,CAAA;gBAEF,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE;wBACL,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iCAClC,CAAC,KACJ,KAAK,EAAE,IAAA,sBAAc,EAAC,CAAC,CAAC,KAAK,CAAC,IAC7B,CAAC;qBACH;iBACD,CAAC,CAAA;gBAEF,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAA;gBAEF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,+DAA+D,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;gBACzH,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CACrB,OAAO,EACP;oBACC,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,eAAe,EAAE,IAAI,CAAC,eAAe;iBACrC,EACD,IAAI,CAAC,QAAQ,CAAC,SAAS,CACvB,CAAA;gBAED,OAAM;YACP,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACzB,MAAM,IAAI,CAAC,OAAO,CAAC;wBAClB,kBAAkB,EAAE,KAAK;qBACzB,CAAC,CAAA;oBAEF,OAAM;gBACP,CAAC;gBAED,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,aAAa;oBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAA;gBAEF,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAA;gBAEF,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAA;gBAEF,OAAM;YACP,CAAC;YAED,4GAA4G;YAC5G,8DAA8D;YAC9D,MAAM,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,CAAA;YAElD,IAAA,uBAAiB,EAAC;gBACjB,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC,CAAA;YAEF,MAAM,yBAAyB,GAAG,UAAU,CAAC,GAAG,EAAE;gBACjD,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,2BAA2B;oBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAA;YACH,CAAC,EAAE,IAAI,CAAC,CAAA;YAER,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA;YAEzB,YAAY,CAAC,yBAAyB,CAAC,CAAA;YAEvC,IAAA,uBAAiB,EAAC;gBACjB,IAAI,EAAE,wBAAwB;gBAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC,CAAA;YAEF,IAAI,CAAC;gBACJ,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;gBACtB,MAAM,IAAI,CAAC,eAAe,CAAC,4BAA4B,EAAE,CAAA;gBAEzD,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,0CAA0C;oBAChD,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAA;gBAEF,MAAM,0BAA0B,GAAG,UAAU,CAAC,GAAG,EAAE;oBAClD,IAAA,uBAAiB,EAAC;wBACjB,IAAI,EAAE,0BAA0B;wBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;qBACvB,CAAC,CAAA;gBACH,CAAC,EAAE,IAAI,CAAC,CAAA;gBAER,yFAAyF;gBACzF,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAA;gBAE/B,wCAAwC;gBACxC,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC7D,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;oBACvC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE;iBACxC,CAAC,CAAA;gBAEF,YAAY,CAAC,0BAA0B,CAAC,CAAA;gBAExC,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,uBAAuB;oBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAA;gBAEF,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE;wBACL,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iCACrC,CAAC,KACJ,KAAK,EAAE,IAAA,sBAAc,EAAC,CAAC,CAAC,KAAK,CAAC,IAC7B,CAAC;qBACH;iBACD,CAAC,CAAA;gBAEF,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAC,MAAM,CAAA;gBAE9C,sEAAsE;gBACtE,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvC,IAAA,uBAAiB,EAAC;wBACjB,IAAI,EAAE,kBAAkB;wBACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,IAAI,EAAE;4BACL,OAAO,EAAE,gBAAgB,CAAC,OAAO;yBACjC;qBACD,CAAC,CAAA;oBAEF,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;wBAC7D,IAAA,uBAAiB,EAAC;4BACjB,IAAI,EAAE,cAAc;4BACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;yBACvB,CAAC,CAAA;wBAEF,IAAA,uBAAiB,EAAC;4BACjB,IAAI,EAAE,gBAAgB;4BACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ;yBACvB,CAAC,CAAA;wBAEF,OAAM;oBACP,CAAC;oBAED,IAAA,uBAAiB,EAAC;wBACjB,IAAI,EAAE,mBAAmB;wBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,IAAI,EAAE;4BACL,OAAO,EAAE,iBAAiB,CAAC,OAAO;yBAClC;qBACD,CAAC,CAAA;oBAEF,IAAA,uBAAiB,EAAC;wBACjB,IAAI,EAAE,8BAA8B;wBACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ;qBACvB,CAAC,CAAA;oBAEF,MAAM,EACL,MAAM,EACN,4BAA4B,EAC5B,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,EACxB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;wBAC7B,gBAAgB,EAAE,gBAAgB,CAAC,MAAM;wBACzC,iBAAiB,EAAE,iBAAiB,CAAC,MAAM;wBAC3C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;wBACzC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;wBAC3C,sBAAsB,EAAE,gBAAgB,CAAC,MAAM;qBAC/C,CAAC,CAAA;oBAEF,IAAA,uBAAiB,EAAC;wBACjB,IAAI,EAAE,aAAa;wBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,IAAI,EAAE;4BACL,KAAK,EAAE,MAAM,CAAC,MAAM;yBACpB;qBACD,CAAC,CAAA;oBAEF,IAAA,uBAAiB,EAAC;wBACjB,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,IAAI,EAAE;4BACL,IAAI,EAAE,MAAM,CAAC,MAAM,CAClB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EACvG,CAAC,CACD;yBACD;qBACD,CAAC,CAAA;oBAEF,IAAA,uBAAiB,EAAC;wBACjB,IAAI,EAAE,2BAA2B;wBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;qBACvB,CAAC,CAAA;oBAEF,MAAM,oBAAoB,GACzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC;wBAC/B,gBAAgB,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;wBAClC,6BAA6B,GAAG,wBAAwB,GAAG,CAAC;wBAC5D,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,6BAA6B,GAAG,wBAAwB;wBACvF,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA;oBAEzD,MAAM,qBAAqB,GAC1B,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC;wBAChC,iBAAiB,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;wBACnC,4BAA4B,GAAG,uBAAuB,GAAG,CAAC,CAAA;oBAC3D,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,4BAA4B,GAAG,uBAAuB;wBACrF,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA;oBAEzD,IAAI,mCAAmC,GAAG,KAAK,CAAA;oBAE/C,6GAA6G;oBAC7G,IAAI,IAAI,CAAC,kCAAkC,IAAI,CAAC,oBAAoB,IAAI,qBAAqB,CAAC,EAAE,CAAC;wBAChG,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAA;wBAE3C,MAAM,uBAAuB,GAAG,GAAG,EAAE;4BACpC,IAAA,uBAAiB,EAAC;gCACjB,IAAI,EAAE,iBAAiB;gCACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gCACvB,IAAI,EAAE;oCACL,KAAK,EACJ,oBAAoB,IAAI,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;oCACnG,QAAQ,EACP,oBAAoB,IAAI,qBAAqB;wCAC5C,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI;wCAC5D,CAAC,CAAC,oBAAoB;4CACtB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI;4CAC7B,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI;oCAChC,OAAO,EACN,oBAAoB,IAAI,qBAAqB;wCAC5C,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI;wCAC9D,CAAC,CAAC,oBAAoB;4CACtB,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI;4CAC9B,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI;iCACjC;6BACD,CAAC,CAAA;wBACH,CAAC,CAAA;wBAED,uBAAuB,EAAE,CAAA;wBAEzB,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;4BACjC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;gCACjC,IAAI,IAAI,CAAC,0BAA0B,KAAK,SAAS,EAAE,CAAC;oCACnD,aAAa,CAAC,QAAQ,CAAC,CAAA;oCAEvB,OAAO,EAAE,CAAA;gCACV,CAAC;qCAAM,CAAC;oCACP,uBAAuB,EAAE,CAAA;gCAC1B,CAAC;4BACF,CAAC,EAAE,IAAI,CAAC,CAAA;wBACT,CAAC,CAAC,CAAA;wBAEF,IAAI,IAAI,CAAC,0BAA0B,KAAK,SAAS,IAAI,IAAI,CAAC,0BAA0B,KAAK,SAAS,EAAE,CAAC;4BACpG,mCAAmC,GAAG,IAAI,CAAA;wBAC3C,CAAC;oBACF,CAAC;oBAED,IAAI,CAAC,mCAAmC,EAAE,CAAC;wBAC1C,IAAA,uBAAiB,EAAC;4BACjB,IAAI,EAAE,6BAA6B;4BACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;yBACvB,CAAC,CAAA;wBAEF,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAA;wBAEhF,IAAA,uBAAiB,EAAC;4BACjB,IAAI,EAAE,0BAA0B;4BAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;yBACvB,CAAC,CAAA;wBAEF,IAAA,uBAAiB,EAAC;4BACjB,IAAI,EAAE,YAAY;4BAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,IAAI,EAAE;gCACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iCACpB,CAAC,KACJ,KAAK,EAAE,IAAA,sBAAc,EAAC,CAAC,CAAC,KAAK,CAAC,IAC7B,CAAC;6BACH;yBACD,CAAC,CAAA;wBAEF,IAAI,CAAC,UAAU,GAAG,MAAM,CAAA;wBAExB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAClC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC1B,IAAA,uBAAiB,EAAC;oCACjB,IAAI,EAAE,2BAA2B;oCACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;iCACvB,CAAC,CAAA;gCAEF,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CACrC,IAAI,CAAC,EAAE,CACN,IAAI,CAAC,IAAI,KAAK,sBAAsB;oCACpC,IAAI,CAAC,IAAI,KAAK,sBAAsB;oCACpC,IAAI,CAAC,IAAI,KAAK,iBAAiB;oCAC/B,IAAI,CAAC,IAAI,KAAK,sBAAsB;oCACpC,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAChC,CAAA;gCACD,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,CACtC,IAAI,CAAC,EAAE,CACN,IAAI,CAAC,IAAI,KAAK,uBAAuB;oCACrC,IAAI,CAAC,IAAI,KAAK,kBAAkB;oCAChC,IAAI,CAAC,IAAI,KAAK,uBAAuB;oCACrC,IAAI,CAAC,IAAI,KAAK,uBAAuB;oCACrC,IAAI,CAAC,IAAI,KAAK,kBAAkB,CACjC,CAAA;gCAED,+GAA+G;gCAC/G,IAAI,eAAe,EAAE,CAAC;oCACrB,IAAI,CAAC,eAAe,CAAC,4BAA4B,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,yBAAa,GAAG,CAAC,CAAA;oCAClF,IAAI,CAAC,eAAe,CAAC,qBAAqB,GAAG;wCAC5C,SAAS,EAAE,CAAC;wCACZ,IAAI,EAAE,EAAE;wCACR,MAAM,EAAE,EAAE;wCACV,OAAO,EAAE,EAAE;wCACX,MAAM,EAAE,EAAE;wCACV,IAAI,EAAE,CAAC;qCACP,CAAA;gCACF,CAAC;gCAED,IAAI,gBAAgB,EAAE,CAAC;oCACtB,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,GAAG;wCAC7C,SAAS,EAAE,CAAC;wCACZ,IAAI,EAAE,EAAE;wCACR,KAAK,EAAE,EAAE;wCACT,OAAO,EAAE,EAAE;wCACX,IAAI,EAAE,CAAC;qCACP,CAAA;gCACF,CAAC;gCAED;;;;;;;;;;;;kCAYE;gCAEF,IAAA,uBAAiB,EAAC;oCACjB,IAAI,EAAE,wBAAwB;oCAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ;iCACvB,CAAC,CAAA;4BACH,CAAC;4BAED,IAAA,uBAAiB,EAAC;gCACjB,IAAI,EAAE,yBAAyB;gCAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;6BACvB,CAAC,CAAA;4BAEF,+DAA+D;4BAC/D,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;4BACjE,IAAI,CAAC,kBAAkB,GAAG,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;4BAEnE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;4BAEvB,IAAA,uBAAiB,EAAC;gCACjB,IAAI,EAAE,sBAAsB;gCAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;6BACvB,CAAC,CAAA;wBACH,CAAC;wBAED,IAAA,uBAAiB,EAAC;4BACjB,IAAI,EAAE,cAAc;4BACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;yBACvB,CAAC,CAAA;oBACH,CAAC;gBACF,CAAC;YACF,CAAC;oBAAS,CAAC;gBACV,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,2BAA2B;oBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAA;gBAEF,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA;gBAEzB,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,wBAAwB;oBAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAA;YACH,CAAC;QACF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;YAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;YAElC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;gBACxB,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE;wBACL,KAAK,EAAE,IAAA,sBAAc,EAAC,CAAC,CAAC;wBACxB,IAAI,EAAE,IAAA,SAAM,GAAE;qBACd;iBACD,CAAC,CAAA;YACH,CAAC;QACF,CAAC;gBAAS,CAAC;YACV,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACzC,MAAM,IAAI,CAAC,OAAO,CAAC;oBAClB,kBAAkB,EAAE,IAAI,CAAC,OAAO;iBAChC,CAAC,CAAA;YACH,CAAC;iBAAM,CAAC;gBACP,IAAA,uBAAiB,EAAC;oBACjB,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAA;gBAEF,UAAU,CAAC,GAAG,EAAE;oBACf,IAAI,CAAC,GAAG,EAAE,CAAA;gBACX,CAAC,EAAE,yBAAa,CAAC,CAAA;YAClB,CAAC;QACF,CAAC;IACF,CAAC;CACD;AAjqBD,oBAiqBC;AAED,kBAAe,IAAI,CAAA"}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/tasks.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import type Sync from "./sync";
|
|
3
2
|
import { type Delta } from "./deltas";
|
|
4
3
|
import { type RemoteItem } from "./filesystems/remote";
|
|
5
|
-
import
|
|
4
|
+
import { type Stats } from "fs-extra";
|
|
6
5
|
import { Prettify } from "../types";
|
|
7
6
|
export type TaskError = Prettify<{
|
|
8
7
|
path: string;
|
|
@@ -20,14 +19,14 @@ export type DoneTask = {
|
|
|
20
19
|
} & ({
|
|
21
20
|
type: "uploadFile";
|
|
22
21
|
item: RemoteItem;
|
|
23
|
-
stats:
|
|
22
|
+
stats: Stats;
|
|
24
23
|
} | {
|
|
25
24
|
type: "createRemoteDirectory";
|
|
26
25
|
item: RemoteItem;
|
|
27
|
-
stats:
|
|
26
|
+
stats: Stats;
|
|
28
27
|
} | {
|
|
29
28
|
type: "createLocalDirectory";
|
|
30
|
-
stats:
|
|
29
|
+
stats: Stats;
|
|
31
30
|
item: RemoteItem;
|
|
32
31
|
} | {
|
|
33
32
|
type: "deleteLocalFile";
|
|
@@ -39,13 +38,13 @@ export type DoneTask = {
|
|
|
39
38
|
type: "deleteRemoteDirectory";
|
|
40
39
|
} | {
|
|
41
40
|
type: "downloadFile";
|
|
42
|
-
stats:
|
|
41
|
+
stats: Stats;
|
|
43
42
|
item: RemoteItem;
|
|
44
43
|
} | {
|
|
45
44
|
type: "renameLocalFile";
|
|
46
45
|
from: string;
|
|
47
46
|
to: string;
|
|
48
|
-
stats:
|
|
47
|
+
stats: Stats;
|
|
49
48
|
} | {
|
|
50
49
|
type: "renameRemoteFile";
|
|
51
50
|
from: string;
|
|
@@ -58,7 +57,7 @@ export type DoneTask = {
|
|
|
58
57
|
type: "renameLocalDirectory";
|
|
59
58
|
from: string;
|
|
60
59
|
to: string;
|
|
61
|
-
stats:
|
|
60
|
+
stats: Stats;
|
|
62
61
|
});
|
|
63
62
|
/**
|
|
64
63
|
* Tasks
|
package/dist/lib/tasks.js
CHANGED
|
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Tasks = void 0;
|
|
7
7
|
const utils_1 = require("../utils");
|
|
8
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
8
|
const ipc_1 = require("./ipc");
|
|
10
9
|
const path_1 = __importDefault(require("path"));
|
|
11
10
|
const semaphore_1 = require("../semaphore");
|
|
@@ -100,7 +99,7 @@ class Tasks {
|
|
|
100
99
|
try {
|
|
101
100
|
const [, stats] = await Promise.all([
|
|
102
101
|
this.sync.remoteFileSystem.mkdir({ relativePath: delta.path }),
|
|
103
|
-
|
|
102
|
+
this.sync.environment.fs.stat(path_1.default.join(this.sync.syncPair.localPath, delta.path))
|
|
104
103
|
]);
|
|
105
104
|
const item = this.sync.remoteFileSystem.getDirectoryTreeCache.tree[delta.path];
|
|
106
105
|
if (!item) {
|
|
@@ -155,7 +154,7 @@ class Tasks {
|
|
|
155
154
|
}
|
|
156
155
|
catch (e) {
|
|
157
156
|
// Don't throw if the file/directory does not exist anymore (it has been changed while we were inside the sync cycle, after deltas have been calculated).
|
|
158
|
-
if (!(await this.sync.localFileSystem.pathExists(delta.path))) {
|
|
157
|
+
if (!(await this.sync.localFileSystem.pathExists(path_1.default.join(this.sync.syncPair.localPath, delta.path)))) {
|
|
159
158
|
return delta;
|
|
160
159
|
}
|
|
161
160
|
if (e instanceof Error) {
|
|
@@ -360,7 +359,7 @@ class Tasks {
|
|
|
360
359
|
relativePath: delta.path,
|
|
361
360
|
passedMD5Hash: delta.md5Hash
|
|
362
361
|
}),
|
|
363
|
-
|
|
362
|
+
this.sync.environment.fs.stat(path_1.default.join(this.sync.syncPair.localPath, delta.path))
|
|
364
363
|
]);
|
|
365
364
|
const item = this.sync.remoteFileSystem.getDirectoryTreeCache.tree[delta.path];
|
|
366
365
|
if (!item) {
|
|
@@ -483,68 +482,62 @@ class Tasks {
|
|
|
483
482
|
// 10. Remote directory creations
|
|
484
483
|
// 11. File uploads
|
|
485
484
|
// 12. File downloads
|
|
485
|
+
// Partition the deltas into per-type buckets in ONE pass, then drain the buckets in the fixed order
|
|
486
|
+
// above — instead of scanning the whole deltasSorted array 12 times (10 sequential `if type !== X
|
|
487
|
+
// continue` passes + 2 filters), which is 12·O(deltas) just to order the work and costs real time on a
|
|
488
|
+
// bulk cycle (e.g. an initial sync of a huge tree). Each bucket keeps deltasSorted order (we push in
|
|
489
|
+
// iteration order), so the executed order — and therefore behavior — is identical. (perf)
|
|
490
|
+
const byType = {
|
|
491
|
+
renameLocalDirectory: [],
|
|
492
|
+
renameLocalFile: [],
|
|
493
|
+
renameRemoteDirectory: [],
|
|
494
|
+
renameRemoteFile: [],
|
|
495
|
+
deleteLocalDirectory: [],
|
|
496
|
+
deleteLocalFile: [],
|
|
497
|
+
deleteRemoteDirectory: [],
|
|
498
|
+
deleteRemoteFile: [],
|
|
499
|
+
createLocalDirectory: [],
|
|
500
|
+
createRemoteDirectory: [],
|
|
501
|
+
uploadFile: [],
|
|
502
|
+
downloadFile: []
|
|
503
|
+
};
|
|
486
504
|
for (const delta of deltasSorted) {
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
505
|
+
byType[delta.type].push(delta);
|
|
506
|
+
}
|
|
507
|
+
// Sequential, in the documented type order (state-mutating ops one after another).
|
|
508
|
+
for (const delta of byType.renameLocalDirectory) {
|
|
490
509
|
await process(delta);
|
|
491
510
|
}
|
|
492
|
-
for (const delta of
|
|
493
|
-
if (delta.type !== "renameLocalFile") {
|
|
494
|
-
continue;
|
|
495
|
-
}
|
|
511
|
+
for (const delta of byType.renameLocalFile) {
|
|
496
512
|
await process(delta);
|
|
497
513
|
}
|
|
498
|
-
for (const delta of
|
|
499
|
-
if (delta.type !== "renameRemoteDirectory") {
|
|
500
|
-
continue;
|
|
501
|
-
}
|
|
514
|
+
for (const delta of byType.renameRemoteDirectory) {
|
|
502
515
|
await process(delta);
|
|
503
516
|
}
|
|
504
|
-
for (const delta of
|
|
505
|
-
if (delta.type !== "renameRemoteFile") {
|
|
506
|
-
continue;
|
|
507
|
-
}
|
|
517
|
+
for (const delta of byType.renameRemoteFile) {
|
|
508
518
|
await process(delta);
|
|
509
519
|
}
|
|
510
|
-
for (const delta of
|
|
511
|
-
if (delta.type !== "deleteLocalDirectory") {
|
|
512
|
-
continue;
|
|
513
|
-
}
|
|
520
|
+
for (const delta of byType.deleteLocalDirectory) {
|
|
514
521
|
await process(delta);
|
|
515
522
|
}
|
|
516
|
-
for (const delta of
|
|
517
|
-
if (delta.type !== "deleteLocalFile") {
|
|
518
|
-
continue;
|
|
519
|
-
}
|
|
523
|
+
for (const delta of byType.deleteLocalFile) {
|
|
520
524
|
await process(delta);
|
|
521
525
|
}
|
|
522
|
-
for (const delta of
|
|
523
|
-
if (delta.type !== "deleteRemoteDirectory") {
|
|
524
|
-
continue;
|
|
525
|
-
}
|
|
526
|
+
for (const delta of byType.deleteRemoteDirectory) {
|
|
526
527
|
await process(delta);
|
|
527
528
|
}
|
|
528
|
-
for (const delta of
|
|
529
|
-
if (delta.type !== "deleteRemoteFile") {
|
|
530
|
-
continue;
|
|
531
|
-
}
|
|
529
|
+
for (const delta of byType.deleteRemoteFile) {
|
|
532
530
|
await process(delta);
|
|
533
531
|
}
|
|
534
|
-
for (const delta of
|
|
535
|
-
if (delta.type !== "createLocalDirectory") {
|
|
536
|
-
continue;
|
|
537
|
-
}
|
|
532
|
+
for (const delta of byType.createLocalDirectory) {
|
|
538
533
|
await process(delta);
|
|
539
534
|
}
|
|
540
|
-
for (const delta of
|
|
541
|
-
if (delta.type !== "createRemoteDirectory") {
|
|
542
|
-
continue;
|
|
543
|
-
}
|
|
535
|
+
for (const delta of byType.createRemoteDirectory) {
|
|
544
536
|
await process(delta);
|
|
545
537
|
}
|
|
546
|
-
|
|
547
|
-
await (0, utils_1.promiseAllChunked)(
|
|
538
|
+
// Uploads then downloads, in parallel (bounded by the transfers semaphore inside `process`).
|
|
539
|
+
await (0, utils_1.promiseAllChunked)(byType.uploadFile.map(process), 10000, false);
|
|
540
|
+
await (0, utils_1.promiseAllChunked)(byType.downloadFile.map(process), 10000, false);
|
|
548
541
|
return {
|
|
549
542
|
doneTasks: executed,
|
|
550
543
|
errors
|