Blob Blame History Raw
From: Peter Lemenkov <lemenkov@gmail.com>
Date: Fri, 30 Jun 2017 19:06:44 +0300
Subject: [PATCH] Don't use git command for branch retrieval

Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>

diff --git a/src/edown_doclet.erl b/src/edown_doclet.erl
index b0ad8e9..4262777 100644
--- a/src/edown_doclet.erl
+++ b/src/edown_doclet.erl
@@ -229,15 +229,30 @@ do_redirect(Href, Prefix, Args) ->
     end.
 
 get_git_branch() ->
-    case os:cmd("git rev-parse --abbrev-ref HEAD") of
-	"fatal:" ++ _ -> "master";  % sensible default
-	Git ->
-	    case string:tokens(Git, " \n") of
-		[Branch]	-> Branch;
-		Other		-> erlang:error({cannot_get_git_branch, Other})
+    {ok, CWD} = file:get_cwd(),
+    case get_git_head_file(CWD) of
+        false -> "unknown"; % not a Git branch
+        GitHeadFile ->
+	    {ok, Device} = file:open(GitHeadFile, [read, binary]),
+	    Data = io:get_line(Device, ""),
+	    file:close(Device),
+	    StrSize = size(Data) -1, % w/o '\n' size)
+	    <<GitHeadData:StrSize/binary, _>> = Data,
+	    case GitHeadData of
+                <<"ref: refs/heads/", Master/binary>> -> binary_to_list(Master);
+                _ -> "unknown"
 	    end
     end.
 
+get_git_head_file("/") ->
+    filelib:is_regular("/.git/HEAD") andalso "/.git/HEAD";
+get_git_head_file(Dir) ->
+    case filelib:is_regular(Dir ++ "/.git/HEAD") of
+        true -> Dir ++ "/.git/HEAD";
+        false -> get_git_head_file(filename:dirname(Dir))
+    end.
+
+
 %% Tried to display logo in a table on top of page, but not working.
 %% Presumably, this hits some limitation of Markdown
 %%