summaryrefslogtreecommitdiff
path: root/lib/git_helpers.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/git_helpers.ml')
-rw-r--r--lib/git_helpers.ml34
1 files changed, 31 insertions, 3 deletions
diff --git a/lib/git_helpers.ml b/lib/git_helpers.ml
index 0626d02..4e2215e 100644
--- a/lib/git_helpers.ml
+++ b/lib/git_helpers.ml
@@ -1,11 +1,39 @@
open Lwt.Infix
-let get_head_commit_hash repo_path =
- let full_path = Filename.concat Config.git_directory repo_path in
- let%lwt store_result = Git_unix.Store.v @@ Fpath.v full_path in
+let full_path path = Filename.concat Config.git_directory path
+
+let head_commit_hash repo_path =
+ let%lwt store_result = Git_unix.Store.v @@ Fpath.v @@ full_path repo_path in
match store_result with
| Error _ -> Lwt.return_error "Could not open the Git repository."
| Ok store -> (
Git_unix.Store.Ref.resolve store Git.Reference.head >|= function
| Error _ -> Error ("Failed to resolve HEAD for repo " ^ repo_path)
| Ok hash -> Ok (Git_unix.Store.Hash.to_hex hash))
+
+let latest_commits repo_path count =
+ let cmd =
+ Printf.sprintf "git -C %s log --pretty=format:'%%ad %%s' --date=short -n %d"
+ (full_path repo_path) count
+ in
+ Lwt.catch
+ (fun () ->
+ let%lwt output = Lwt_process.pread ("", [| "sh"; "-c"; cmd |]) in
+ let lines = String.split_on_char '\n' output in
+ Lwt.return_ok lines)
+ (fun exn -> Lwt.return_error (Printexc.to_string exn))
+
+let all_branches repo_path =
+ let cmd =
+ Printf.sprintf "git -C %s branch --format=%%(refname:short)"
+ @@ full_path repo_path
+ in
+ Lwt.catch
+ (fun () ->
+ let%lwt output = Lwt_process.pread ("", [| "sh"; "-c"; cmd |]) in
+ let branches =
+ String.split_on_char '\n' output
+ |> List.filter (fun s -> String.trim s <> "")
+ in
+ Lwt.return_ok branches)
+ (fun exn -> Lwt.return_error (Printexc.to_string exn))
Copyright 2019--2025 Marius PETER