Skip to content

Commit f7c1ebf

Browse files
committed
Fix moving data directory across devices
1 parent ba37a34 commit f7c1ebf

File tree

5 files changed

+14
-33
lines changed

5 files changed

+14
-33
lines changed

packages/protocol/src/common/util.ts

-19
Original file line numberDiff line numberDiff line change
@@ -97,22 +97,3 @@ export const parse = (arg: string): any => { // tslint:disable-line no-any
9797

9898
return arg ? convert(JSON.parse(arg)) : arg;
9999
};
100-
101-
export const mkdirP = async (path: string): Promise<void> => {
102-
// Since our fills require this file, we can't import them up top or we get
103-
// circular dependency issue.
104-
const { mkdir } = require("fs") as typeof import("fs");
105-
const { promisify } = require("util") as typeof import("util");
106-
const split = path.replace(/^\/*|\/*$/g, "").split("/");
107-
let dir = "";
108-
while (split.length > 0) {
109-
dir += "/" + split.shift();
110-
try {
111-
await promisify(mkdir)(dir);
112-
} catch (error) {
113-
if (error.code !== "EEXIST" && error.code !== "EISDIR") {
114-
throw error;
115-
}
116-
}
117-
}
118-
};

packages/protocol/src/node/server.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
import { mkdirp } from "fs-extra";
12
import * as os from "os";
23
import { logger, field } from "@coder/logger";
34
import { Pong, ClientMessage, WorkingInitMessage, ServerMessage } from "../proto";
45
import { evaluate, ActiveEvaluation } from "./evaluate";
56
import { ForkProvider } from "../common/helpers";
67
import { ReadWriteConnection } from "../common/connection";
7-
import { mkdirP } from "../common/util";
88

99
export interface ServerOptions {
1010
readonly workingDirectory: string;
@@ -42,9 +42,9 @@ export class Server {
4242
}
4343

4444
Promise.all([
45-
mkdirP(this.options.cacheDirectory),
46-
mkdirP(this.options.dataDirectory),
47-
mkdirP(this.options.workingDirectory),
45+
mkdirp(this.options.cacheDirectory),
46+
mkdirp(this.options.dataDirectory),
47+
mkdirp(this.options.workingDirectory),
4848
]).catch((error) => {
4949
logger.error(error.message, field("error", error));
5050
});

packages/server/src/cli.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
import * as fse from "fs-extra";
12
import { field, logger } from "@coder/logger";
2-
import { mkdirP } from "@coder/protocol";
33
import { ServerMessage, SharedProcessActiveMessage } from "@coder/protocol/src/proto";
44
import { Command, flags } from "@oclif/command";
55
import { fork, ForkOptions, ChildProcess } from "child_process";
@@ -55,16 +55,15 @@ export class Entry extends Command {
5555
if (!fs.existsSync(dataDir)) {
5656
const oldDataDir = path.resolve(path.join(os.homedir(), ".code-server"));
5757
if (fs.existsSync(oldDataDir)) {
58-
await mkdirP(path.basename(dataDir));
59-
fs.renameSync(oldDataDir, dataDir);
58+
await fse.move(oldDataDir, dataDir);
6059
logger.info(`Moved data directory from ${oldDataDir} to ${dataDir}`);
6160
}
6261
}
6362

6463
await Promise.all([
65-
mkdirP(cacheHome),
66-
mkdirP(dataDir),
67-
mkdirP(workingDir),
64+
fse.mkdirp(cacheHome),
65+
fse.mkdirp(dataDir),
66+
fse.mkdirp(workingDir),
6867
]);
6968

7069
setupNativeModules(dataDir);

packages/server/src/server.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import { mkdirp } from "fs-extra";
12
import { logger, field } from "@coder/logger";
2-
import { mkdirP, ReadWriteConnection } from "@coder/protocol";
3+
import { ReadWriteConnection } from "@coder/protocol";
34
import { Server, ServerOptions } from "@coder/protocol/src/node/server";
45
import * as express from "express";
56
//@ts-ignore
@@ -259,7 +260,7 @@ export const createApp = async (options: CreateAppOptions): Promise<{
259260
});
260261
req.on("end", async () => {
261262
const body = data.join("");
262-
await mkdirP(path.dirname(fullPath));
263+
await mkdirp(path.dirname(fullPath));
263264
fs.writeFileSync(fullPath, body);
264265
logger.debug("Wrote resource", field("path", fullPath), field("content-length", body.length));
265266
res.status(200);

packages/vscode/src/fill/storageDatabase.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { readFile, writeFile } from "fs";
2+
import { mkdirp } from "fs-extra";
23
import * as path from "path";
34
import { promisify } from "util";
45
import { IDisposable } from "@coder/disposable";
56
import { logger, field } from "@coder/logger";
6-
import { mkdirP } from "@coder/protocol";
77
import { Event } from "vs/base/common/event";
88
import * as workspaceStorage from "vs/base/node/storage";
99
import * as globalStorage from "vs/platform/storage/node/storageIpc";
@@ -78,7 +78,7 @@ class StorageDatabase implements workspaceStorage.IStorageDatabase {
7878
}
7979

8080
private async save(): Promise<void> {
81-
await mkdirP(path.dirname(this.path));
81+
await mkdirp(path.dirname(this.path));
8282

8383
return promisify(writeFile)(this.path, this.content);
8484
}

0 commit comments

Comments
 (0)