pro and smart conflict
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import type { FakeFs } from "./fsAll";
|
||||
|
||||
export async function copyFolder(key: string, left: FakeFs, right: FakeFs) {
|
||||
if (!key.endsWith("/")) {
|
||||
throw Error(`should not call ${key} in copyFolder`);
|
||||
}
|
||||
const statsLeft = await left.stat(key);
|
||||
const entity = await right.mkdir(key, statsLeft.mtimeCli);
|
||||
return {
|
||||
entity: entity,
|
||||
content: undefined,
|
||||
};
|
||||
}
|
||||
|
||||
export async function copyFile(key: string, left: FakeFs, right: FakeFs) {
|
||||
// console.debug(`copyFile: key=${key}, left=${left.kind}, right=${right.kind}`);
|
||||
if (key.endsWith("/")) {
|
||||
throw Error(`should not call ${key} in copyFile`);
|
||||
}
|
||||
const statsLeft = await left.stat(key);
|
||||
const content = await left.readFile(key);
|
||||
|
||||
if (statsLeft.size === undefined || statsLeft.size === 0) {
|
||||
// some weird bugs on android not returning size. just ignore them
|
||||
statsLeft.size = content.byteLength;
|
||||
} else {
|
||||
if (statsLeft.size !== content.byteLength) {
|
||||
throw Error(
|
||||
`error copying ${left.kind}=>${right.kind}: size not matched`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (statsLeft.mtimeCli === undefined) {
|
||||
throw Error(`error copying ${left.kind}=>${right.kind}, no mtimeCli`);
|
||||
}
|
||||
|
||||
// console.debug(`copyFile: about to start right.writeFile`);
|
||||
return {
|
||||
entity: await right.writeFile(
|
||||
key,
|
||||
content,
|
||||
statsLeft.mtimeCli,
|
||||
statsLeft.mtimeCli /* TODO */
|
||||
),
|
||||
content: content,
|
||||
};
|
||||
}
|
||||
|
||||
export async function copyFileOrFolder(
|
||||
key: string,
|
||||
left: FakeFs,
|
||||
right: FakeFs
|
||||
) {
|
||||
if (key.endsWith("/")) {
|
||||
return await copyFolder(key, left, right);
|
||||
} else {
|
||||
return await copyFile(key, left, right);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user