Fix upgrade command

This commit is contained in:
Craig Everett 2019-12-20 22:21:03 +09:00
parent da29af2d40
commit 4139b4f3c0
53 changed files with 97 additions and 75 deletions

View File

@ -1 +1 @@
0.3.0 0.3.7

View File

@ -1,6 +1,6 @@
{application,zx, {application,zx,
[{description,[]}, [{description,[]},
{vsn,"0.3.0"}, {vsn,"0.3.7"},
{applications,[stdlib,kernel]}, {applications,[stdlib,kernel]},
{modules,[zx,zx_auth,zx_conn,zx_conn_sup,zx_daemon,zx_key, {modules,[zx,zx_auth,zx_conn,zx_conn_sup,zx_daemon,zx_key,
zx_lib,zx_local,zx_net,zx_peer,zx_peer_man, zx_lib,zx_local,zx_net,zx_peer,zx_peer_man,

View File

@ -24,7 +24,7 @@
%%% @end %%% @end
-module(zx). -module(zx).
-vsn("0.3.0"). -vsn("0.3.7").
-behavior(application). -behavior(application).
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
@ -742,19 +742,20 @@ upgrade() ->
{ok, Meta} = zx_lib:read_project_meta(ZxDir), {ok, Meta} = zx_lib:read_project_meta(ZxDir),
PackageID = {Realm, Name, Current} = maps:get(package_id, Meta), PackageID = {Realm, Name, Current} = maps:get(package_id, Meta),
{ok, PackageString} = zx_lib:package_string(PackageID), {ok, PackageString} = zx_lib:package_string(PackageID),
ok = tell("Current version: ~s~n", [PackageString]), ok = tell("Current version: ~s", [PackageString]),
{ok, ID} = zx_daemon:latest({Realm, Name}), {ok, ID} = zx_daemon:latest({Realm, Name}),
case zx_daemon:wait_result(ID) of case zx_daemon:wait_result(ID) of
{ok, Current} -> {ok, Current} ->
tell("Running latest version.~n"); tell("Running latest version.");
{ok, Latest} when Latest > Current -> {ok, Latest} when Latest > Current ->
NewID = {Realm, Name, Latest}, NewID = {Realm, Name, Latest},
ok = acquire([NewID], [NewID]), ok = acquire([NewID], [NewID]),
{ok, LatestString} = zx_lib:version_to_string(Latest), {ok, LatestString} = zx_lib:version_to_string(Latest),
ok = tell(info, "Acquiring upgrade: ~s", [LatestString]),
VersionTxt = filename:join(zx_lib:path(etc), "version.txt"), VersionTxt = filename:join(zx_lib:path(etc), "version.txt"),
ok = file:write_file(VersionTxt, LatestString), ok = file:write_file(VersionTxt, LatestString),
{ok, NewString} = zx_lib:package_string(NewID), {ok, NewString} = zx_lib:package_string(NewID),
tell("Upgraded to ~s~n.", [NewString]); tell("Upgraded to ~s.", [NewString]);
{ok, Available} when Available < Current -> {ok, Available} when Available < Current ->
{ok, AvailableString} = zx_lib:version_to_string(Available), {ok, AvailableString} = zx_lib:version_to_string(Available),
Message = "Local version is newer than ~s. Nothing to do.~n", Message = "Local version is newer than ~s. Nothing to do.~n",

View File

@ -9,7 +9,7 @@
%%% @end %%% @end
-module(zx_auth). -module(zx_auth).
-vsn("0.3.0"). -vsn("0.3.7").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
-license("GPL-3.0"). -license("GPL-3.0").

View File

@ -7,7 +7,7 @@
%%% @end %%% @end
-module(zx_conn). -module(zx_conn).
-vsn("0.3.0"). -vsn("0.3.7").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
-license("GPL-3.0"). -license("GPL-3.0").
@ -339,7 +339,7 @@ pong(Socket) ->
fetch(Socket, ID, PackageID) -> fetch(Socket, ID, PackageID) ->
PIDB = term_to_binary(PackageID), PIDB = term_to_binary(PackageID),
Message = <<0:1, 9:7, PIDB/binary>>, Message = <<0:1, 12:7, PIDB/binary>>,
ok = gen_tcp:send(Socket, Message), ok = gen_tcp:send(Socket, Message),
case wait_hops(Socket, ID, PIDB) of case wait_hops(Socket, ID, PIDB) of
ok -> ok ->

View File

@ -5,7 +5,7 @@
%%% @end %%% @end
-module(zx_conn_sup). -module(zx_conn_sup).
-vsn("0.3.0"). -vsn("0.3.7").
-behavior(supervisor). -behavior(supervisor).
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").

View File

@ -138,7 +138,7 @@
%%% @end %%% @end
-module(zx_daemon). -module(zx_daemon).
-vsn("0.3.0"). -vsn("0.3.7").
-behavior(gen_server). -behavior(gen_server).
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
@ -1228,7 +1228,9 @@ handle_fetch_result(ID, {done, Bin}, {Requestor, {fetch, R, N, V}}, Requests, MX
Result = Result =
case do_import_package(Bin) of case do_import_package(Bin) of
ok -> ok ->
ok = file:write_file(zx_lib:zsp_path({R, N, V}), Bin), Path = zx_lib:zsp_path({R, N, V}),
ok = filelib:ensure_dir(Path),
ok = file:write_file(Path, Bin),
done; done;
Error -> Error ->
Error Error

View File

@ -8,7 +8,7 @@
%%% @end %%% @end
-module(zx_key). -module(zx_key).
-vsn("0.3.0"). -vsn("0.3.7").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
-license("GPL-3.0"). -license("GPL-3.0").

View File

@ -10,7 +10,7 @@
%%% @end %%% @end
-module(zx_lib). -module(zx_lib).
-vsn("0.3.0"). -vsn("0.3.7").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
-license("GPL-3.0"). -license("GPL-3.0").
@ -206,7 +206,8 @@ get_prime(Realm) ->
-spec read_project_meta() -> Result -spec read_project_meta() -> Result
when Result :: {ok, zx_zsp:meta()} when Result :: {ok, zx_zsp:meta()}
| {error, file:posix()}. | {error, file:posix()}
| {error, file:posix(), non_neg_integer()}.
%% @private %% @private
%% @equiv read_meta(".") %% @equiv read_meta(".")

View File

@ -6,7 +6,7 @@
%%% @end %%% @end
-module(zx_local). -module(zx_local).
-vsn("0.3.0"). -vsn("0.3.7").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
-license("GPL-3.0"). -license("GPL-3.0").
@ -1089,15 +1089,20 @@ version_up(patch, {Realm, Name, OldVersion = {Major, Minor, Patch}}, OldMeta) ->
package(TargetDir) -> package(TargetDir) ->
ok = tell("Packaging ~ts", [TargetDir]), ok = tell("Packaging ~ts", [TargetDir]),
{ok, Meta} = zx_lib:read_project_meta(TargetDir), case zx_lib:read_project_meta(TargetDir) of
{ok, Meta} -> package2(TargetDir, Meta);
Error -> Error
end.
package2(TargetDir, Meta) ->
{Realm, _, _} = maps:get(package_id, Meta), {Realm, _, _} = maps:get(package_id, Meta),
UserName = select_user(Realm), UserName = select_user(Realm),
case select_private_key({Realm, UserName}) of case select_private_key({Realm, UserName}) of
{ok, Key} -> package2(TargetDir, Key); {ok, Key} -> package3(TargetDir, Key);
error -> {error, "User has no private keys on the local system.", 1} error -> {error, "User has no private keys on the local system.", 1}
end. end.
package2(TargetDir, Key) -> package3(TargetDir, Key) ->
case zx_zsp:pack(TargetDir, Key) of case zx_zsp:pack(TargetDir, Key) of
{ok, Path} -> tell("Wrote archive ~ts", [Path]); {ok, Path} -> tell("Wrote archive ~ts", [Path]);
{error, eexists} -> {error, "Package file already exists. Aborting", 17}; {error, eexists} -> {error, "Package file already exists. Aborting", 17};

View File

@ -5,7 +5,7 @@
%%% @end %%% @end
-module(zx_net). -module(zx_net).
-vsn("0.3.0"). -vsn("0.3.7").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
-license("GPL-3.0"). -license("GPL-3.0").

View File

@ -8,7 +8,7 @@
%%% @end %%% @end
-module(zx_peer). -module(zx_peer).
-vsn("0.3.0"). -vsn("0.3.7").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
-license("GPL-3.0"). -license("GPL-3.0").
@ -158,26 +158,30 @@ handle_message(<<Command:8, Bin/binary>>) ->
1 -> zx_daemon:subscribe(Payload); 1 -> zx_daemon:subscribe(Payload);
2 -> zx_daemon:unsubscribe(Payload); 2 -> zx_daemon:unsubscribe(Payload);
3 -> deferred(fun list/1, Payload); 3 -> deferred(fun list/1, Payload);
4 -> deferred(fun zx_daemon:latest/1, Payload); 4 -> deferred(fun list/1, Payload);
5 -> deferred(fun provides/1, Payload); 5 -> deferred(fun zx_daemon:latest/1, Payload);
6 -> deferred(fun zx_daemon:list_deps/1, Payload); 6 -> deferred(fun zx_daemon:describe/1, Payload);
7 -> deferred(fun zx_daemon:list_sysops/1, Payload); 7 -> deferred(fun zx_daemon:tags/1, Payload);
8 -> deferred(fun zx_daemon:fetch/1, Payload); 8 -> deferred(fun provides/1, Payload);
9 -> zx_daemon:install(Payload); 9 -> deferred(fun zx_daemon:search/1, Payload);
10 -> zx_daemon:build(Payload); 10 -> deferred(fun zx_daemon:list_deps/1, Payload);
11 -> zx_daemon:list_mirrors(); 11 -> deferred(fun zx_daemon:list_sysops/1, Payload);
12 -> zx_daemon:add_mirror(Payload); 12 -> zx_daemon:fetch(Payload);
13 -> zx_daemon:drop_mirror(Payload); 13 -> zx_daemon:keychain(Payload);
14 -> register_key(Payload); 14 -> zx_daemon:install(Payload);
15 -> get_key(Payload); 15 -> zx_daemon:build(Payload);
16 -> keybin(Payload); 16 -> zx_daemon:list_mirrors();
17 -> zx_daemon:find_keypair(Payload); 17 -> zx_daemon:add_mirror(Payload);
18 -> have_key(Payload); 18 -> zx_daemon:drop_mirror(Payload);
19 -> list_keys(Payload); 19 -> register_key(Payload);
20 -> zx_daemon:takeover(Payload); 20 -> get_key(Payload);
21 -> zx_daemon:abdicate(Payload); 21 -> keybin(Payload);
22 -> zx_daemon:drop_realm(Payload); 22 -> zx_daemon:find_keypair(Payload);
23 -> deferred(fun zx_daemon:keychain/1, Payload) 23 -> have_key(Payload);
24 -> list_keys(Payload);
25 -> zx_daemon:takeover(Payload);
26 -> zx_daemon:abdicate(Payload);
27 -> zx_daemon:drop_realm(Payload)
end, end,
pack(Result). pack(Result).

View File

@ -9,7 +9,7 @@
%%% @end %%% @end
-module(zx_peer_man). -module(zx_peer_man).
-vsn("0.3.0"). -vsn("0.3.7").
-behavior(gen_server). -behavior(gen_server).
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").

View File

@ -6,7 +6,7 @@
%%% @end %%% @end
-module(zx_peer_sup). -module(zx_peer_sup).
-vsn("0.3.0"). -vsn("0.3.7").
-behaviour(supervisor). -behaviour(supervisor).
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").

View File

@ -10,7 +10,7 @@
%%% @end %%% @end
-module(zx_peers). -module(zx_peers).
-vsn("0.3.0"). -vsn("0.3.7").
-behavior(supervisor). -behavior(supervisor).
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").

View File

@ -5,7 +5,7 @@
%%% @end %%% @end
-module(zx_proxy). -module(zx_proxy).
-vsn("0.3.0"). -vsn("0.3.7").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
-license("GPL-3.0"). -license("GPL-3.0").
@ -137,31 +137,36 @@ loop(Parent, Debug, State = #s{socket = Socket}) ->
dispatch(Socket, Action) -> dispatch(Socket, Action) ->
case Action of case Action of
{list, R} -> make_query(Socket, 3, R); {list, R} -> make_query(Socket, 3, R);
{list, R, N} -> make_query(Socket, 3, {R, N}); {list, R, N} -> make_query(Socket, 4, {R, N});
{list, R, N, V} -> make_query(Socket, 3, {R, N, V}); {list, R, N, V} -> make_query(Socket, 4, {R, N, V});
{latest, R, N} -> make_query(Socket, 4, {R, N}); {latest, R, N} -> make_query(Socket, 5, {R, N});
{latest, R, N, V} -> make_query(Socket, 4, {R, N, V}); {latest, R, N, V} -> make_query(Socket, 5, {R, N, V});
{provides, R, M} -> make_query(Socket, 5, {R, M}); {describe, R, N} -> make_query(Socket, 6, {R, N});
{list_deps, R, N, V} -> make_query(Socket, 6, {R, N, V}); {describe, R, N, V} -> make_query(Socket, 6, {R, N, V});
{list_sysops, R} -> make_query(Socket, 7, R); {tags, R, N} -> make_query(Socket, 7, {R, N});
{tags, R, N, V} -> make_query(Socket, 7, {R, N, V});
{provides, R, M} -> make_query(Socket, 8, {R, M});
{search, R, String} -> make_query(Socket, 9, {R, String});
{list_deps, R, N, V} -> make_query(Socket, 10, {R, N, V});
{list_sysops, R} -> make_query(Socket, 11, R);
% {fetch, R, N, V} -> fetch(Socket, {R, N, V}); % {fetch, R, N, V} -> fetch(Socket, {R, N, V});
{fetch, R, N, V} -> make_query(Socket, 8, {R, N, V}); {fetch, R, N, V} -> make_query(Socket, 12, {R, N, V});
{install, R, N, V} -> make_query(Socket, 9, {R, N, V}); {keychain, R, K} -> make_query(Socket, 13, {R, K});
{build, R, N, V} -> make_query(Socket, 10, {R, N, V}); {install, R, N, V} -> make_query(Socket, 14, {R, N, V});
{list_mirrors} -> make_query(Socket, 11, none); {build, R, N, V} -> make_query(Socket, 15, {R, N, V});
{add_mirror, Host} -> make_query(Socket, 12, Host); {list_mirrors} -> make_query(Socket, 16, none);
{drop_mirror, Host} -> make_query(Socket, 13, Host); {add_mirror, Host} -> make_query(Socket, 17, Host);
{register_key, Data} -> make_query(Socket, 14, Data); {drop_mirror, Host} -> make_query(Socket, 18, Host);
{get_key, KeyID} -> make_query(Socket, 15, KeyID); {register_key, Data} -> make_query(Socket, 19, Data);
{keybin, KeyID} -> make_query(Socket, 16, KeyID); {get_key, KeyID} -> make_query(Socket, 20, KeyID);
{find_keypair, KeyID} -> make_query(Socket, 17, KeyID); {keybin, KeyID} -> make_query(Socket, 21, KeyID);
{have_key, Type, KID} -> make_query(Socket, 18, {Type, KID}); {find_keypair, KeyID} -> make_query(Socket, 22, KeyID);
{list_keys, R} -> make_query(Socket, 19, R); {have_key, Type, KID} -> make_query(Socket, 23, {Type, KID});
{takeover, R} -> make_query(Socket, 20, R); {list_keys, R} -> make_query(Socket, 24, R);
{abdicate, R} -> make_query(Socket, 21, R); {takeover, R} -> make_query(Socket, 25, R);
{drop_realm, R} -> make_query(Socket, 22, R); {abdicate, R} -> make_query(Socket, 26, R);
{keychain, R, K} -> make_query(Socket, 23, {R, K}); {drop_realm, R} -> make_query(Socket, 27, R);
Unexpected -> Unexpected ->
Message = "Received unexpected request action. Action: ~200tp", Message = "Received unexpected request action. Action: ~200tp",
ok = log(warning, Message, [Unexpected]), ok = log(warning, Message, [Unexpected]),

View File

@ -5,7 +5,7 @@
%%% @end %%% @end
-module(zx_sup). -module(zx_sup).
-vsn("0.3.0"). -vsn("0.3.7").
-behavior(supervisor). -behavior(supervisor).
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").

View File

@ -6,7 +6,7 @@
%%% @end %%% @end
-module(zx_tty). -module(zx_tty).
-vsn("0.3.0"). -vsn("0.3.7").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
-license("GPL-3.0"). -license("GPL-3.0").

View File

@ -5,7 +5,7 @@
%%% @end %%% @end
-module(zx_userconf). -module(zx_userconf).
-vsn("0.3.0"). -vsn("0.3.7").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
-license("GPL-3.0"). -license("GPL-3.0").

View File

@ -7,7 +7,7 @@
%%% @end %%% @end
-module(zx_zsp). -module(zx_zsp).
-vsn("0.3.0"). -vsn("0.3.7").
-author("Craig Everett <zxq9@zxq9.com>"). -author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>"). -copyright("Craig Everett <zxq9@zxq9.com>").
-license("GPL-3.0"). -license("GPL-3.0").
@ -181,7 +181,11 @@ blithely_extract(ZspBin, lib) ->
install(<<SS:24, _:SS/binary, MS:24, _:MS/binary, TarGZ/binary>>, Path) -> install(<<SS:24, _:SS/binary, MS:24, _:MS/binary, TarGZ/binary>>, Path) ->
ok = filelib:ensure_dir(Path), ok = filelib:ensure_dir(Path),
ok = zx_lib:rm_rf(Path), ok = zx_lib:rm_rf(Path),
ok = file:make_dir(Path), ok =
case filelib:is_dir(Path) of
true -> ok;
false -> file:make_dir(Path)
end,
erl_tar:extract({binary, TarGZ}, [{cwd, Path}, compressed]). erl_tar:extract({binary, TarGZ}, [{cwd, Path}, compressed]).

View File

@ -8,7 +8,7 @@
{license,[]}. {license,[]}.
{modules,[]}. {modules,[]}.
{name,[]}. {name,[]}.
{package_id,{"otpr","zx",{0,3,0}}}. {package_id,{"otpr","zx",{0,3,7}}}.
{prefix,"zx_"}. {prefix,"zx_"}.
{repo_url,[]}. {repo_url,[]}.
{tags,[]}. {tags,[]}.