Files
ROC/tools/roc/roc_install_command.e
Jocelyn Fiat ebc5924c01 Made CMS_MODULE.name deferred, and implemented by constant so that it can be use as static call.
Copied site resources on related module source folder.
Renamed "login" module as "auth" module, and updated related locations and files.
2015-06-29 16:24:17 +02:00

286 lines
7.6 KiB
Plaintext

note
description: "Installation command."
date: "$Date$"
revision: "$Revision$"
class
ROC_INSTALL_COMMAND
inherit
ROC_COMMAND
create
make
feature -- Access
help: STRING_32
once
Result := "[--module|-m <MODULE_PATH>] [(--dir|-d <CMS_PATH>) | <MODULE_NAME>] [--site-dir <CMS_SITE_PATH>]"
end
feature -- Status report
is_valid (args: ARRAY [READABLE_STRING_32]): BOOLEAN
-- Is the submitted install command valid?
local
i, n: INTEGER
optional_module: BOOLEAN
cms_path: BOOLEAN
do
n := args.upper
-- TODO add error reporting.
if n >= 1 and then n <= 4 then
from
i := 1
until
i > n
loop
if args [i].same_string ("-m") then
optional_module := True
elseif args [i].same_string ("--module") then
optional_module := True
elseif args [i].same_string ("-d") then
cms_path := True
elseif args [i].same_string ("--dir") then
cms_path := True
end
i := i + 1
end
if n = 4 then
if (cms_path and optional_module) then
-- valid command
Result := True
else
print ("Error check the optional argument --module|-m and --dir|-d")
end
elseif n = 2 then
if (cms_path and not optional_module) then
Result := True
else
print ("Error missing value for dir")
Result := False
end
else
Result := True
end
else
Result := False
if n > 4 then
print ("Too many arguments")
end
if n < 1 then
print ("Too few argumetns")
end
end
end
feature -- Helpers
module_name (a_path: PATH): STRING_32
do
-- FIXME: better implementation needed. Either based on "a" new module.info file, or parsing the .ecf
if attached a_path.entry as e then
Result := e.name
else
Result := a_path.name
end
end
feature -- Execution
execute (args: ARRAY [READABLE_STRING_32])
-- Install a module into a cms application.
-- Pattern: module_src/site/* => cms/site/modules/$module_name/*
local
l_site_path, l_cms_path, l_module_source_path: detachable PATH
l_site_dir: DIRECTORY
l_modules_dir: DIRECTORY
l_dest_dir: DIRECTORY
i,n: INTEGER
do
from
i := 1
n := args.upper
until
i > n
loop
if attached args[i] as arg then
if
arg.same_string ("-d")
or arg.same_string ("--dir")
then
i := i + 1
if i <= n then
create l_cms_path.make_from_string (args[i])
end
elseif
arg.same_string ("--site-dir")
then
i := i + 1
if i <= n then
create l_site_path.make_from_string (args[i])
end
elseif
arg.same_string ("-m")
or arg.same_string ("--module")
then
i := i + 1
if i <= n then
create l_module_source_path.make_from_string (args[i])
end
end
end
i := i + 1
end
if l_module_source_path = Void then
l_module_source_path := Execution_environment.current_working_path
end
if l_cms_path = Void then
l_cms_path := Execution_environment.current_working_path.extended ("modules")
end
if l_cms_path /= Void and l_module_source_path /= Void then
-- If l_site_path is not set; initialize it to $cms_path/site.
if l_site_path = Void then
l_site_path := l_cms_path.extended ("site")
end
-- Install configuration files.
if attached module_name (l_module_source_path) as l_mod_name then
create l_site_dir.make_with_path (l_site_path)
if l_site_dir.exists then
create l_modules_dir.make_with_path (l_site_path.extended ("modules"))
if not l_modules_dir.exists then
l_modules_dir.create_dir
end
create l_dest_dir.make_with_path (l_modules_dir.path.extended (l_mod_name))
if not l_dest_dir.exists then
l_dest_dir.create_dir
end
install_module_elements (l_module_source_path, l_dest_dir.path, Void)
-- install_module_elements (l_module_source_path, l_dest_dir.path, Config_dir)
-- install_module_elements (l_module_source_path, l_dest_dir.path, Scripts_dir)
-- install_module_elements (l_module_source_path, l_dest_dir.path, Themes_dir)
print ("Module ")
print (l_mod_name)
print (" was successfuly installed to the CMS Application location ")
print (l_cms_path.name)
print ("%NCheck the module elements at ")
print (l_dest_dir.path.name)
print (".%N")
else
print ({STRING_32} "The CMS Application located at " + l_cms_path.name + "does not have the site or modules folders.%N")
end
else
print ("Error: not possible to retrieve module name.%N")
end
else
print ("Error: wrong path to CMS application.%N")
end
end
install_module_elements (a_module_source_path: PATH; a_cms_module_target_path: PATH; a_element: detachable READABLE_STRING_GENERAL)
-- Install module site files from `a_module_source_path' to cms application `a_cms_module_target_path' under expected modules folder.
-- If `a_element' is set, take into account only sub folder `a_element'.
local
l_path: PATH
l_dest_dir: DIRECTORY
l_src_dir: DIRECTORY
do
l_path := a_module_source_path.extended ("site")
if a_element /= Void then
-- Copy all files under "site/$a_element" into "site/modules/$module_name/$a_element" location.
create l_src_dir.make_with_path (l_path.extended (a_element))
create l_dest_dir.make_with_path (a_cms_module_target_path.extended (a_element))
else
-- Copy all files under "site" into "site/modules/$module_name/" location.
create l_src_dir.make_with_path (l_path)
create l_dest_dir.make_with_path (a_cms_module_target_path)
end
if not l_dest_dir.exists then
l_dest_dir.create_dir
end
copy_directory (l_src_dir, l_dest_dir, True)
end
feature {NONE} -- System/copy files
copy_directory (a_src: DIRECTORY; a_dest: DIRECTORY; is_recursive: BOOLEAN)
-- Copy all elements from `a_src' to `a_dest'.
local
l_dir: DIRECTORY
l_new_dir: DIRECTORY
entry: PATH
l_path: PATH
l_file: FILE
ut: FILE_UTILITIES
do
across
a_src.entries as ic
loop
entry := ic.item
if not (entry.is_current_symbol or else entry.is_parent_symbol) then
l_path := a_src.path.extended_path (entry)
create {RAW_FILE} l_file.make_with_path (l_path)
if not l_file.is_directory then
copy_file_in_directory (l_file, a_dest.path)
elseif is_recursive then
create l_dir.make_with_path (l_path)
create l_new_dir.make_with_path (a_dest.path.extended_path (entry))
ut.create_directory_path (l_new_dir.path)
if l_dir.exists then
copy_directory (l_dir, l_new_dir, is_recursive)
end
end
end
end
end
copy_file_in_directory (a_file: FILE; a_dir: PATH)
-- Copy file `a_file' to dir `a_dir'.
local
retried: BOOLEAN
l_dest: RAW_FILE
do
if not retried then
if attached a_file.path.entry as e then
create l_dest.make_with_path (a_dir.extended_path (e))
l_dest.create_read_write
a_file.open_read
-- Copy file source to destination
if
l_dest.exists and then
l_dest.is_writable and then
a_file.exists and then
a_file.is_readable
then
a_file.copy_to (l_dest)
a_file.close
l_dest.close
end
end
end
rescue
retried := True
retry
end
--feature -- Constants
-- Config_dir: STRING = "config"
-- -- Configuration dir.
-- Scripts_dir: STRING = "scripts"
-- -- Scripts dir.
-- Themes_dir: STRING = "themes"
-- -- Themes dir.
note
copyright: "2011-2015, Jocelyn Fiat, Javier Velilla, Eiffel Software and others"
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
end