From 0a4fde35e7d802ed48118ccab1ae6570f66f2cd6 Mon Sep 17 00:00:00 2001 From: "Paulo F. Oliveira" Date: Thu, 25 Mar 2021 00:02:53 +0000 Subject: [PATCH 1/4] Remove dead code --- src/ec_git_vsn.erl | 3 +-- src/ec_talk.erl | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/ec_git_vsn.erl b/src/ec_git_vsn.erl index 569d78c..12bbb4e 100644 --- a/src/ec_git_vsn.erl +++ b/src/ec_git_vsn.erl @@ -97,8 +97,7 @@ parse_tags(Pattern) -> -ifdef(unicode_str). len(Str) -> string:length(Str). trim(Str, right, Chars) -> string:trim(Str, trailing, Chars); -trim(Str, left, Chars) -> string:trim(Str, leading, Chars); -trim(Str, both, Chars) -> string:trim(Str, both, Chars). +trim(Str, left, Chars) -> string:trim(Str, leading, Chars). slice(Str, Len) -> string:slice(Str, Len). -else. len(Str) -> string:len(Str). diff --git a/src/ec_talk.erl b/src/ec_talk.erl index 36cff8e..454b1f8 100644 --- a/src/ec_talk.erl +++ b/src/ec_talk.erl @@ -199,8 +199,6 @@ get_string(String) -> -ifdef(unicode_str). trim(Str) -> string:trim(Str). -trim(Str, right, Chars) -> string:trim(Str, trailing, Chars); -trim(Str, left, Chars) -> string:trim(Str, leading, Chars); trim(Str, both, Chars) -> string:trim(Str, both, Chars). -else. trim(Str) -> string:strip(Str). From 4406953a8715a8042e410bd0b328ab6ca620d0ff Mon Sep 17 00:00:00 2001 From: "Paulo F. Oliveira" Date: Thu, 25 Mar 2021 00:03:13 +0000 Subject: [PATCH 2/4] Have CI working with extra checks --- .github/workflows/main.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f76e374..49cfa50 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,20 +12,20 @@ jobs: build: name: Test on OTP ${{ matrix.otp_version }} and ${{ matrix.os }} runs-on: ${{ matrix.os }} + container: + image: erlang:${{matrix.otp_version}} strategy: matrix: - otp_version: ['23.2.1', '22.3.4.2', '21.3.8.16', '20.3.8.21', '19.3.6.13'] + otp_version: ['23.2', '22.3', '21.3', '20.3', '19.3'] os: [ubuntu-latest] steps: - uses: actions/checkout@v2 - - uses: bajankristof/setup-erlang@master - with: - otp-version: ${{ matrix.otp_version }} - - name: Compile run: rebar3 compile + - name: Dialyze + run: rebar3 as test dialyzer - name: EUnit tests run: TERM=xterm rebar3 eunit From f5e8aa655151bb004c48e59bb910a180a19b9a9f Mon Sep 17 00:00:00 2001 From: "Paulo F. Oliveira" Date: Thu, 25 Mar 2021 00:03:37 +0000 Subject: [PATCH 3/4] gitignore test-generated elements --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index e8f4b5a..d306af0 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,7 @@ _build erl_crash.dump *.pyc *~ +TEST-*.xml +/foo src/ec_semver_parser.peg From 9d67e2651050cd1eb725aa16c22939136d4171a4 Mon Sep 17 00:00:00 2001 From: "Paulo F. Oliveira" Date: Thu, 25 Mar 2021 00:04:10 +0000 Subject: [PATCH 4/4] Solve dialyzer warnings while approaching expected behaviour (with minor unit tests) --- src/ec_git_vsn.erl | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/ec_git_vsn.erl b/src/ec_git_vsn.erl index 12bbb4e..c932c58 100644 --- a/src/ec_git_vsn.erl +++ b/src/ec_git_vsn.erl @@ -34,7 +34,7 @@ new() -> {}. --spec vsn(t()) -> {ok, string()} | {error, Reason::any()}. +-spec vsn(t()|string()) -> {ok, string()} | {error, Reason::any()}. vsn(Data) -> {Vsn, RawRef, RawCount} = collect_default_refcount(Data), {ok, build_vsn_string(Vsn, RawRef, RawCount)}. @@ -61,12 +61,7 @@ collect_default_refcount(Data) -> build_vsn_string(Vsn, RawRef, RawCount) -> %% Cleanup the tag and the Ref information. Basically leading 'v's and %% whitespace needs to go away. - RefTag = case RawRef of - undefined -> - ""; - RawRef -> - [".ref", re:replace(RawRef, "\\s", "", [global])] - end, + 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 @@ -82,17 +77,27 @@ get_patch_count(RawRef) -> Ref = re:replace(RawRef, "\\s", "", [global]), Cmd = io_lib:format("git rev-list --count ~s..HEAD", [Ref]), - os:cmd(Cmd). + case os:cmd(Cmd) of + "fatal: " ++ _ -> + 0; + Count -> + Count + end. --spec parse_tags(t()) -> {string()|undefined, ec_semver:version_string()}. +-spec parse_tags(t()|string()) -> {string()|undefined, ec_semver:version_string()}. parse_tags({}) -> parse_tags(""); parse_tags(Pattern) -> Cmd = io_lib:format("git describe --abbrev=0 --tags --match \"~s*\"", [Pattern]), Tag = os:cmd(Cmd), - Vsn = slice(Tag, len(Pattern)), - Vsn1 = trim(trim(Vsn, left, "v"), right, "\n"), - {Tag, Vsn1}. + case Tag of + "fatal: " ++ _ -> + {undefined, ""}; + _ -> + Vsn = slice(Tag, len(Pattern)), + Vsn1 = trim(trim(Vsn, left, "v"), right, "\n"), + {Tag, Vsn1} + end. -ifdef(unicode_str). len(Str) -> string:length(Str). @@ -104,3 +109,16 @@ len(Str) -> string:len(Str). trim(Str, Dir, [Chars|_]) -> string:strip(Str, Dir, Chars). slice(Str, Len) -> string:substr(Str, Len + 1). -endif. + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). + +parse_tags_test() -> + ?assertEqual({undefined, ""}, parse_tags("a.b.c")). + +get_patch_count_test() -> + ?assertEqual(0, get_patch_count("a.b.c")). + +collect_default_refcount_test() -> + ?assertMatch({"", _, _}, collect_default_refcount("a.b.c")). +-endif.