bisect--helper: move all subcommands into their own functions
In a later change, we will use OPT_SUBCOMMAND to parse sub-commands to avoid consuming non-option opts. Since OPT_SUBCOMMAND needs a function pointer to operate, let's move it now. Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com> Signed-off-by: Taylor Blau <me@ttaylorr.com>
Đoàn Trần Công Danh committed
Nov 10, 2022 at 23:36 UTC
464ce0aba8526a287c13f96f8d774d7374b647b3
1 file changed
+121
-34
builtin/bisect--helper.c
+121
-34
@@ -1277,6 +1277,117 @@ static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
1277
return res;
1278
}
1279
1280
+static int cmd_bisect__reset(int argc, const char **argv, const char *prefix UNUSED)
1281
+{
1282
+ if (argc > 1)
1283
+ return error(_("--bisect-reset requires either no argument or a commit"));
1284
+ return bisect_reset(argc ? argv[0] : NULL);
1285
+}
1286
+
1287
+static int cmd_bisect__terms(int argc, const char **argv, const char *prefix UNUSED)
1288
+{
1289
+ int res;
1290
+ struct bisect_terms terms = { 0 };
1291
+
1292
+ if (argc > 1)
1293
+ return error(_("--bisect-terms requires 0 or 1 argument"));
1294
+ res = bisect_terms(&terms, argc == 1 ? argv[0] : NULL);
1295
+ free_terms(&terms);
1296
+ return res;
1297
+}
1298
+
1299
+static int cmd_bisect__start(int argc, const char **argv, const char *prefix UNUSED)
1300
+{
1301
+ int res;
1302
+ struct bisect_terms terms = { 0 };
1303
+
1304
+ set_terms(&terms, "bad", "good");
1305
+ res = bisect_start(&terms, argv, argc);
1306
+ free_terms(&terms);
1307
+ return res;
1308
+}
1309
+
1310
+static int cmd_bisect__next(int argc, const char **argv UNUSED, const char *prefix)
1311
+{
1312
+ int res;
1313
+ struct bisect_terms terms = { 0 };
1314
+
1315
+ if (argc)
1316
+ return error(_("--bisect-next requires 0 arguments"));
1317
+ get_terms(&terms);
1318
+ res = bisect_next(&terms, prefix);
1319
+ free_terms(&terms);
1320
+ return res;
1321
+}
1322
+
1323
+static int cmd_bisect__state(int argc, const char **argv, const char *prefix UNUSED)
1324
+{
1325
+ int res;
1326
+ struct bisect_terms terms = { 0 };
1327
+
1328
+ set_terms(&terms, "bad", "good");
1329
+ get_terms(&terms);
1330
+ res = bisect_state(&terms, argv, argc);
1331
+ free_terms(&terms);
1332
+ return res;
1333
+}
1334
+
1335
+static int cmd_bisect__log(int argc, const char **argv UNUSED, const char *prefix UNUSED)
1336
+{
1337
+ if (argc)
1338
+ return error(_("--bisect-log requires 0 arguments"));
1339
+ return bisect_log();
1340
+}
1341
+
1342
+static int cmd_bisect__replay(int argc, const char **argv, const char *prefix UNUSED)
1343
+{
1344
+ int res;
1345
+ struct bisect_terms terms = { 0 };
1346
+
1347
+ if (argc != 1)
1348
+ return error(_("no logfile given"));
1349
+ set_terms(&terms, "bad", "good");
1350
+ res = bisect_replay(&terms, argv[0]);
1351
+ free_terms(&terms);
1352
+ return res;
1353
+}
1354
+
1355
+static int cmd_bisect__skip(int argc, const char **argv, const char *prefix UNUSED)
1356
+{
1357
+ int res;
1358
+ struct bisect_terms terms = { 0 };
1359
+
1360
+ set_terms(&terms, "bad", "good");
1361
+ get_terms(&terms);
1362
+ res = bisect_skip(&terms, argv, argc);
1363
+ free_terms(&terms);
1364
+ return res;
1365
+}
1366
+
1367
+static int cmd_bisect__visualize(int argc, const char **argv, const char *prefix UNUSED)
1368
+{
1369
+ int res;
1370
+ struct bisect_terms terms = { 0 };
1371
+
1372
+ get_terms(&terms);
1373
+ res = bisect_visualize(&terms, argv, argc);
1374
+ free_terms(&terms);
1375
+ return res;
1376
+}
1377
+
1378
+static int cmd_bisect__run(int argc, const char **argv, const char *prefix UNUSED)
1379
+{
1380
+ int res;
1381
+ struct bisect_terms terms = { 0 };
1382
+
1383
+ if (!argc)
1384
+ return error(_("bisect run failed: no command provided."));
1385
+ get_terms(&terms);
1386
+ res = bisect_run(&terms, argv, argc);
1387
+ free_terms(&terms);
1388
+ return res;
1389
+}
1390
+
1391
int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
1392
{
1393
enum {
@@ -1316,8 +1427,6 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
1427
N_("use <cmd>... to automatically bisect"), BISECT_RUN),
1428
OPT_END()
1429
};
1319
- struct bisect_terms terms = { .term_good = NULL, .term_bad = NULL };
1320
-
1430
argc = parse_options(argc, argv, prefix, options,
1431
git_bisect_helper_usage,
1432
PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_UNKNOWN_OPT);
@@ -1327,60 +1436,38 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
1436
1437
switch (cmdmode) {
1438
case BISECT_RESET:
1330
- if (argc > 1)
1331
- return error(_("--bisect-reset requires either no argument or a commit"));
1332
- res = bisect_reset(argc ? argv[0] : NULL);
1439
+ res = cmd_bisect__reset(argc, argv, prefix);
1440
break;
1441
case BISECT_TERMS:
1335
- if (argc > 1)
1336
- return error(_("--bisect-terms requires 0 or 1 argument"));
1337
- res = bisect_terms(&terms, argc == 1 ? argv[0] : NULL);
1442
+ res = cmd_bisect__terms(argc, argv, prefix);
1443
break;
1444
case BISECT_START:
1340
- set_terms(&terms, "bad", "good");
1341
- res = bisect_start(&terms, argv, argc);
1445
+ res = cmd_bisect__start(argc, argv, prefix);
1446
break;
1447
case BISECT_NEXT:
1344
- if (argc)
1345
- return error(_("--bisect-next requires 0 arguments"));
1346
- get_terms(&terms);
1347
- res = bisect_next(&terms, prefix);
1448
+ res = cmd_bisect__next(argc, argv, prefix);
1449
break;
1450
case BISECT_STATE:
1350
- set_terms(&terms, "bad", "good");
1351
- get_terms(&terms);
1352
- res = bisect_state(&terms, argv, argc);
1451
+ res = cmd_bisect__state(argc, argv, prefix);
1452
break;
1453
case BISECT_LOG:
1355
- if (argc)
1356
- return error(_("--bisect-log requires 0 arguments"));
1357
- res = bisect_log();
1454
+ res = cmd_bisect__log(argc, argv, prefix);
1455
break;
1456
case BISECT_REPLAY:
1360
- if (argc != 1)
1361
- return error(_("no logfile given"));
1362
- set_terms(&terms, "bad", "good");
1363
- res = bisect_replay(&terms, argv[0]);
1457
+ res = cmd_bisect__replay(argc, argv, prefix);
1458
break;
1459
case BISECT_SKIP:
1366
- set_terms(&terms, "bad", "good");
1367
- get_terms(&terms);
1368
- res = bisect_skip(&terms, argv, argc);
1460
+ res = cmd_bisect__skip(argc, argv, prefix);
1461
break;
1462
case BISECT_VISUALIZE:
1371
- get_terms(&terms);
1372
- res = bisect_visualize(&terms, argv, argc);
1463
+ res = cmd_bisect__visualize(argc, argv, prefix);
1464
break;
1465
case BISECT_RUN:
1375
- if (!argc)
1376
- return error(_("bisect run failed: no command provided."));
1377
- get_terms(&terms);
1378
- res = bisect_run(&terms, argv, argc);
1466
+ res = cmd_bisect__run(argc, argv, prefix);
1467
break;
1468
default:
1469
BUG("unknown subcommand %d", cmdmode);
1470
}
1383
- free_terms(&terms);
1471
1472
/*
1473
* Handle early success