From 56b9627041e6bf4274cb3ebb562fb4847d6362de Mon Sep 17 00:00:00 2001 From: Craig Everett Date: Wed, 6 Jun 2018 16:05:57 +0900 Subject: [PATCH] Implement "update .app" --- zomp/lib/otpr/zx/0.1.0/src/zx.erl | 2 ++ zomp/lib/otpr/zx/0.1.0/src/zx_local.erl | 37 +++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/zomp/lib/otpr/zx/0.1.0/src/zx.erl b/zomp/lib/otpr/zx/0.1.0/src/zx.erl index 427034f..d323c53 100644 --- a/zomp/lib/otpr/zx/0.1.0/src/zx.erl +++ b/zomp/lib/otpr/zx/0.1.0/src/zx.erl @@ -119,6 +119,8 @@ do(["set", "version", VersionString]) -> do(["verup", Level]) -> ok = compatibility_check([unix]), done(zx_local:verup(Level)); +do(["update", ".app"]) -> + done(zx_local:update_app_file()); do(["list", "realms"]) -> done(zx_local:list_realms()); do(["list", "packages", Realm]) -> diff --git a/zomp/lib/otpr/zx/0.1.0/src/zx_local.erl b/zomp/lib/otpr/zx/0.1.0/src/zx_local.erl index 327ecdc..22283b9 100644 --- a/zomp/lib/otpr/zx/0.1.0/src/zx_local.erl +++ b/zomp/lib/otpr/zx/0.1.0/src/zx_local.erl @@ -13,6 +13,7 @@ -export([initialize/2, set_version/1, list_realms/0, list_packages/1, list_versions/1, set_dep/1, list_deps/0, list_deps/1, drop_dep/1, verup/1, package/1, + update_app_file/0, import_realm/1, drop_realm/1, takeover/1, abdicate/1, set_timeout/1, add_mirror/0, drop_mirror/0, create_plt/0, dialyze/0, @@ -269,6 +270,42 @@ initialize_app_file({_, Name, Version}, AppStart) -> zx_lib:write_terms(AppFile, [AppProfile]). +-spec update_app_file() -> zx:outcome(). + +update_app_file() -> + case zx_lib:read_project_meta() of + {ok, Meta} -> update_app_file(Meta); + Error -> Error + end. + + +update_app_file(Meta) -> + {_, Name, Version} = maps:get(package_id, Meta), + {ok, VersionString} = zx_lib:version_to_string(Version), + AppName = list_to_atom(Name), + AppFile = filename:join("ebin", Name ++ ".app"), + {application, AppName, RawAppData} = + case filelib:is_regular(AppFile) of + true -> + {ok, [D]} = file:consult(AppFile), + D; + false -> + {application, + AppName, + [{registered, []}, + {included_applications, []}, + {applications, [stdlib, kernel]}]} + end, + Grep = "grep -oP '^-module\\(\\K[^)]+' src/* | cut -d: -f2", + Modules = [list_to_atom(M) || M <- string:lexemes(os:cmd(Grep), "\n")], + Properties = [{vsn, VersionString}, {modules, Modules}], + Store = fun(T, L) -> lists:keystore(element(1, T), 1, L, T) end, + AppData = lists:foldl(Store, RawAppData, Properties), + AppProfile = {application, AppName, AppData}, + ok = zx_lib:write_terms(AppFile, [AppProfile]), + log(info, "Writing app file: ~ts", [AppFile]). + + -spec set_version(VersionString) -> zx:outcome() when VersionString :: string(). %% @private