class EL_SSH_COMMAND_FACTORY
Client examples: OS_COMMAND_AUTOTEST_APP
Factory for commands conforming to EL_SECURE_SHELL_COMMAND.
Future Addition
Make a routine to check if a remote file needs updating by obtaining a hash
ssh user@remote_server 'md5sum /path/to/remote/file'
note
description: "Factory for commands conforming to ${EL_SECURE_SHELL_COMMAND}."
notes: "[
**Future Addition**
Make a routine to check if a remote file needs updating by obtaining a hash
ssh user@remote_server 'md5sum /path/to/remote/file'
]"
author: "Finnian Reilly"
copyright: "Copyright (c) 2001-2022 Finnian Reilly"
contact: "finnian at eiffel hyphen loop dot com"
license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
date: "2024-06-22 5:26:20 GMT (Saturday 22nd June 2024)"
revision: "3"
class
EL_SSH_COMMAND_FACTORY
inherit
ANY
EL_STRING_GENERAL_ROUTINES
create
make
feature {NONE} -- Initialization
make (a_ssh_name: READABLE_STRING_GENERAL)
require
valid_name: a_ssh_name.count >= 7 and then (4 |..| (a_ssh_name.count - 3)).has (a_ssh_name.index_of ('@', 1))
do
ssh_name := as_zstring (a_ssh_name)
end
feature -- Access
ssh_name: ZSTRING
-- defines ssh remote username and address
-- eg. john@75.34.211.13
md5_digest (target_path: FILE_PATH): STRING
-- text mode digest
do
Result := new_md5_digest (target_path).digest_string
end
md5_binary_digest (target_path: FILE_PATH): STRING
-- binary mode digest
do
Result := new_md5_binary_digest (target_path).digest_string
end
feature -- Basic operations
make_remote_dir (dir_path: DIR_PATH)
-- ensure remote destination exists
do
if not new_test_directory (dir_path).exists and then attached new_make_directory (dir_path) as cmd then
cmd.execute
end
end
feature -- Commands
new_copy_files (a_source_files, a_destination_path: DIR_PATH): EL_RSYNC_COMMAND_I
-- mirror local set of files on remote host using Unix rsync command
-- `a_source_files.base' may contain a wildcard operator, `*.txt' for example
do
Result := new_mirror_directory (a_source_files, a_destination_path)
Result.update.enable
end
new_file_copy (destination_dir: DIR_PATH): EL_SSH_COPY_COMMAND
-- copy a single file to remote `destination_dir' using Unix `scp' ssh command
do
create Result.make (ssh_name)
Result.set_destination_dir (destination_dir)
end
new_make_directory (target_dir: DIR_PATH): EL_SSH_MAKE_DIRECTORY_COMMAND
do
create Result.make (ssh_name)
Result.set_target_dir (target_dir)
end
new_md5_digest (target_path: FILE_PATH): EL_SSH_MD5_HASH_COMMAND
-- text mode digest command
do
create Result.make (ssh_name)
Result.set_target_path (target_path)
end
new_md5_binary_digest (target_path: FILE_PATH): EL_SSH_MD5_HASH_COMMAND
-- text mode digest command
do
Result := new_md5_digest (target_path)
Result.set_binary_mode
end
new_mirror_directory (a_source_path, a_destination_path: DIR_PATH): EL_RSYNC_COMMAND_I
-- mirror local directory tree on remote host using Unix rsync command
do
create {EL_RSYNC_COMMAND_IMP} Result.make_ssh (ssh_name, a_source_path, a_destination_path)
Result.archive.enable
Result.compress.enable
Result.delete.enable
Result.verbose.enable
Result.progress.enable
end
new_test_directory (target_dir: DIR_PATH): EL_SSH_TEST_DIRECTORY_COMMAND
-- ssh command to test for existence of directory on remote host
do
create Result.make (ssh_name)
Result.set_target_dir (target_dir)
end
end