@@ -5,7 +5,9 @@ extern crate ignore;
5
5
extern crate serde_json;
6
6
extern crate sysinfo;
7
7
8
- use clap:: { crate_authors, crate_description, crate_version, Arg , Command } ;
8
+ use clap:: {
9
+ crate_authors, crate_description, crate_version, Arg , ArgGroup , Command ,
10
+ } ;
9
11
use goblin:: error:: Error ;
10
12
#[ cfg( feature = "macho" ) ]
11
13
use goblin:: mach:: Mach ;
@@ -227,23 +229,15 @@ fn main() {
227
229
. long ( "directory" )
228
230
. value_name ( "DIRECTORY" )
229
231
. help ( "Target directory" )
230
- . takes_value ( true )
231
- . conflicts_with ( "file" )
232
- . conflicts_with ( "pid" )
233
- . conflicts_with ( "process" )
234
- . conflicts_with ( "process-all" ) ,
232
+ . takes_value ( true ) ,
235
233
)
236
234
. arg (
237
235
Arg :: new ( "file" )
238
236
. short ( 'f' )
239
237
. long ( "file" )
240
238
. value_name ( "FILE" )
241
239
. help ( "Target file" )
242
- . takes_value ( true )
243
- . conflicts_with ( "directory" )
244
- . conflicts_with ( "pid" )
245
- . conflicts_with ( "process" )
246
- . conflicts_with ( "process-all" ) ,
240
+ . takes_value ( true ) ,
247
241
)
248
242
. arg (
249
243
Arg :: new ( "json" )
@@ -256,8 +250,10 @@ fn main() {
256
250
. short ( 'm' )
257
251
. long ( "maps" )
258
252
. help ( "Include process memory maps (Linux only)" )
253
+ . requires ( "pid" )
259
254
. requires ( "process" )
260
- . requires ( "process-all" ) ,
255
+ . requires ( "process-all" )
256
+ . conflicts_with_all ( & [ "directory" , "file" ] ) ,
261
257
)
262
258
. arg (
263
259
Arg :: new ( "no-color" )
@@ -272,11 +268,7 @@ fn main() {
272
268
"Process ID of running process to check\n \
273
269
(comma separated for multiple PIDs)",
274
270
)
275
- . takes_value ( true )
276
- . conflicts_with ( "directory" )
277
- . conflicts_with ( "file" )
278
- . conflicts_with ( "process" )
279
- . conflicts_with ( "process-all" ) ,
271
+ . takes_value ( true ) ,
280
272
)
281
273
. arg (
282
274
Arg :: new ( "pretty" )
@@ -290,21 +282,18 @@ fn main() {
290
282
. long ( "process" )
291
283
. value_name ( "NAME" )
292
284
. help ( "Name of running process to check" )
293
- . takes_value ( true )
294
- . conflicts_with ( "directory" )
295
- . conflicts_with ( "file" )
296
- . conflicts_with ( "pid" )
297
- . conflicts_with ( "process-all" ) ,
285
+ . takes_value ( true ) ,
298
286
)
299
287
. arg (
300
288
Arg :: new ( "process-all" )
301
289
. short ( 'P' )
302
290
. long ( "process-all" )
303
- . help ( "Check all running processes" )
304
- . conflicts_with ( "directory" )
305
- . conflicts_with ( "file" )
306
- . conflicts_with ( "pid" )
307
- . conflicts_with ( "process" ) ,
291
+ . help ( "Check all running processes" ) ,
292
+ )
293
+ . group (
294
+ ArgGroup :: new ( "operation" )
295
+ . args ( & [ "directory" , "file" , "pid" , "process" , "process-all" ] )
296
+ . required ( true ) ,
308
297
)
309
298
. get_matches ( ) ;
310
299
0 commit comments