ext_mod: Support when git repository name is not identical to the module name
For example, ejabberd-contrib has an extra module, mod_prometheus, that is hosted in a git repository named ejabberd-prometheus-exporter
This commit is contained in:
parent
f9d11265d0
commit
9534ca2da1
|
@ -294,7 +294,7 @@ add_sources(Module, Path) when is_atom(Module), is_list(Path) ->
|
||||||
add_sources(Package, Path) when is_binary(Package), is_list(Path) ->
|
add_sources(Package, Path) when is_binary(Package), is_list(Path) ->
|
||||||
DestDir = sources_dir(),
|
DestDir = sources_dir(),
|
||||||
RepDir = filename:join(DestDir, module_name(Path)),
|
RepDir = filename:join(DestDir, module_name(Path)),
|
||||||
delete_path(RepDir),
|
delete_path(RepDir, binary_to_list(Package)),
|
||||||
case filelib:ensure_dir(RepDir) of
|
case filelib:ensure_dir(RepDir) of
|
||||||
ok ->
|
ok ->
|
||||||
case {string:left(Path, 4), string:right(Path, 2)} of
|
case {string:left(Path, 4), string:right(Path, 2)} of
|
||||||
|
@ -406,8 +406,9 @@ extract_github_master(Repos, DestDir) ->
|
||||||
case extract(zip, geturl(Url++"/archive/master.zip"), DestDir) of
|
case extract(zip, geturl(Url++"/archive/master.zip"), DestDir) of
|
||||||
ok ->
|
ok ->
|
||||||
RepDir = filename:join(DestDir, module_name(Repos)),
|
RepDir = filename:join(DestDir, module_name(Repos)),
|
||||||
file:rename(RepDir++"-master", RepDir),
|
RepDirSpec = filename:join(DestDir, module_spec_name(RepDir)),
|
||||||
maybe_write_commit_json(Url, RepDir);
|
file:rename(RepDir++"-master", RepDirSpec),
|
||||||
|
maybe_write_commit_json(Url, RepDirSpec);
|
||||||
Error ->
|
Error ->
|
||||||
Error
|
Error
|
||||||
end.
|
end.
|
||||||
|
@ -442,6 +443,9 @@ delete_path(Path) ->
|
||||||
file:delete(Path)
|
file:delete(Path)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
delete_path(Path, Package) ->
|
||||||
|
delete_path(filename:join(filename:dirname(Path), Package)).
|
||||||
|
|
||||||
modules_dir() ->
|
modules_dir() ->
|
||||||
DefaultDir = filename:join(getenv("HOME"), ".ejabberd-modules"),
|
DefaultDir = filename:join(getenv("HOME"), ".ejabberd-modules"),
|
||||||
getenv("CONTRIB_MODULES_PATH", DefaultDir).
|
getenv("CONTRIB_MODULES_PATH", DefaultDir).
|
||||||
|
@ -480,6 +484,14 @@ module_src_dir(Package) ->
|
||||||
module_name(Id) ->
|
module_name(Id) ->
|
||||||
filename:basename(filename:rootname(Id)).
|
filename:basename(filename:rootname(Id)).
|
||||||
|
|
||||||
|
module_spec_name(Path) ->
|
||||||
|
case filelib:wildcard(filename:join(Path++"-master", "*.spec")) of
|
||||||
|
"" ->
|
||||||
|
module_name(Path);
|
||||||
|
ModuleName ->
|
||||||
|
filename:basename(ModuleName, ".spec")
|
||||||
|
end.
|
||||||
|
|
||||||
module(Id) ->
|
module(Id) ->
|
||||||
misc:binary_to_atom(iolist_to_binary(module_name(Id))).
|
misc:binary_to_atom(iolist_to_binary(module_name(Id))).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue