mirror of
https://github.com/sagiegurari/duckscript
synced 2024-10-14 11:53:05 +00:00
improve ftp commands
This commit is contained in:
parent
c0e9b5b298
commit
93bac91889
|
@ -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![];
|
||||
|
||||
|
|
|
@ -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(());
|
||||
|
||||
|
|
|
@ -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![];
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue