summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorderwinlu <derwinlu+git@gmail.com>2015-05-07 19:54:02 +0200
committerderwinlu <derwinlu+git@gmail.com>2015-05-07 19:54:02 +0200
commit3edede54e759f8494981bb2e6380b7eee437b7f3 (patch)
treeb143ff5093822a9885650cba22be622dc981cc84
parent3e005ab1071cf6bf1fc012ba0cd706c4a7d376b2 (diff)
fix rebar_git_resource
* fix shell commands relying on non windows shell commands * fix shell commands using wrong quotes * implement native wc -l
-rw-r--r--src/rebar_git_resource.erl30
-rw-r--r--src/rebar_utils.erl8
2 files changed, 23 insertions, 15 deletions
diff --git a/src/rebar_git_resource.erl b/src/rebar_git_resource.erl
index 07c9b4d..2d83579 100644
--- a/src/rebar_git_resource.erl
+++ b/src/rebar_git_resource.erl
@@ -16,7 +16,7 @@ lock(AppDir, {git, Url, _}) ->
lock(AppDir, {git, Url}) ->
AbortMsg = io_lib:format("Locking of git dependency failed in ~s", [AppDir]),
{ok, VsnString} =
- rebar_utils:sh("git --git-dir='" ++ AppDir ++ "/.git' rev-parse --verify HEAD",
+ rebar_utils:sh("git --git-dir=\"" ++ AppDir ++ "/.git\" rev-parse --verify HEAD",
[{use_stdout, false}, {debug_abort_on_error, AbortMsg}]),
Ref = string:strip(VsnString, both, $\n),
{git, Url, {ref, Ref}}.
@@ -125,7 +125,7 @@ collect_default_refcount() ->
%% timestamp is really important from an ordering perspective.
AbortMsg1 = "Getting log of git dependency failed in " ++ rebar_dir:get_cwd(),
{ok, String} =
- rebar_utils:sh("git log -n 1 --pretty=format:'%h\n' ",
+ rebar_utils:sh("git log -n 1 --pretty=format:\"%h\n\" ",
[{use_stdout, false},
{debug_abort_on_error, AbortMsg1}]),
RawRef = string:strip(String, both, $\n),
@@ -135,41 +135,43 @@ collect_default_refcount() ->
case Tag of
undefined ->
AbortMsg2 = "Getting rev-list of git depedency failed in " ++ rebar_dir:get_cwd(),
- rebar_utils:sh("git rev-list HEAD | wc -l",
- [{use_stdout, false},
- {debug_abort_on_error, AbortMsg2}]);
+ {ok, PatchLines} = rebar_utils:sh("git rev-list HEAD",
+ [{use_stdout, false},
+ {debug_abort_on_error, AbortMsg2}]),
+ rebar_utils:line_count(PatchLines);
_ ->
get_patch_count(Tag)
end,
{TagVsn, RawRef, RawCount}.
-build_vsn_string(Vsn, RawRef, RawCount) ->
+build_vsn_string(Vsn, RawRef, Count) ->
%% Cleanup the tag and the Ref information. Basically leading 'v's and
%% whitespace needs to go away.
RefTag = [".ref", re:replace(RawRef, "\\s", "", [global])],
- Count = erlang:iolist_to_binary(re:replace(RawCount, "\\s", "", [global])),
%% Create the valid [semver](http://semver.org) version from the tag
case Count of
- <<"0">> ->
+ 0 ->
erlang:binary_to_list(erlang:iolist_to_binary(Vsn));
_ ->
erlang:binary_to_list(erlang:iolist_to_binary([Vsn, "+build.",
- Count, RefTag]))
+ integer_to_list(Count), RefTag]))
end.
get_patch_count(RawRef) ->
AbortMsg = "Getting rev-list of git dep failed in " ++ rebar_dir:get_cwd(),
Ref = re:replace(RawRef, "\\s", "", [global]),
- Cmd = io_lib:format("git rev-list ~s..HEAD | wc -l",
+ Cmd = io_lib:format("git rev-list ~s..HEAD",
[Ref]),
- rebar_utils:sh(Cmd,
- [{use_stdout, false},
- {debug_abort_on_error, AbortMsg}]).
+ {ok, PatchLines} = rebar_utils:sh(Cmd,
+ [{use_stdout, false},
+ {debug_abort_on_error, AbortMsg}]),
+ rebar_utils:line_count(PatchLines).
+
parse_tags() ->
%% Don't abort on error, we want the bad return to be turned into 0.0.0
- case rebar_utils:sh("git log --oneline --decorate | fgrep \"tag: \" -1000",
+ case rebar_utils:sh("git log --oneline --no-walk --tags --decorate",
[{use_stdout, false}, return_on_error]) of
{error, _} ->
{undefined, "0.0.0"};
diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl
index b7a9583..4f0bc80 100644
--- a/src/rebar_utils.erl
+++ b/src/rebar_utils.erl
@@ -53,7 +53,8 @@
get_arch/0,
wordsize/0,
tup_umerge/2,
- tup_sort/1]).
+ tup_sort/1,
+ line_count/1]).
%% for internal use only
-export([otp_release/0]).
@@ -281,6 +282,11 @@ umerge([], Olds, Merged, CmpMerged, Cmp) when CmpMerged == Cmp ->
umerge([], Olds, Merged, _CmpMerged, Cmp) ->
lists:reverse(Olds, [Cmp | Merged]).
+%% Implements wc -l functionality used to determine patchcount from git output
+line_count(PatchLines) ->
+ Tokenized = string:tokens(PatchLines, "\n"),
+ {ok, length(Tokenized)}.
+
%% ====================================================================
%% Internal functions
%% ====================================================================