dorky 4.1.1 → 4.1.3
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 +2 -1
- package/bin/index.js +6 -5
- package/bin/mcp.js +34 -34
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -191,6 +191,7 @@ This command:
|
|
|
191
191
|
- Updates modified files (based on hash comparison)
|
|
192
192
|
- Removes files from remote storage that were unstaged using `dorky --rm`
|
|
193
193
|
- Skips unchanged files
|
|
194
|
+
- Skips push entirely if the staged state already matches the latest commit
|
|
194
195
|
|
|
195
196
|
### Pull Files from Storage (`-pl`)
|
|
196
197
|
|
|
@@ -220,7 +221,7 @@ Prints all past push commits in reverse chronological order, showing the commit
|
|
|
220
221
|
dorky --checkout <commit-id>
|
|
221
222
|
```
|
|
222
223
|
|
|
223
|
-
Downloads the files as they were at the given commit from remote storage and
|
|
224
|
+
Downloads the files as they were at the given commit from remote storage and stages them locally. Run `dorky --push` afterward to publish the restored state as a new commit. The commit ID can be found with `--log`. Prefix matching is supported (e.g. `dorky --checkout a1b2` if the full ID is `a1b2c3d4`).
|
|
224
225
|
|
|
225
226
|
### Destroy Project (`-d`)
|
|
226
227
|
|
package/bin/index.js
CHANGED
|
@@ -96,7 +96,7 @@ async function authorizeGoogleDriveClient(forceReauth = false) {
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
async function init(storage) {
|
|
99
|
-
if (existsSync(
|
|
99
|
+
if (existsSync(CREDENTIALS_PATH)) return console.log(chalk.yellow("⚠ Dorky is already initialized."));
|
|
100
100
|
if (!["aws", "google-drive"].includes(storage)) return console.log(chalk.red("✖ Invalid storage. Use 'aws' or 'google-drive'."));
|
|
101
101
|
|
|
102
102
|
let credentials = {};
|
|
@@ -107,14 +107,15 @@ async function init(storage) {
|
|
|
107
107
|
}
|
|
108
108
|
credentials = { storage: "aws", accessKey: process.env.AWS_ACCESS_KEY, secretKey: process.env.AWS_SECRET_KEY, awsRegion: process.env.AWS_REGION, bucket: process.env.BUCKET_NAME };
|
|
109
109
|
} else {
|
|
110
|
+
if (!existsSync(DORKY_DIR)) mkdirSync(DORKY_DIR);
|
|
110
111
|
const client = await authorizeGoogleDriveClient(true);
|
|
111
112
|
credentials = { storage: "google-drive", ...client.credentials };
|
|
112
113
|
}
|
|
113
114
|
|
|
114
|
-
mkdirSync(DORKY_DIR);
|
|
115
|
-
writeJson(METADATA_PATH, { "stage-1-files": {}, "uploaded-files": {} });
|
|
116
|
-
writeJson(HISTORY_PATH, []);
|
|
117
|
-
writeFileSync(".dorkyignore", "");
|
|
115
|
+
if (!existsSync(DORKY_DIR)) mkdirSync(DORKY_DIR);
|
|
116
|
+
if (!existsSync(METADATA_PATH)) writeJson(METADATA_PATH, { "stage-1-files": {}, "uploaded-files": {} });
|
|
117
|
+
if (!existsSync(HISTORY_PATH)) writeJson(HISTORY_PATH, []);
|
|
118
|
+
if (!existsSync(".dorkyignore")) writeFileSync(".dorkyignore", "");
|
|
118
119
|
writeJson(CREDENTIALS_PATH, credentials);
|
|
119
120
|
console.log(chalk.green("✔ Dorky project initialized successfully."));
|
|
120
121
|
updateGitIgnore();
|
package/bin/mcp.js
CHANGED
|
@@ -68,7 +68,7 @@ async function authorizeGoogleDriveClient(forceReauth = false) {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
async function init(storage) {
|
|
71
|
-
if (existsSync(
|
|
71
|
+
if (existsSync(CREDENTIALS_PATH)) return "Dorky is already initialized.";
|
|
72
72
|
if (!["aws", "google-drive"].includes(storage)) return "Invalid storage. Use 'aws' or 'google-drive'.";
|
|
73
73
|
|
|
74
74
|
let credentials = {};
|
|
@@ -78,14 +78,15 @@ async function init(storage) {
|
|
|
78
78
|
}
|
|
79
79
|
credentials = { storage: "aws", accessKey: process.env.AWS_ACCESS_KEY, secretKey: process.env.AWS_SECRET_KEY, awsRegion: process.env.AWS_REGION, bucket: process.env.BUCKET_NAME };
|
|
80
80
|
} else {
|
|
81
|
+
if (!existsSync(DORKY_DIR)) mkdirSync(DORKY_DIR);
|
|
81
82
|
const client = await authorizeGoogleDriveClient(true);
|
|
82
83
|
credentials = { storage: "google-drive", ...client.credentials };
|
|
83
84
|
}
|
|
84
85
|
|
|
85
|
-
mkdirSync(DORKY_DIR);
|
|
86
|
-
writeJson(METADATA_PATH, { "stage-1-files": {}, "uploaded-files": {} });
|
|
87
|
-
writeJson(HISTORY_PATH, []);
|
|
88
|
-
writeFileSync(".dorkyignore", "");
|
|
86
|
+
if (!existsSync(DORKY_DIR)) mkdirSync(DORKY_DIR);
|
|
87
|
+
if (!existsSync(METADATA_PATH)) writeJson(METADATA_PATH, { "stage-1-files": {}, "uploaded-files": {} });
|
|
88
|
+
if (!existsSync(HISTORY_PATH)) writeJson(HISTORY_PATH, []);
|
|
89
|
+
if (!existsSync(".dorkyignore")) writeFileSync(".dorkyignore", "");
|
|
89
90
|
writeJson(CREDENTIALS_PATH, credentials);
|
|
90
91
|
updateGitIgnore();
|
|
91
92
|
return "Dorky project initialized successfully.";
|
|
@@ -243,6 +244,11 @@ async function push() {
|
|
|
243
244
|
|
|
244
245
|
if (filesToUpload.length === 0 && filesToDelete.length === 0) return "Nothing to push.";
|
|
245
246
|
|
|
247
|
+
const commitFiles = { ...meta["stage-1-files"] };
|
|
248
|
+
const commitId = md5(JSON.stringify(commitFiles)).slice(0, 8);
|
|
249
|
+
const history = existsSync(HISTORY_PATH) ? JSON.parse(readFileSync(HISTORY_PATH)) : [];
|
|
250
|
+
if (history.length > 0 && history[history.length - 1].id === commitId) return "Already on the latest commit. Nothing to push.";
|
|
251
|
+
|
|
246
252
|
const creds = readJson(CREDENTIALS_PATH);
|
|
247
253
|
const results = [];
|
|
248
254
|
|
|
@@ -295,35 +301,30 @@ async function push() {
|
|
|
295
301
|
meta["uploaded-files"] = { ...meta["stage-1-files"] };
|
|
296
302
|
writeJson(METADATA_PATH, meta);
|
|
297
303
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
const history = existsSync(HISTORY_PATH) ? JSON.parse(readFileSync(HISTORY_PATH)) : [];
|
|
301
|
-
if (!history.find(e => e.id === commitId)) {
|
|
302
|
-
history.push({ id: commitId, timestamp: new Date().toISOString(), files: commitFiles });
|
|
303
|
-
writeJson(HISTORY_PATH, history);
|
|
304
|
+
history.push({ id: commitId, timestamp: new Date().toISOString(), files: commitFiles });
|
|
305
|
+
writeJson(HISTORY_PATH, history);
|
|
304
306
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
}
|
|
325
|
-
results.push(`History commit saved: ${commitId}`);
|
|
307
|
+
const root = path.basename(process.cwd());
|
|
308
|
+
const historyPrefix = path.join(root, ".dorky-history", commitId);
|
|
309
|
+
if (creds.storage === "aws") {
|
|
310
|
+
await runS3(creds, async (s3, bucket) => {
|
|
311
|
+
await Promise.all(Object.keys(commitFiles).map(async f => {
|
|
312
|
+
const key = path.join(historyPrefix, f);
|
|
313
|
+
await s3.send(new PutObjectCommand({ Bucket: bucket, Key: key, Body: readFileSync(f) }));
|
|
314
|
+
}));
|
|
315
|
+
});
|
|
316
|
+
} else if (creds.storage === "google-drive") {
|
|
317
|
+
await runDrive(async (drive) => {
|
|
318
|
+
for (const f of Object.keys(commitFiles)) {
|
|
319
|
+
const parentId = await getFolderId(path.join(root, ".dorky-history", commitId, path.dirname(f)), drive);
|
|
320
|
+
await drive.files.create({
|
|
321
|
+
requestBody: { name: path.basename(f), parents: [parentId] },
|
|
322
|
+
media: { mimeType: commitFiles[f]["mime-type"], body: createReadStream(f) }
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
326
|
}
|
|
327
|
+
results.push(`History commit saved: ${commitId}`);
|
|
327
328
|
|
|
328
329
|
return results.join("\n");
|
|
329
330
|
}
|
|
@@ -422,9 +423,8 @@ async function checkout(commitId) {
|
|
|
422
423
|
|
|
423
424
|
const meta = readJson(METADATA_PATH);
|
|
424
425
|
meta["stage-1-files"] = { ...entry.files };
|
|
425
|
-
meta["uploaded-files"] = { ...entry.files };
|
|
426
426
|
writeJson(METADATA_PATH, meta);
|
|
427
|
-
results.push(`Staged
|
|
427
|
+
results.push(`Staged state restored to commit ${entry.id}. Run push to publish this state.`);
|
|
428
428
|
return results.join("\n");
|
|
429
429
|
}
|
|
430
430
|
|