Merge remote-tracking branch 'canonical/next'
[sinan.git] / src / sin_task_version.erl
blob5d95bb71d60e96a7b2ce4726bbb2e3ac2a09a373
1 %% -*- mode: Erlang; fill-column: 80; comment-column: 75; -*-
2 %%%---------------------------------------------------------------------------
3 %%% @author Eric Merritt
4 %%% @doc
5 %%% Return the sinan server version.
6 %%% @end
7 %%% @copyright (C) 2008-2011 Erlware
8 %%%---------------------------------------------------------------------------
9 -module(sin_task_version).
11 -behaviour(sin_task).
13 -include_lib("sinan/include/sinan.hrl").
15 %% API
16 -export([description/0, do_task/2]).
18 -define(TASK, version).
19 -define(DEPS, []).
21 %%====================================================================
22 %% API
23 %%====================================================================
24 %% @doc provides a description for this task
25 -spec description() -> sin_task:task_description().
26 description() ->
28 Desc = "
29 version Task
30 ============
32 This command simply prents out the current version of sinan",
34 #task{name = ?TASK,
35 task_impl = ?MODULE,
36 bare = true,
37 deps = ?DEPS,
38 example = "version",
39 short_desc = "Provides sinan version information",
40 desc = Desc,
41 opts = []}.
43 %% @doc Get the version of sinan that is currently running
44 -spec do_task(sin_config:config(), sin_state:state()) -> sin_state:state().
45 do_task(Config, State) ->
46 Version = case get_version() of
47 unknown_version ->
48 "v4.1.1";
49 SinVersion ->
50 SinVersion
51 end,
52 sin_log:normal(Config, "~s", [Version]),
53 sin_state:store(sinan_vsn, Version, State).
55 %%====================================================================
56 %%% Internal functions
57 %%====================================================================
59 %% @doc Gets the current version of the sinan release.
60 -spec get_version() -> Vsn::string() | unkown_version.
61 get_version() ->
62 SinDir = filename:join([filename:dirname(code:priv_dir(sinan)), "ebin", "sinan.app"]),
63 get_version(file:consult(SinDir)).
65 get_version({ok, [{application, sinan, Opts}]}) ->
66 case lists:keysearch(vsn, 1, Opts) of
67 {value, {vsn, Vsn}} ->
68 Vsn;
69 _ ->
70 unknown_version
71 end;
72 get_version(_) ->
73 unknown_version.