|
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,62 @@ 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"); |
| 861 | + if (tags == TAGS_SET) |
| 862 | + argv_array_push(argv, "--tags"); |
| 863 | + else if (tags == TAGS_UNSET) |
| 864 | + argv_array_push(argv, "--no-tags"); |
860 | 865 | if (verbosity >= 2) |
861 | | - argv[(*argc)++] = "-v"; |
| 866 | + argv_array_push(argv, "-v"); |
862 | 867 | if (verbosity >= 1) |
863 | | - argv[(*argc)++] = "-v"; |
| 868 | + argv_array_push(argv, "-v"); |
864 | 869 | else if (verbosity < 0) |
865 | | - argv[(*argc)++] = "-q"; |
| 870 | + argv_array_push(argv, "-q"); |
866 | 871 |
|
867 | 872 | } |
868 | 873 |
|
869 | 874 | static int fetch_multiple(struct string_list *list) |
870 | 875 | { |
871 | 876 | int i, result = 0; |
872 | | - const char *argv[12] = { "fetch", "--append" }; |
873 | | - int argc = 2; |
874 | | - |
875 | | - add_options_to_argv(&argc, argv); |
| 877 | + struct argv_array argv = ARGV_ARRAY_INIT; |
876 | 878 |
|
877 | 879 | if (!append && !dry_run) { |
878 | 880 | int errcode = truncate_fetch_head(); |
879 | 881 | if (errcode) |
880 | 882 | return errcode; |
881 | 883 | } |
882 | 884 |
|
| 885 | + argv_array_pushl(&argv, "fetch", "--append", NULL); |
| 886 | + add_options_to_argv(&argv); |
| 887 | + |
883 | 888 | for (i = 0; i < list->nr; i++) { |
884 | 889 | const char *name = list->items[i].string; |
885 | | - argv[argc] = name; |
886 | | - argv[argc + 1] = NULL; |
| 890 | + argv_array_push(&argv, name); |
887 | 891 | if (verbosity >= 0) |
888 | 892 | printf(_("Fetching %s\n"), name); |
889 | | - if (run_command_v_opt(argv, RUN_GIT_CMD)) { |
| 893 | + if (run_command_v_opt(argv.argv, RUN_GIT_CMD)) { |
890 | 894 | error(_("Could not fetch %s"), name); |
891 | 895 | result = 1; |
892 | 896 | } |
| 897 | + argv_array_pop(&argv); |
893 | 898 | } |
894 | 899 |
|
| 900 | + argv_array_clear(&argv); |
895 | 901 | return result; |
896 | 902 | } |
897 | 903 |
|
@@ -1007,13 +1013,14 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) |
1007 | 1013 | } |
1008 | 1014 |
|
1009 | 1015 | 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, |
| 1016 | + struct argv_array options = ARGV_ARRAY_INIT; |
| 1017 | + |
| 1018 | + add_options_to_argv(&options); |
| 1019 | + result = fetch_populated_submodules(&options, |
1014 | 1020 | submodule_prefix, |
1015 | 1021 | recurse_submodules, |
1016 | 1022 | verbosity < 0); |
| 1023 | + argv_array_clear(&options); |
1017 | 1024 | } |
1018 | 1025 |
|
1019 | 1026 | /* All names were strdup()ed or strndup()ed */ |
|
0 commit comments