diff options
| author | Rutger Broekhoff | 2024-01-24 16:23:51 +0100 |
|---|---|---|
| committer | Rutger Broekhoff | 2024-01-24 16:23:51 +0100 |
| commit | c16ca29d44bf42dd0a08bae4ebb82c8e93738f67 (patch) | |
| tree | 0c0505167ae3e956fc3969c7fe498f58366a1999 | |
| parent | 2bba6b5341fd341de2b282e43f9b62f281ccf40e (diff) | |
| download | gitolfs3-c16ca29d44bf42dd0a08bae4ebb82c8e93738f67.tar.gz gitolfs3-c16ca29d44bf42dd0a08bae4ebb82c8e93738f67.zip | |
Handle unknown commands
| -rw-r--r-- | rs/shell/src/main.rs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/rs/shell/src/main.rs b/rs/shell/src/main.rs index cbe01e7..02da053 100644 --- a/rs/shell/src/main.rs +++ b/rs/shell/src/main.rs | |||
| @@ -80,33 +80,35 @@ fn is_posix_space(c: char) -> bool { | |||
| 80 | } | 80 | } |
| 81 | 81 | ||
| 82 | fn main() -> ExitCode { | 82 | fn main() -> ExitCode { |
| 83 | let bad_usage = ExitCode::from(2); | ||
| 84 | |||
| 83 | let mut args = std::env::args().skip(1); | 85 | let mut args = std::env::args().skip(1); |
| 84 | if args.next() != Some("-c".to_string()) { | 86 | if args.next() != Some("-c".to_string()) { |
| 85 | eprintln!("Expected usage: shell -c <argument>"); | 87 | eprintln!("Expected usage: shell -c <argument>"); |
| 86 | return ExitCode::FAILURE; | 88 | return bad_usage; |
| 87 | } | 89 | } |
| 88 | let Some(cmd) = args.next() else { | 90 | let Some(cmd) = args.next() else { |
| 89 | eprintln!("Missing argument for argument '-c'"); | 91 | eprintln!("Missing argument for argument '-c'"); |
| 90 | return ExitCode::FAILURE; | 92 | return bad_usage; |
| 91 | }; | 93 | }; |
| 92 | if args.next() != None { | 94 | if args.next() != None { |
| 93 | eprintln!("Too many arguments passed"); | 95 | eprintln!("Too many arguments passed"); |
| 94 | return ExitCode::FAILURE; | 96 | return bad_usage; |
| 95 | } | 97 | } |
| 96 | 98 | ||
| 97 | let Some(mut cmd) = parse_cmd(&cmd) else { | 99 | let Some(mut cmd) = parse_cmd(&cmd) else { |
| 98 | eprintln!("Bad command"); | 100 | eprintln!("Bad command"); |
| 99 | return ExitCode::FAILURE; | 101 | return bad_usage; |
| 100 | }; | 102 | }; |
| 101 | 103 | ||
| 102 | let Some(mut program) = cmd.drain(0..1).next() else { | 104 | let Some(mut program) = cmd.drain(0..1).next() else { |
| 103 | eprintln!("Bad command"); | 105 | eprintln!("Bad command"); |
| 104 | return ExitCode::FAILURE; | 106 | return bad_usage; |
| 105 | }; | 107 | }; |
| 106 | if program == "git" { | 108 | if program == "git" { |
| 107 | let Some(subcommand) = cmd.drain(0..1).next() else { | 109 | let Some(subcommand) = cmd.drain(0..1).next() else { |
| 108 | eprintln!("Bad command"); | 110 | eprintln!("Bad command"); |
| 109 | return ExitCode::FAILURE; | 111 | return bad_usage; |
| 110 | }; | 112 | }; |
| 111 | program.push('-'); | 113 | program.push('-'); |
| 112 | program.push_str(&subcommand); | 114 | program.push_str(&subcommand); |
| @@ -118,18 +120,21 @@ fn main() -> ExitCode { | |||
| 118 | if git_cmds.contains(&program.as_str()) { | 120 | if git_cmds.contains(&program.as_str()) { |
| 119 | if cmd.len() != 1 { | 121 | if cmd.len() != 1 { |
| 120 | eprintln!("Bad command"); | 122 | eprintln!("Bad command"); |
| 121 | return ExitCode::FAILURE; | 123 | return bad_usage; |
| 122 | } | 124 | } |
| 123 | let repository = cmd[0].trim_start_matches('/'); | 125 | let repository = cmd[0].trim_start_matches('/'); |
| 124 | args.push(repository); | 126 | args.push(repository); |
| 125 | } else if program == "git-lfs-authenticate" { | 127 | } else if program == "git-lfs-authenticate" { |
| 126 | if cmd.len() != 2 { | 128 | if cmd.len() != 2 { |
| 127 | eprintln!("Bad command"); | 129 | eprintln!("Bad command"); |
| 128 | return ExitCode::FAILURE; | 130 | return bad_usage; |
| 129 | } | 131 | } |
| 130 | let repository = cmd[0].trim_start_matches('/'); | 132 | let repository = cmd[0].trim_start_matches('/'); |
| 131 | args.push(repository); | 133 | args.push(repository); |
| 132 | args.push(&cmd[1]); | 134 | args.push(&cmd[1]); |
| 135 | } else { | ||
| 136 | eprintln!("Unknown command"); | ||
| 137 | return bad_usage; | ||
| 133 | } | 138 | } |
| 134 | 139 | ||
| 135 | let e = std::process::Command::new(program).args(args).exec(); | 140 | let e = std::process::Command::new(program).args(args).exec(); |