From 403f1a62f66c33a7d39c17704f34debe579c89b0 Mon Sep 17 00:00:00 2001 From: Estevan Castilho Date: Thu, 13 Aug 2026 02:36:20 +0000 Subject: BranchManager stubs --- lib/kernel/BranchManager.ml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 lib/kernel/BranchManager.ml (limited to 'lib/kernel/BranchManager.ml') diff --git a/lib/kernel/BranchManager.ml b/lib/kernel/BranchManager.ml new file mode 100644 index 0000000..6884219 --- /dev/null +++ b/lib/kernel/BranchManager.ml @@ -0,0 +1,29 @@ +module BranchValue = Merkle.StringKey (* FIXME *) + +type branch = string + +module Make (S : Abstract.Storage.STORAGE) = struct + module I = Merkle.Interface (S) (Merkle.StringKey) (BranchValue) + module SI = Storage.Make (S) + + type manager = { storage: S.connection; head: I.node Atomic.t } + + let initialize storage addr = + let open Utilities.Result in + SI.with_transaction storage (fun tx -> + let* head = I.find tx addr in + Ok { storage; head = Option.value head ~default:I.empty |> Atomic.make }) + + let fetch { storage; head } branch_name = + SI.with_transaction storage (fun tx -> + let head = Atomic.get head in + I.lookup tx branch_name head) + + let update ({ storage; head } as manager) branch_name f = + let open Utilities.Result in + SI.with_transaction storage (fun tx -> + let* new_head = Utilities.Atomic.mswap head (fun head -> + let* branch = I.lookup tx branch_name head in + f branch) in + Ok { manager with head = new_head }) +end -- cgit v1.2.3