From 23c2fa1de37a4f09d68ebeebfcd54e1ebea1bb39 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sat, 27 Jan 2024 14:49:16 +0100 Subject: [PATCH] feat(cli): make --raw the default for cli sync --- cli/script.ts | 39 ++++++++++++++++++++++++++------------- cli/sync.ts | 38 +++++++++++++++++++++----------------- frontend/src/lib/utils.ts | 4 ---- 3 files changed, 47 insertions(+), 34 deletions(-) diff --git a/cli/script.ts b/cli/script.ts index 5bb96533e3..2d075bd765 100644 --- a/cli/script.ts +++ b/cli/script.ts @@ -26,6 +26,9 @@ import { ScriptLanguage, inferContentTypeFromFilePath, } from "./script_common.ts"; +import { elementsToMap } from "./sync.ts"; +import { ignoreF } from "./sync.ts"; +import { FSFSElement } from "./sync.ts"; export interface ScriptFile { parent_hash?: string; @@ -561,17 +564,35 @@ async function bootstrap( async function generateMetadata( opts: GlobalOptions & { lockOnly?: boolean; schemaOnly?: boolean }, - scriptPath: string + scriptPath?: string ) { - if (!validatePath(scriptPath)) { + if (scriptPath == "") { + scriptPath = undefined; + } + if (scriptPath && !validatePath(scriptPath)) { return; } const workspace = await resolveWorkspace(opts); await requireLogin(opts); - // read script metadata file - await generateMetadataInternal(scriptPath, workspace, opts); + if (scriptPath) { + // read script metadata file + await generateMetadataInternal(scriptPath, workspace, opts); + } else { + log.error("Not implemented"); + // const elems = await elementsToMap( + // await FSFSElement(Deno.cwd()), + // await ignoreF(), + // false, + // {} + // ); + // log.info("Generating metadata for all stale scripts"); + // for (const e of Object.keys(elems)) { + // log.info(`Processing ${e}`); + // await generateMetadataInternal(e, workspace, opts); + // } + } } const command = new Command() @@ -607,15 +628,7 @@ const command = new Command() "generate-metadata", "re-generate the metadata file updating the lock and the script schema" ) - .arguments("") - .option("--lock-only", "re-generate only the lock") - .option("--schema-only", "re-generate only script schema") - .action(generateMetadata as any) - .command( - "update-all-locks", - "re-generate the metadata file updating the lock and the script schema" - ) - .arguments("") + .arguments("[script:string]") .option("--lock-only", "re-generate only the lock") .option("--schema-only", "re-generate only script schema") .action(generateMetadata as any); diff --git a/cli/sync.ts b/cli/sync.ts index f5887d3b2d..c041284ebc 100644 --- a/cli/sync.ts +++ b/cli/sync.ts @@ -48,7 +48,7 @@ type DynFSElement = { getChildren(): AsyncIterable; }; -async function FSFSElement(p: string): Promise { +export async function FSFSElement(p: string): Promise { function _internal_element(localP: string, isDir: boolean): DynFSElement { return { isDirectory: isDir, @@ -303,7 +303,7 @@ type Edit = { name: "edited"; path: string; before: string; after: string }; type Change = Added | Deleted | Edit; -async function elementsToMap( +export async function elementsToMap( els: DynFSElement, ignore: (path: string, isDirectory: boolean) => boolean, json: boolean, @@ -504,7 +504,7 @@ export async function ignoreF(): Promise< async function pull( opts: GlobalOptions & { - raw: boolean; + stateful: boolean; yes: boolean; failConflicts: boolean; plainSecrets?: boolean; @@ -515,7 +515,7 @@ async function pull( includeSchedules?: boolean; } ) { - if (!opts.raw) { + if (opts.stateful) { await ensureDir(path.join(Deno.cwd(), ".wmill")); } @@ -538,7 +538,7 @@ async function pull( ))!, !opts.json ); - const local = opts.raw + const local = !opts.stateful ? await FSFSElement(Deno.cwd()) : await FSFSElement(path.join(Deno.cwd(), ".wmill")); const changes = await compareDynFSElement( @@ -613,19 +613,19 @@ async function pull( } await Deno.writeTextFile(target, change.after); - if (!opts.raw) { + if (opts.stateful) { await ensureDir(path.dirname(stateTarget)); await Deno.copyFile(target, stateTarget); } } else if (change.name === "added") { await ensureDir(path.dirname(target)); - if (!opts.raw) { + if (opts.stateful) { await ensureDir(path.dirname(stateTarget)); log.info(`Adding ${getTypeStrFromPath(change.path)} ${change.path}`); } await Deno.writeTextFile(target, change.content); log.info(`Writing ${getTypeStrFromPath(change.path)} ${change.path}`); - if (!opts.raw) { + if (opts.stateful) { await Deno.copyFile(target, stateTarget); } } else if (change.name === "deleted") { @@ -634,11 +634,11 @@ async function pull( `Deleting ${getTypeStrFromPath(change.path)} ${change.path}` ); await Deno.remove(target); - if (!opts.raw) { + if (opts.stateful) { await Deno.remove(stateTarget); } } catch { - if (!opts.raw) { + if (opts.stateful) { await Deno.remove(stateTarget); } } @@ -715,6 +715,7 @@ function removeSuffix(str: string, suffix: string) { async function push( opts: GlobalOptions & { + stateful: boolean; raw: boolean; yes: boolean; skipPull: boolean; @@ -728,7 +729,10 @@ async function push( message?: string; } ) { - if (!opts.raw) { + if (opts.raw) { + log.info("--raw is now the default, you can remove it as a flag"); + } + if (opts.stateful) { if (!opts.skipPull) { log.info( colors.gray("You need to be up-to-date before pushing, pulling first.") @@ -819,7 +823,7 @@ async function push( lockfileUseArray ) ) { - if (!opts.raw && stateExists) { + if (opts.stateful && stateExists) { await Deno.writeTextFile(stateTarget, change.after); } continue; @@ -833,12 +837,12 @@ async function push( opts ) ) { - if (!opts.raw && stateExists) { + if (opts.stateful && stateExists) { await Deno.writeTextFile(stateTarget, change.after); } continue; } - if (!opts.raw) { + if (opts.stateful) { await ensureDir(path.dirname(stateTarget)); log.info(`Editing ${getTypeStrFromPath(change.path)} ${change.path}`); } @@ -854,7 +858,7 @@ async function push( opts.message ); - if (!opts.raw && stateExists) { + if (opts.stateful && stateExists) { await Deno.writeTextFile(stateTarget, change.after); } } else if (change.name === "added") { @@ -875,7 +879,7 @@ async function push( ) { continue; } - if (!opts.raw && stateExists) { + if (opts.stateful && stateExists) { await ensureDir(path.dirname(stateTarget)); log.info(`Adding ${getTypeStrFromPath(change.path)} ${change.path}`); } @@ -889,7 +893,7 @@ async function push( opts.message ); - if (!opts.raw && stateExists) { + if (opts.stateful && stateExists) { await Deno.writeTextFile(stateTarget, change.content); } } else if (change.name === "deleted") { diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts index 73d6410a54..3534d68f9a 100644 --- a/frontend/src/lib/utils.ts +++ b/frontend/src/lib/utils.ts @@ -679,10 +679,6 @@ export function roughSizeOfObject(object: object | string) { return object.length * 2 } - if (typeof object != 'object') { - return 0 - } - var objectList: any[] = [] var stack = [object] var bytes = 0