Expose utility ref-type functions
These allow you to determine whether you're dealing with a branch, tag, note or remote-tracking branch.
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
-export([lookup/2, iterator/1, iterator/2, next/1, resolve/1, create/4, create_symbolic/4, dwim/2, shorthand/1]).
|
-export([lookup/2, iterator/1, iterator/2, next/1, resolve/1, create/4, create_symbolic/4, dwim/2, shorthand/1]).
|
||||||
-export([has_log/1, has_log/2]).
|
-export([has_log/1, has_log/2]).
|
||||||
|
-export([is_branch/1, is_tag/1, is_note/1, is_remote/1]).
|
||||||
|
|
||||||
-include("geef_records.hrl").
|
-include("geef_records.hrl").
|
||||||
|
|
||||||
@@ -113,3 +114,18 @@ has_log(Repo, Name) ->
|
|||||||
-spec has_log(ref()) -> {ok, boolean()} | {error, term()}.
|
-spec has_log(ref()) -> {ok, boolean()} | {error, term()}.
|
||||||
has_log(#geef_reference{repo=Repo, name=Name}) ->
|
has_log(#geef_reference{repo=Repo, name=Name}) ->
|
||||||
has_log(Repo, Name).
|
has_log(Repo, Name).
|
||||||
|
|
||||||
|
-define(assert_prefix(FunctionName, Prefix),
|
||||||
|
FunctionName(<<Prefix, _/binary>>) ->
|
||||||
|
true;
|
||||||
|
FunctionName(#geef_reference{name=Name}) ->
|
||||||
|
FunctionName(Name);
|
||||||
|
FunctionName(Name) when is_list(Name) ->
|
||||||
|
FunctionName(iolist_to_binary(Name));
|
||||||
|
FunctionName(_) ->
|
||||||
|
false).
|
||||||
|
|
||||||
|
?assert_prefix(is_branch, "refs/heads/").
|
||||||
|
?assert_prefix(is_tag, "refs/tags/").
|
||||||
|
?assert_prefix(is_note, "refs/notes/").
|
||||||
|
?assert_prefix(is_remote, "refs/remotes/").
|
||||||
|
|||||||
39
test/ref_test.erl
Normal file
39
test/ref_test.erl
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
-module(ref_test).
|
||||||
|
-compile([export_all]).
|
||||||
|
|
||||||
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
|
-include("src/geef_records.hrl").
|
||||||
|
|
||||||
|
test_fun(F, [{Name, Val} | Tail]) ->
|
||||||
|
?assertEqual(Val, F(Name)),
|
||||||
|
test_fun(F, Tail);
|
||||||
|
test_fun(_, []) ->
|
||||||
|
ok.
|
||||||
|
|
||||||
|
branch_test() ->
|
||||||
|
?assertEqual(true, geef_ref:is_branch("refs/heads/master")),
|
||||||
|
?assertEqual(true, geef_ref:is_branch(<<"refs/heads/master">>)),
|
||||||
|
?assertEqual(false, geef_ref:is_branch("refs/tags/v0.1")),
|
||||||
|
?assertEqual(false, geef_ref:is_branch(#geef_reference{name= <<"refs/tags/foo">>})),
|
||||||
|
?assertEqual(true, geef_ref:is_branch(#geef_reference{name= <<"refs/heads/foo">>})).
|
||||||
|
|
||||||
|
tag_test() ->
|
||||||
|
?assertEqual(false, geef_ref:is_tag("refs/heads/master")),
|
||||||
|
?assertEqual(true, geef_ref:is_tag(<<"refs/tags/mastery">>)),
|
||||||
|
?assertEqual(true, geef_ref:is_tag("refs/tags/v0.1")),
|
||||||
|
?assertEqual(true, geef_ref:is_tag(#geef_reference{name= <<"refs/tags/foo">>})),
|
||||||
|
?assertEqual(false, geef_ref:is_tag(#geef_reference{name= <<"refs/heads/foo">>})).
|
||||||
|
|
||||||
|
note_test() ->
|
||||||
|
?assertEqual(false, geef_ref:is_note("refs/heads/master")),
|
||||||
|
?assertEqual(true, geef_ref:is_note(<<"refs/notes/commits">>)),
|
||||||
|
?assertEqual(true, geef_ref:is_note("refs/notes/bugs")),
|
||||||
|
?assertEqual(true, geef_ref:is_note(#geef_reference{name= <<"refs/notes/foo">>})),
|
||||||
|
?assertEqual(false, geef_ref:is_note(#geef_reference{name= <<"refs/heads/foo">>})).
|
||||||
|
|
||||||
|
remote_test() ->
|
||||||
|
?assertEqual(false, geef_ref:is_remote("refs/heads/master")),
|
||||||
|
?assertEqual(true, geef_ref:is_remote(<<"refs/remotes/origin/master">>)),
|
||||||
|
?assertEqual(true, geef_ref:is_remote("refs/remotes/origin/development")),
|
||||||
|
?assertEqual(true, geef_ref:is_remote(#geef_reference{name= <<"refs/remotes/svn">>})),
|
||||||
|
?assertEqual(false, geef_ref:is_remote(#geef_reference{name= <<"refs/heads/foo">>})).
|
||||||
Reference in New Issue
Block a user