56
56
* - dropping use-separate-remote and no-separate-remote compatibility
57
57
*
58
58
*/
59
- static const char * const builtin_clone_usage [] = {
60
- N_ ("git clone [<options>] [--] <repo> [<dir>]" ),
61
- NULL
62
- };
63
59
64
60
static int option_no_checkout , option_bare , option_mirror , option_single_branch = -1 ;
65
61
static int option_local = -1 , option_no_hardlinks , option_shared ;
66
62
static int option_no_tags ;
67
63
static int option_shallow_submodules ;
68
- static int option_reject_shallow = -1 ; /* unspecified */
69
64
static int config_reject_shallow = -1 ; /* unspecified */
70
- static int deepen ;
71
- static char * option_template , * option_depth , * option_since ;
72
- static char * option_origin = NULL ;
73
65
static char * remote_name = NULL ;
74
66
static char * option_branch = NULL ;
75
- static struct string_list option_not = STRING_LIST_INIT_NODUP ;
76
- static const char * real_git_dir ;
77
- static const char * ref_format ;
78
- static const char * option_upload_pack = "git-upload-pack" ;
79
67
static int option_verbosity ;
80
- static int option_progress = -1 ;
81
- static int option_sparse_checkout ;
82
- static enum transport_family family ;
83
- static struct string_list option_config = STRING_LIST_INIT_NODUP ;
84
68
static struct string_list option_required_reference = STRING_LIST_INIT_NODUP ;
85
69
static struct string_list option_optional_reference = STRING_LIST_INIT_NODUP ;
86
- static int option_dissociate ;
87
70
static int max_jobs = -1 ;
88
71
static struct string_list option_recurse_submodules = STRING_LIST_INIT_NODUP ;
89
72
static struct list_objects_filter_options filter_options = LIST_OBJECTS_FILTER_INIT ;
90
- static int option_filter_submodules = -1 ; /* unspecified */
91
73
static int config_filter_submodules = -1 ; /* unspecified */
92
- static struct string_list server_options = STRING_LIST_INIT_NODUP ;
93
74
static int option_remote_submodules ;
94
- static const char * bundle_uri ;
95
75
96
76
static int recurse_submodules_cb (const struct option * opt ,
97
77
const char * arg , int unset )
@@ -107,78 +87,6 @@ static int recurse_submodules_cb(const struct option *opt,
107
87
return 0 ;
108
88
}
109
89
110
- static struct option builtin_clone_options [] = {
111
- OPT__VERBOSITY (& option_verbosity ),
112
- OPT_BOOL (0 , "progress" , & option_progress ,
113
- N_ ("force progress reporting" )),
114
- OPT_BOOL (0 , "reject-shallow" , & option_reject_shallow ,
115
- N_ ("don't clone shallow repository" )),
116
- OPT_BOOL ('n' , "no-checkout" , & option_no_checkout ,
117
- N_ ("don't create a checkout" )),
118
- OPT_BOOL (0 , "bare" , & option_bare , N_ ("create a bare repository" )),
119
- OPT_HIDDEN_BOOL (0 , "naked" , & option_bare ,
120
- N_ ("create a bare repository" )),
121
- OPT_BOOL (0 , "mirror" , & option_mirror ,
122
- N_ ("create a mirror repository (implies --bare)" )),
123
- OPT_BOOL ('l' , "local" , & option_local ,
124
- N_ ("to clone from a local repository" )),
125
- OPT_BOOL (0 , "no-hardlinks" , & option_no_hardlinks ,
126
- N_ ("don't use local hardlinks, always copy" )),
127
- OPT_BOOL ('s' , "shared" , & option_shared ,
128
- N_ ("setup as shared repository" )),
129
- { OPTION_CALLBACK , 0 , "recurse-submodules" , & option_recurse_submodules ,
130
- N_ ("pathspec" ), N_ ("initialize submodules in the clone" ),
131
- PARSE_OPT_OPTARG , recurse_submodules_cb , (intptr_t )"." },
132
- OPT_ALIAS (0 , "recursive" , "recurse-submodules" ),
133
- OPT_INTEGER ('j' , "jobs" , & max_jobs ,
134
- N_ ("number of submodules cloned in parallel" )),
135
- OPT_STRING (0 , "template" , & option_template , N_ ("template-directory" ),
136
- N_ ("directory from which templates will be used" )),
137
- OPT_STRING_LIST (0 , "reference" , & option_required_reference , N_ ("repo" ),
138
- N_ ("reference repository" )),
139
- OPT_STRING_LIST (0 , "reference-if-able" , & option_optional_reference ,
140
- N_ ("repo" ), N_ ("reference repository" )),
141
- OPT_BOOL (0 , "dissociate" , & option_dissociate ,
142
- N_ ("use --reference only while cloning" )),
143
- OPT_STRING ('o' , "origin" , & option_origin , N_ ("name" ),
144
- N_ ("use <name> instead of 'origin' to track upstream" )),
145
- OPT_STRING ('b' , "branch" , & option_branch , N_ ("branch" ),
146
- N_ ("checkout <branch> instead of the remote's HEAD" )),
147
- OPT_STRING ('u' , "upload-pack" , & option_upload_pack , N_ ("path" ),
148
- N_ ("path to git-upload-pack on the remote" )),
149
- OPT_STRING (0 , "depth" , & option_depth , N_ ("depth" ),
150
- N_ ("create a shallow clone of that depth" )),
151
- OPT_STRING (0 , "shallow-since" , & option_since , N_ ("time" ),
152
- N_ ("create a shallow clone since a specific time" )),
153
- OPT_STRING_LIST (0 , "shallow-exclude" , & option_not , N_ ("ref" ),
154
- N_ ("deepen history of shallow clone, excluding ref" )),
155
- OPT_BOOL (0 , "single-branch" , & option_single_branch ,
156
- N_ ("clone only one branch, HEAD or --branch" )),
157
- OPT_BOOL (0 , "no-tags" , & option_no_tags ,
158
- N_ ("don't clone any tags, and make later fetches not to follow them" )),
159
- OPT_BOOL (0 , "shallow-submodules" , & option_shallow_submodules ,
160
- N_ ("any cloned submodules will be shallow" )),
161
- OPT_STRING (0 , "separate-git-dir" , & real_git_dir , N_ ("gitdir" ),
162
- N_ ("separate git dir from working tree" )),
163
- OPT_STRING (0 , "ref-format" , & ref_format , N_ ("format" ),
164
- N_ ("specify the reference format to use" )),
165
- OPT_STRING_LIST ('c' , "config" , & option_config , N_ ("key=value" ),
166
- N_ ("set config inside the new repository" )),
167
- OPT_STRING_LIST (0 , "server-option" , & server_options ,
168
- N_ ("server-specific" ), N_ ("option to transmit" )),
169
- OPT_IPVERSION (& family ),
170
- OPT_PARSE_LIST_OBJECTS_FILTER (& filter_options ),
171
- OPT_BOOL (0 , "also-filter-submodules" , & option_filter_submodules ,
172
- N_ ("apply partial clone filters to submodules" )),
173
- OPT_BOOL (0 , "remote-submodules" , & option_remote_submodules ,
174
- N_ ("any cloned submodules will use their remote-tracking branch" )),
175
- OPT_BOOL (0 , "sparse" , & option_sparse_checkout ,
176
- N_ ("initialize sparse-checkout file to include only files at root" )),
177
- OPT_STRING (0 , "bundle-uri" , & bundle_uri ,
178
- N_ ("uri" ), N_ ("a URI for downloading bundles before fetching from origin remote" )),
179
- OPT_END ()
180
- };
181
-
182
90
static const char * get_repo_path_1 (struct strbuf * path , int * is_bundle )
183
91
{
184
92
static const char * suffix [] = { "/.git" , "" , ".git/.git" , ".git" };
@@ -989,10 +897,103 @@ int cmd_clone(int argc,
989
897
int hash_algo ;
990
898
enum ref_storage_format ref_storage_format = REF_STORAGE_FORMAT_UNKNOWN ;
991
899
const int do_not_override_repo_unix_permissions = -1 ;
900
+ int option_reject_shallow = -1 ; /* unspecified */
901
+ int deepen = 0 ;
902
+ char * option_template = NULL , * option_depth = NULL , * option_since = NULL ;
903
+ char * option_origin = NULL ;
904
+ struct string_list option_not = STRING_LIST_INIT_NODUP ;
905
+ const char * real_git_dir = NULL ;
906
+ const char * ref_format = NULL ;
907
+ const char * option_upload_pack = "git-upload-pack" ;
908
+ int option_progress = -1 ;
909
+ int option_sparse_checkout = 0 ;
910
+ enum transport_family family = TRANSPORT_FAMILY_ALL ;
911
+ struct string_list option_config = STRING_LIST_INIT_DUP ;
912
+ int option_dissociate = 0 ;
913
+ int option_filter_submodules = -1 ; /* unspecified */
914
+ struct string_list server_options = STRING_LIST_INIT_NODUP ;
915
+ const char * bundle_uri = NULL ;
992
916
993
917
struct transport_ls_refs_options transport_ls_refs_options =
994
918
TRANSPORT_LS_REFS_OPTIONS_INIT ;
995
919
920
+ struct option builtin_clone_options [] = {
921
+ OPT__VERBOSITY (& option_verbosity ),
922
+ OPT_BOOL (0 , "progress" , & option_progress ,
923
+ N_ ("force progress reporting" )),
924
+ OPT_BOOL (0 , "reject-shallow" , & option_reject_shallow ,
925
+ N_ ("don't clone shallow repository" )),
926
+ OPT_BOOL ('n' , "no-checkout" , & option_no_checkout ,
927
+ N_ ("don't create a checkout" )),
928
+ OPT_BOOL (0 , "bare" , & option_bare , N_ ("create a bare repository" )),
929
+ OPT_HIDDEN_BOOL (0 , "naked" , & option_bare ,
930
+ N_ ("create a bare repository" )),
931
+ OPT_BOOL (0 , "mirror" , & option_mirror ,
932
+ N_ ("create a mirror repository (implies --bare)" )),
933
+ OPT_BOOL ('l' , "local" , & option_local ,
934
+ N_ ("to clone from a local repository" )),
935
+ OPT_BOOL (0 , "no-hardlinks" , & option_no_hardlinks ,
936
+ N_ ("don't use local hardlinks, always copy" )),
937
+ OPT_BOOL ('s' , "shared" , & option_shared ,
938
+ N_ ("setup as shared repository" )),
939
+ { OPTION_CALLBACK , 0 , "recurse-submodules" , & option_recurse_submodules ,
940
+ N_ ("pathspec" ), N_ ("initialize submodules in the clone" ),
941
+ PARSE_OPT_OPTARG , recurse_submodules_cb , (intptr_t )"." },
942
+ OPT_ALIAS (0 , "recursive" , "recurse-submodules" ),
943
+ OPT_INTEGER ('j' , "jobs" , & max_jobs ,
944
+ N_ ("number of submodules cloned in parallel" )),
945
+ OPT_STRING (0 , "template" , & option_template , N_ ("template-directory" ),
946
+ N_ ("directory from which templates will be used" )),
947
+ OPT_STRING_LIST (0 , "reference" , & option_required_reference , N_ ("repo" ),
948
+ N_ ("reference repository" )),
949
+ OPT_STRING_LIST (0 , "reference-if-able" , & option_optional_reference ,
950
+ N_ ("repo" ), N_ ("reference repository" )),
951
+ OPT_BOOL (0 , "dissociate" , & option_dissociate ,
952
+ N_ ("use --reference only while cloning" )),
953
+ OPT_STRING ('o' , "origin" , & option_origin , N_ ("name" ),
954
+ N_ ("use <name> instead of 'origin' to track upstream" )),
955
+ OPT_STRING ('b' , "branch" , & option_branch , N_ ("branch" ),
956
+ N_ ("checkout <branch> instead of the remote's HEAD" )),
957
+ OPT_STRING ('u' , "upload-pack" , & option_upload_pack , N_ ("path" ),
958
+ N_ ("path to git-upload-pack on the remote" )),
959
+ OPT_STRING (0 , "depth" , & option_depth , N_ ("depth" ),
960
+ N_ ("create a shallow clone of that depth" )),
961
+ OPT_STRING (0 , "shallow-since" , & option_since , N_ ("time" ),
962
+ N_ ("create a shallow clone since a specific time" )),
963
+ OPT_STRING_LIST (0 , "shallow-exclude" , & option_not , N_ ("ref" ),
964
+ N_ ("deepen history of shallow clone, excluding ref" )),
965
+ OPT_BOOL (0 , "single-branch" , & option_single_branch ,
966
+ N_ ("clone only one branch, HEAD or --branch" )),
967
+ OPT_BOOL (0 , "no-tags" , & option_no_tags ,
968
+ N_ ("don't clone any tags, and make later fetches not to follow them" )),
969
+ OPT_BOOL (0 , "shallow-submodules" , & option_shallow_submodules ,
970
+ N_ ("any cloned submodules will be shallow" )),
971
+ OPT_STRING (0 , "separate-git-dir" , & real_git_dir , N_ ("gitdir" ),
972
+ N_ ("separate git dir from working tree" )),
973
+ OPT_STRING (0 , "ref-format" , & ref_format , N_ ("format" ),
974
+ N_ ("specify the reference format to use" )),
975
+ OPT_STRING_LIST ('c' , "config" , & option_config , N_ ("key=value" ),
976
+ N_ ("set config inside the new repository" )),
977
+ OPT_STRING_LIST (0 , "server-option" , & server_options ,
978
+ N_ ("server-specific" ), N_ ("option to transmit" )),
979
+ OPT_IPVERSION (& family ),
980
+ OPT_PARSE_LIST_OBJECTS_FILTER (& filter_options ),
981
+ OPT_BOOL (0 , "also-filter-submodules" , & option_filter_submodules ,
982
+ N_ ("apply partial clone filters to submodules" )),
983
+ OPT_BOOL (0 , "remote-submodules" , & option_remote_submodules ,
984
+ N_ ("any cloned submodules will use their remote-tracking branch" )),
985
+ OPT_BOOL (0 , "sparse" , & option_sparse_checkout ,
986
+ N_ ("initialize sparse-checkout file to include only files at root" )),
987
+ OPT_STRING (0 , "bundle-uri" , & bundle_uri ,
988
+ N_ ("uri" ), N_ ("a URI for downloading bundles before fetching from origin remote" )),
989
+ OPT_END ()
990
+ };
991
+
992
+ const char * const builtin_clone_usage [] = {
993
+ N_ ("git clone [<options>] [--] <repo> [<dir>]" ),
994
+ NULL
995
+ };
996
+
996
997
packet_trace_identity ("clone" );
997
998
998
999
git_config (git_clone_config , NULL );
@@ -1138,8 +1139,8 @@ int cmd_clone(int argc,
1138
1139
for_each_string_list_item (item , & option_recurse_submodules ) {
1139
1140
strbuf_addf (& sb , "submodule.active=%s" ,
1140
1141
item -> string );
1141
- string_list_append (& option_config ,
1142
- strbuf_detach (& sb , NULL ) );
1142
+ string_list_append (& option_config , sb . buf );
1143
+ strbuf_reset (& sb );
1143
1144
}
1144
1145
1145
1146
if (!git_config_get_bool ("submodule.stickyRecursiveClone" , & val ) &&
@@ -1161,6 +1162,8 @@ int cmd_clone(int argc,
1161
1162
string_list_append (& option_config ,
1162
1163
"submodule.alternateErrorStrategy=info" );
1163
1164
}
1165
+
1166
+ strbuf_release (& sb );
1164
1167
}
1165
1168
1166
1169
/*
@@ -1578,6 +1581,10 @@ int cmd_clone(int argc,
1578
1581
err = checkout (submodule_progress , filter_submodules ,
1579
1582
ref_storage_format );
1580
1583
1584
+ string_list_clear (& option_not , 0 );
1585
+ string_list_clear (& option_config , 0 );
1586
+ string_list_clear (& server_options , 0 );
1587
+
1581
1588
free (remote_name );
1582
1589
strbuf_release (& reflog_msg );
1583
1590
strbuf_release (& branch_top );
0 commit comments