|
14 | 14 | #include "transport.h"
|
15 | 15 | #include "submodule.h"
|
16 | 16 | #include "connected.h"
|
| 17 | +#include "argv-array.h" |
17 | 18 |
|
18 | 19 | static const char * const builtin_fetch_usage[] = {
|
19 | 20 | "git fetch [<options>] [<repository> [<refspec>...]]",
|
@@ -841,57 +842,58 @@ static int add_remote_or_group(const char *name, struct string_list *list)
|
841 | 842 | return 1;
|
842 | 843 | }
|
843 | 844 |
|
844 |
| -static void add_options_to_argv(int *argc, const char **argv) |
| 845 | +static void add_options_to_argv(struct argv_array *argv) |
845 | 846 | {
|
846 | 847 | if (dry_run)
|
847 |
| - argv[(*argc)++] = "--dry-run"; |
| 848 | + argv_array_push(argv, "--dry-run"); |
848 | 849 | if (prune)
|
849 |
| - argv[(*argc)++] = "--prune"; |
| 850 | + argv_array_push(argv, "--prune"); |
850 | 851 | if (update_head_ok)
|
851 |
| - argv[(*argc)++] = "--update-head-ok"; |
| 852 | + argv_array_push(argv, "--update-head-ok"); |
852 | 853 | if (force)
|
853 |
| - argv[(*argc)++] = "--force"; |
| 854 | + argv_array_push(argv, "--force"); |
854 | 855 | if (keep)
|
855 |
| - argv[(*argc)++] = "--keep"; |
| 856 | + argv_array_push(argv, "--keep"); |
856 | 857 | if (recurse_submodules == RECURSE_SUBMODULES_ON)
|
857 |
| - argv[(*argc)++] = "--recurse-submodules"; |
| 858 | + argv_array_push(argv, "--recurse-submodules"); |
858 | 859 | else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND)
|
859 |
| - argv[(*argc)++] = "--recurse-submodules=on-demand"; |
| 860 | + argv_array_push(argv, "--recurse-submodules=on-demand"); |
860 | 861 | if (verbosity >= 2)
|
861 |
| - argv[(*argc)++] = "-v"; |
| 862 | + argv_array_push(argv, "-v"); |
862 | 863 | if (verbosity >= 1)
|
863 |
| - argv[(*argc)++] = "-v"; |
| 864 | + argv_array_push(argv, "-v"); |
864 | 865 | else if (verbosity < 0)
|
865 |
| - argv[(*argc)++] = "-q"; |
| 866 | + argv_array_push(argv, "-q"); |
866 | 867 |
|
867 | 868 | }
|
868 | 869 |
|
869 | 870 | static int fetch_multiple(struct string_list *list)
|
870 | 871 | {
|
871 | 872 | int i, result = 0;
|
872 |
| - const char *argv[12] = { "fetch", "--append" }; |
873 |
| - int argc = 2; |
874 |
| - |
875 |
| - add_options_to_argv(&argc, argv); |
| 873 | + struct argv_array argv = ARGV_ARRAY_INIT; |
876 | 874 |
|
877 | 875 | if (!append && !dry_run) {
|
878 | 876 | int errcode = truncate_fetch_head();
|
879 | 877 | if (errcode)
|
880 | 878 | return errcode;
|
881 | 879 | }
|
882 | 880 |
|
| 881 | + argv_array_pushl(&argv, "fetch", "--append", NULL); |
| 882 | + add_options_to_argv(&argv); |
| 883 | + |
883 | 884 | for (i = 0; i < list->nr; i++) {
|
884 | 885 | const char *name = list->items[i].string;
|
885 |
| - argv[argc] = name; |
886 |
| - argv[argc + 1] = NULL; |
| 886 | + argv_array_push(&argv, name); |
887 | 887 | if (verbosity >= 0)
|
888 | 888 | printf(_("Fetching %s\n"), name);
|
889 |
| - if (run_command_v_opt(argv, RUN_GIT_CMD)) { |
| 889 | + if (run_command_v_opt(argv.argv, RUN_GIT_CMD)) { |
890 | 890 | error(_("Could not fetch %s"), name);
|
891 | 891 | result = 1;
|
892 | 892 | }
|
| 893 | + argv_array_pop(&argv); |
893 | 894 | }
|
894 | 895 |
|
| 896 | + argv_array_clear(&argv); |
895 | 897 | return result;
|
896 | 898 | }
|
897 | 899 |
|
@@ -1007,13 +1009,14 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
|
1007 | 1009 | }
|
1008 | 1010 |
|
1009 | 1011 | if (!result && (recurse_submodules != RECURSE_SUBMODULES_OFF)) {
|
1010 |
| - const char *options[10]; |
1011 |
| - int num_options = 0; |
1012 |
| - add_options_to_argv(&num_options, options); |
1013 |
| - result = fetch_populated_submodules(num_options, options, |
| 1012 | + struct argv_array options = ARGV_ARRAY_INIT; |
| 1013 | + |
| 1014 | + add_options_to_argv(&options); |
| 1015 | + result = fetch_populated_submodules(options.argc, options.argv, |
1014 | 1016 | submodule_prefix,
|
1015 | 1017 | recurse_submodules,
|
1016 | 1018 | verbosity < 0);
|
| 1019 | + argv_array_clear(&options); |
1017 | 1020 | }
|
1018 | 1021 |
|
1019 | 1022 | /* All names were strdup()ed or strndup()ed */
|
|
0 commit comments