From d0723239c0a5edd350215549501ac8c9dd2e6d64 Mon Sep 17 00:00:00 2001 From: Fenris Wolf Date: Mon, 2 Mar 2026 22:45:36 +0100 Subject: [PATCH] =?UTF-8?q?[add]=20grundlegende=20"init"-Funktionalit?= =?UTF-8?q?=C3=A4t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/conf.ts | 14 +++++- source/logic/transfer/_abstract.ts | 6 +++ source/logic/transfer/borg.ts | 75 +++++++++++++++++++++++++++--- source/logic/transfer/local.ts | 4 ++ source/main.ts | 25 ++++++++-- 5 files changed, 111 insertions(+), 13 deletions(-) diff --git a/source/conf.ts b/source/conf.ts index f640963..87859b5 100644 --- a/source/conf.ts +++ b/source/conf.ts @@ -110,7 +110,17 @@ namespace _mimir.conf "kind": { "type": "string", "enum": ["none"] - } + }, + "data": { + "nullable": true, + "type": "object", + "properties": { + }, + "additionalProperties": false, + "required": [ + ], + "default": {} + }, }, "additionalProperties": false, "required": [ @@ -138,7 +148,7 @@ namespace _mimir.conf "required": [ "passphrase" ] - } + }, }, "additionalProperties": false, "required": [ diff --git a/source/logic/transfer/_abstract.ts b/source/logic/transfer/_abstract.ts index a2f340a..da20f6b 100644 --- a/source/logic/transfer/_abstract.ts +++ b/source/logic/transfer/_abstract.ts @@ -23,6 +23,12 @@ namespace _mimir.transfer /** */ export type type_logic = { + init : ( + ( + ) + => + Array + ); execute : ( ( name : string, diff --git a/source/logic/transfer/borg.ts b/source/logic/transfer/borg.ts index 4956d32..55c43ae 100644 --- a/source/logic/transfer/borg.ts +++ b/source/logic/transfer/borg.ts @@ -62,6 +62,72 @@ namespace _mimir.transfer.borg }; + /** + */ + function get_passphrase( + parameters : type_parameters + ) : (null | string) + { + switch (parameters.encryption.kind) + { + case "none": + { + return null; + break; + } + case "repokey": + { + return parameters.encryption.data.passphrase; + break; + } + default: + { + throw (new Error("unhandled encryption kind")); + break; + } + } + } + + + /** + */ + export function init( + parameters : type_parameters, + ) : Array + { + const result : Array = []; + result.push( + _mimir.helpers.borg.init( + parameters.repository, + { + "encryption": ((encryption : type_encryption) => { + switch (encryption.kind) + { + case "none": + { + return "none"; + break; + } + case "repokey": + { + return "repokey"; + break; + } + default: + { + throw (new Error("unhandled encryption kind")); + break; + } + } + }) (parameters.encryption), + "passphrase": get_passphrase(parameters), + } + ) + ); + return result; + } + + /** */ export function execute( @@ -84,13 +150,7 @@ namespace _mimir.transfer.borg ), [directory], { - "passphrase": ( - (parameters.encryption.kind === "repokey") - ? - parameters.encryption.data.passphrase - : - null - ), + "passphrase": get_passphrase(parameters), "compression": parameters.compression, } ) @@ -116,6 +176,7 @@ namespace _mimir.transfer.borg ) : _mimir.transfer.type_logic { return { + "init": () => init(parameters), "execute": (name, stamp, directory) => execute(parameters, name, stamp, directory), }; } diff --git a/source/logic/transfer/local.ts b/source/logic/transfer/local.ts index 5adf8c0..779a046 100644 --- a/source/logic/transfer/local.ts +++ b/source/logic/transfer/local.ts @@ -73,6 +73,10 @@ namespace _mimir.transfer.local ) : _mimir.transfer.type_logic { return { + /** + * @todo? + */ + "init": () => [], "execute": (name, stamp, directory) => execute(parameters, name, stamp, directory), }; } diff --git a/source/main.ts b/source/main.ts index 7758bc2..f71e2b1 100644 --- a/source/main.ts +++ b/source/main.ts @@ -168,10 +168,27 @@ namespace _mimir } case "init": { - /** - * @todo implement - */ - return Promise.reject(new Error("not implemented")); + const conf : _mimir.conf.type_conf = await _mimir.conf.get(args["conf_path"]); + + let commands : Array = []; + const commands_add : ((command : string) => void) = (command) => { + commands.push(command); + }; + const commands_apply : (() => void) = () => { + process.stdout.write(commands.join("\n") + "\n"); + }; + + // transfer + { + const target_logic : _mimir.transfer.type_logic = _mimir.transfer.get_logic(conf.target); + commands = commands.concat( + target_logic.init( + ) + ); + } + + commands_apply(); + break; } case "run":