logarion/src/core/lpath.ml

26 lines
1012 B
OCaml

open Fpath
type repo_t = Repo of t
type note_t = Note of { repo: repo_t; basename: t }
let fpath_of_repo = function Repo p -> p
let string_of_repo r = fpath_of_repo r |> to_string
let repo_of_string s = Repo (v s)
let fpath_of_note = function Note n -> (fpath_of_repo n.repo // n.basename)
let string_of_note n = fpath_of_note n |> to_string
let note_of_basename repo s = Note { repo; basename = v s }
let alias_of_note = function Note n -> n.basename |> rem_ext |> to_string
let note_of_alias repo extension alias = note_of_basename repo (alias ^ extension)
let versioned_basename_of_title ?(version=0) repo extension (title : string) =
let notes_fpath = fpath_of_repo repo in
let basename = v @@ Meta.string_alias title in
let rec next version =
let candidate = basename |> add_ext (string_of_int version) |> add_ext extension in
if Sys.file_exists (to_string (notes_fpath // candidate))
then next (succ version)
else note_of_basename repo (to_string candidate)
in
next version