@@ -1173,88 +1173,56 @@ static int prune_remote(const char *remote, int dry_run)
11731173 return result ;
11741174}
11751175
1176- static int get_one_remote_for_update ( struct remote * remote , void * priv )
1176+ static int get_remote_default ( const char * key , const char * value , void * priv )
11771177{
1178- struct string_list * list = priv ;
1179- if (!remote -> skip_default_update )
1180- string_list_append (remote -> name , list );
1181- return 0 ;
1182- }
1183-
1184- static struct remote_group {
1185- const char * name ;
1186- struct string_list * list ;
1187- } remote_group ;
1188-
1189- static int get_remote_group (const char * key , const char * value , void * num_hits )
1190- {
1191- if (!prefixcmp (key , "remotes." ) &&
1192- !strcmp (key + 8 , remote_group .name )) {
1193- /* split list by white space */
1194- int space = strcspn (value , " \t\n" );
1195- while (* value ) {
1196- if (space > 1 ) {
1197- string_list_append (xstrndup (value , space ),
1198- remote_group .list );
1199- ++ * ((int * )num_hits );
1200- }
1201- value += space + (value [space ] != '\0' );
1202- space = strcspn (value , " \t\n" );
1203- }
1178+ if (strcmp (key , "remotes.default" ) == 0 ) {
1179+ int * found = priv ;
1180+ * found = 1 ;
12041181 }
1205-
12061182 return 0 ;
12071183}
12081184
12091185static int update (int argc , const char * * argv )
12101186{
1211- int i , result = 0 , prune = 0 ;
1212- struct string_list list = { NULL , 0 , 0 , 0 };
1213- static const char * default_argv [] = { NULL , "default" , NULL };
1187+ int i , prune = 0 ;
12141188 struct option options [] = {
12151189 OPT_GROUP ("update specific options" ),
12161190 OPT_BOOLEAN ('p' , "prune" , & prune ,
12171191 "prune remotes after fetching" ),
12181192 OPT_END ()
12191193 };
1194+ const char * * fetch_argv ;
1195+ int fetch_argc = 0 ;
1196+ int default_defined = 0 ;
1197+
1198+ fetch_argv = xmalloc (sizeof (char * ) * (argc + 5 ));
12201199
12211200 argc = parse_options (argc , argv , NULL , options , builtin_remote_usage ,
12221201 PARSE_OPT_KEEP_ARGV0 );
1223- if (argc < 2 ) {
1224- argc = 2 ;
1225- argv = default_argv ;
1226- }
12271202
1228- remote_group .list = & list ;
1229- for (i = 1 ; i < argc ; i ++ ) {
1230- int groups_found = 0 ;
1231- remote_group .name = argv [i ];
1232- result = git_config (get_remote_group , & groups_found );
1233- if (!groups_found && (i != 1 || strcmp (argv [1 ], "default" ))) {
1234- struct remote * remote ;
1235- if (!remote_is_configured (argv [i ]))
1236- die ("No such remote or remote group: %s" ,
1237- argv [i ]);
1238- remote = remote_get (argv [i ]);
1239- string_list_append (remote -> name , remote_group .list );
1240- }
1241- }
1203+ fetch_argv [fetch_argc ++ ] = "fetch" ;
12421204
1243- if (!result && !list .nr && argc == 2 && !strcmp (argv [1 ], "default" ))
1244- result = for_each_remote (get_one_remote_for_update , & list );
1205+ if (prune )
1206+ fetch_argv [fetch_argc ++ ] = "--prune" ;
1207+ if (verbose )
1208+ fetch_argv [fetch_argc ++ ] = "-v" ;
1209+ if (argc < 2 ) {
1210+ fetch_argv [fetch_argc ++ ] = "default" ;
1211+ } else {
1212+ fetch_argv [fetch_argc ++ ] = "--multiple" ;
1213+ for (i = 1 ; i < argc ; i ++ )
1214+ fetch_argv [fetch_argc ++ ] = argv [i ];
1215+ }
12451216
1246- for (i = 0 ; i < list .nr ; i ++ ) {
1247- int err = fetch_remote (list .items [i ].string );
1248- result |= err ;
1249- if (!err && prune )
1250- result |= prune_remote (list .items [i ].string , 0 );
1217+ if (strcmp (fetch_argv [fetch_argc - 1 ], "default" ) == 0 ) {
1218+ git_config (get_remote_default , & default_defined );
1219+ if (!default_defined )
1220+ fetch_argv [fetch_argc - 1 ] = "--all" ;
12511221 }
12521222
1253- /* all names were strdup()ed or strndup()ed */
1254- list .strdup_strings = 1 ;
1255- string_list_clear (& list , 0 );
1223+ fetch_argv [fetch_argc ] = NULL ;
12561224
1257- return result ;
1225+ return run_command_v_opt ( fetch_argv , RUN_GIT_CMD ) ;
12581226}
12591227
12601228static int get_one_entry (struct remote * remote , void * priv )
0 commit comments