improve ftp commands

This commit is contained in:
sagie gur ari 2020-06-26 18:15:54 +00:00
parent c0e9b5b298
commit 93bac91889
5 changed files with 48 additions and 31 deletions

View file

@ -47,17 +47,10 @@ impl Command for CommandImpl {
_commands: &mut Commands,
_line: usize,
) -> CommandResult {
run_with_connection(&arguments, &mut |options: &Options,
run_with_connection(&arguments, &mut |_options: &Options,
ftp_stream: &mut FtpStream|
-> CommandResult {
let options_clone = options.clone();
let operation_result = match options_clone.path {
Some(value) => ftp_stream.list(Some(value.as_str())),
None => ftp_stream.list(None),
};
match operation_result {
match ftp_stream.list(None) {
Ok(output) => {
let mut array = vec![];

View file

@ -126,21 +126,26 @@ fn run_in_ftp_connection_context(
match FtpStream::connect(&connection_string) {
Ok(mut ftp_stream) => {
let operation_result =
if options.user_name.is_some() && options.password.is_some() {
let options_cloned = options.clone();
let user_name = options_cloned.user_name.unwrap();
let password = options_cloned.password.unwrap();
let options_cloned = options.clone();
ftp_stream.login(&user_name, &password)
} else {
Ok(())
};
// login if needed
if options.user_name.is_some() && options.password.is_some() {
let user_name = options_cloned.user_name.unwrap();
let password = options_cloned.password.unwrap();
let result = match operation_result {
Ok(_) => func(&mut ftp_stream),
Err(error) => CommandResult::Error(error.to_string()),
};
if let Err(error) = ftp_stream.login(&user_name, &password) {
return CommandResult::Error(error.to_string());
}
}
// move to another directory
if let Some(path) = options_cloned.path {
if let Err(error) = ftp_stream.cwd(path.as_str()) {
return CommandResult::Error(error.to_string());
}
}
let result = func(&mut ftp_stream);
ftp_stream.quit().unwrap_or(());

View file

@ -47,17 +47,10 @@ impl Command for CommandImpl {
_commands: &mut Commands,
_line: usize,
) -> CommandResult {
run_with_connection(&arguments, &mut |options: &Options,
run_with_connection(&arguments, &mut |_options: &Options,
ftp_stream: &mut FtpStream|
-> CommandResult {
let options_clone = options.clone();
let operation_result = match options_clone.path {
Some(value) => ftp_stream.nlst(Some(value.as_str())),
None => ftp_stream.nlst(None),
};
match operation_result {
match ftp_stream.nlst(None) {
Ok(output) => {
let mut array = vec![];

View file

@ -12,3 +12,16 @@ fn test_valid
release ${arr}
end
fn test_with_path
arr = ftp_list --host test.rebex.net --username demo --password password --path pub
empty = array_is_empty ${arr}
assert_false ${empty}
merged = array_join ${arr} ,
found = contains ${merged} example
assert ${found}
release ${arr}
end

View file

@ -12,3 +12,16 @@ fn test_valid
release ${arr}
end
fn test_with_path
arr = ftp_nlst --host test.rebex.net --username demo --password password --path pub
empty = array_is_empty ${arr}
assert_false ${empty}
merged = array_join ${arr} ,
found = contains ${merged} example
assert ${found}
release ${arr}
end