1448
return ret;
1449
}
1450
1451
-static int push_stash(int argc, const char **argv, const char *prefix)
1451
+static int push_stash(int argc, const char **argv, const char *prefix,
1452
+ int push_assumed)
1453
{
1454
+ int force_assume = 0;
1455
int keep_index = -1;
1456
int patch_mode = 0;
1457
int include_untracked = 0;
1473
OPT_END()
1474
};
1475
1474
- if (argc)
1476
+ if (argc) {
1477
+ force_assume = !strcmp(argv[0], "-p");
1478
argc = parse_options(argc, argv, prefix, options,
1479
git_stash_push_usage,
1477
- 0);
1480
+ PARSE_OPT_KEEP_DASHDASH);
1481
+ }
1482
+
1483
+ if (argc) {
1484
+ if (!strcmp(argv[0], "--")) {
1485
+ argc--;
1486
+ argv++;
1487
+ } else if (push_assumed && !force_assume) {
1488
+ die("subcommand wasn't specified; 'push' can't be assumed due to unexpected token '%s'",
1489
+ argv[0]);
1490
+ }
1491
+ }
1492
1493
parse_pathspec(&ps, 0, PATHSPEC_PREFER_FULL | PATHSPEC_PREFIX_ORIGIN,
1494
prefix, argv);
1561
1562
int cmd_stash(int argc, const char **argv, const char *prefix)
1563
{
1550
- int i = -1;
1564
pid_t pid = getpid();
1565
const char *index_file;
1566
struct argv_array args = ARGV_ARRAY_INIT;
1593
(uintmax_t)pid);
1594
1595
if (!argc)
1583
- return !!push_stash(0, NULL, prefix);
1596
+ return !!push_stash(0, NULL, prefix, 0);
1597
else if (!strcmp(argv[0], "apply"))
1598
return !!apply_stash(argc, argv, prefix);
1599
else if (!strcmp(argv[0], "clear"))
1613
else if (!strcmp(argv[0], "create"))
1614
return !!create_stash(argc, argv, prefix);
1615
else if (!strcmp(argv[0], "push"))
1603
- return !!push_stash(argc, argv, prefix);
1616
+ return !!push_stash(argc, argv, prefix, 0);
1617
else if (!strcmp(argv[0], "save"))
1618
return !!save_stash(argc, argv, prefix);
1619
else if (*argv[0] != '-')
1620
usage_msg_opt(xstrfmt(_("unknown subcommand: %s"), argv[0]),
1621
git_stash_usage, options);
1622
1610
- if (strcmp(argv[0], "-p")) {
1611
- while (++i < argc && strcmp(argv[i], "--")) {
1612
- /*
1613
- * `akpqu` is a string which contains all short options,
1614
- * except `-m` which is verified separately.
1615
- */
1616
- if ((strlen(argv[i]) == 2) && *argv[i] == '-' &&
1617
- strchr("akpqu", argv[i][1]))
1618
- continue;
1619
-
1620
- if (!strcmp(argv[i], "--all") ||
1621
- !strcmp(argv[i], "--keep-index") ||
1622
- !strcmp(argv[i], "--no-keep-index") ||
1623
- !strcmp(argv[i], "--patch") ||
1624
- !strcmp(argv[i], "--quiet") ||
1625
- !strcmp(argv[i], "--include-untracked"))
1626
- continue;
1627
-
1628
- /*
1629
- * `-m` and `--message=` are verified separately because
1630
- * they need to be immediately followed by a string
1631
- * (i.e.`-m"foobar"` or `--message="foobar"`).
1632
- */
1633
- if (starts_with(argv[i], "-m") ||
1634
- starts_with(argv[i], "--message="))
1635
- continue;
1636
-
1637
- usage_with_options(git_stash_usage, options);
1638
- }
1639
- }
1640
-
1623
+ /* Assume 'stash push' */
1624
argv_array_push(&args, "push");
1625
argv_array_pushv(&args, argv);
1643
- return !!push_stash(args.argc, args.argv, prefix);
1626
+ return !!push_stash(args.argc, args.argv, prefix, 1);
1627
}