summaryrefslogtreecommitdiff
path: root/lib/git_presenters.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/git_presenters.ml')
-rw-r--r--lib/git_presenters.ml138
1 files changed, 0 insertions, 138 deletions
diff --git a/lib/git_presenters.ml b/lib/git_presenters.ml
deleted file mode 100644
index 963f1bd..0000000
--- a/lib/git_presenters.ml
+++ /dev/null
@@ -1,138 +0,0 @@
-(* -*- mode: tuareg; -*- *)
-
-module Store = Git_unix.Store
-open Lwt_result.Syntax
-open Lwt_result.Infix
-open Config
-
-let full_path path = Filename.concat config.git_project_root path
-
-let store repo =
- let path = Fpath.v @@ full_path repo in
- Store.v ~dotgit:path path
-
-let repo_description repo =
- let description_path = Filename.concat (full_path repo) "description" in
- In_channel.with_open_text description_path In_channel.input_all
-
-type user = Git.User.t
-
-(* let all_authors store = *)
-(* let* store = store repo in *)
-
-type commit = {
- hash : string;
- short_hash : string;
- parents : string list;
- author : user;
- message : string option;
-}
-
-let to_commit store hash =
- Store.read store hash >>= function
- | Git.Value.Commit c ->
- let hash = Store.Hash.to_hex hash in
- Lwt_result.return
- {
- hash;
- short_hash = String.sub hash 0 8;
- parents = Store.Value.Commit.parents c |> List.map Store.Hash.to_hex;
- author = Store.Value.Commit.author c;
- message = Store.Value.Commit.message c;
- }
- | _ -> Lwt_result.fail (`Msg "value is not a commit")
-
-let commit_of_id repo id =
- let* store = store repo in
- let hash = Store.Hash.of_hex id in
- to_commit store hash
-
-let recent_commits repo n =
- let* store = store repo in
- let* head = Store.Ref.resolve store Git.Reference.head in
- let rec walk acc hash count =
- if count = 0 then Lwt_result.return (List.rev acc)
- else
- let* commit = to_commit store hash in
- match commit.parents with
- | parent :: _ ->
- walk (commit :: acc) (Store.Hash.of_hex parent) (count - 1)
- | [] -> Lwt_result.return (List.rev (commit :: acc))
- in
- walk [] head n
-
-type branch = { hash : string; name : string }
-
-let all_branches repo =
- let* store = store repo in
- let open Lwt.Syntax in
- let* refs = Store.Ref.list store in
- let branches =
- List.map
- (fun (reference, hash) ->
- let name = Git.Reference.to_string reference in
- let hash = Store.Hash.to_hex hash in
- { name; hash })
- refs
- in
- Lwt_result.return branches
-
-type tree_entry = {
- hash : string;
- short_hash : string;
- name : string;
- perm : int;
-}
-
-type tree = { hash : string; short_hash : string; entries : tree_entry list }
-type blob = { content : string }
-
-let to_entry (entry : Store.Value.Tree.entry) =
- let perm =
- match entry.perm with
- | `Commit -> 0o160000
- | `Dir -> 0o040000
- | `Everybody -> 0o100664
- | `Exec -> 0o100755
- | `Link -> 0o120000
- | `Normal -> 0o100644
- in
- let hash = Store.Hash.to_hex entry.node in
- let short_hash = String.sub hash 0 8 in
- { hash; short_hash; name = entry.name; perm }
-
-let to_tree store hash =
- Store.read store hash >>= function
- | Git.Value.Tree tree ->
- let hash = Store.Hash.to_hex hash in
- let short_hash = String.sub hash 0 8 in
- let entries = Store.Value.Tree.to_list tree |> List.map to_entry in
- Lwt_result.return { hash; short_hash; entries }
- | _ -> Lwt_result.fail (`Msg "value is not a tree")
-
-let to_blob store hash =
- Store.read store hash >>= function
- | Git.Value.Blob blob ->
- let content = Store.Value.Blob.to_string blob in
- Lwt_result.return { content }
- | _ -> Lwt_result.fail (`Msg "value is not a blob")
-
-let head_tree repo =
- let* store = store repo in
- let* hash =
- Store.Ref.resolve store Git.Reference.head >>= Store.read store >>= function
- | Git.Value.Commit commit ->
- Store.Value.Commit.tree commit |> Lwt_result.return
- | _ -> `Msg "no head tree id" |> Lwt_result.fail
- in
- to_tree store hash
-
-let tree_of_id repo id =
- let* store = store repo in
- let hash = Store.Hash.of_hex id in
- to_tree store hash
-
-let blob_of_id repo id =
- let* store = store repo in
- let hash = Store.Hash.of_hex id in
- to_blob store hash
Copyright 2019--2025 Marius PETER