@@ -1276,146 +1276,152 @@ int transport_push(struct repository *r,
1276
1276
struct refspec * rs , int flags ,
1277
1277
unsigned int * reject_reasons )
1278
1278
{
1279
+ struct ref * remote_refs = NULL ;
1280
+ struct ref * local_refs = NULL ;
1281
+ int match_flags = MATCH_REFS_NONE ;
1282
+ int verbose = (transport -> verbose > 0 );
1283
+ int quiet = (transport -> verbose < 0 );
1284
+ int porcelain = flags & TRANSPORT_PUSH_PORCELAIN ;
1285
+ int pretend = flags & TRANSPORT_PUSH_DRY_RUN ;
1286
+ int push_ret , err ;
1287
+ int ret = -1 ;
1288
+ struct transport_ls_refs_options transport_options =
1289
+ TRANSPORT_LS_REFS_OPTIONS_INIT ;
1290
+
1279
1291
* reject_reasons = 0 ;
1280
1292
1281
1293
if (transport_color_config () < 0 )
1282
- return -1 ;
1283
-
1284
- if (transport -> vtable -> push_refs ) {
1285
- struct ref * remote_refs ;
1286
- struct ref * local_refs = get_local_heads ();
1287
- int match_flags = MATCH_REFS_NONE ;
1288
- int verbose = (transport -> verbose > 0 );
1289
- int quiet = (transport -> verbose < 0 );
1290
- int porcelain = flags & TRANSPORT_PUSH_PORCELAIN ;
1291
- int pretend = flags & TRANSPORT_PUSH_DRY_RUN ;
1292
- int push_ret , ret , err ;
1293
- struct transport_ls_refs_options transport_options =
1294
- TRANSPORT_LS_REFS_OPTIONS_INIT ;
1295
-
1296
- if (check_push_refs (local_refs , rs ) < 0 )
1297
- return -1 ;
1298
-
1299
- refspec_ref_prefixes (rs , & transport_options .ref_prefixes );
1300
-
1301
- trace2_region_enter ("transport_push" , "get_refs_list" , r );
1302
- remote_refs = transport -> vtable -> get_refs_list (transport , 1 ,
1303
- & transport_options );
1304
- trace2_region_leave ("transport_push" , "get_refs_list" , r );
1305
-
1306
- transport_ls_refs_options_release (& transport_options );
1307
-
1308
- if (flags & TRANSPORT_PUSH_ALL )
1309
- match_flags |= MATCH_REFS_ALL ;
1310
- if (flags & TRANSPORT_PUSH_MIRROR )
1311
- match_flags |= MATCH_REFS_MIRROR ;
1312
- if (flags & TRANSPORT_PUSH_PRUNE )
1313
- match_flags |= MATCH_REFS_PRUNE ;
1314
- if (flags & TRANSPORT_PUSH_FOLLOW_TAGS )
1315
- match_flags |= MATCH_REFS_FOLLOW_TAGS ;
1316
-
1317
- if (match_push_refs (local_refs , & remote_refs , rs , match_flags ))
1318
- return -1 ;
1319
-
1320
- if (transport -> smart_options &&
1321
- transport -> smart_options -> cas &&
1322
- !is_empty_cas (transport -> smart_options -> cas ))
1323
- apply_push_cas (transport -> smart_options -> cas ,
1324
- transport -> remote , remote_refs );
1325
-
1326
- set_ref_status_for_push (remote_refs ,
1327
- flags & TRANSPORT_PUSH_MIRROR ,
1328
- flags & TRANSPORT_PUSH_FORCE );
1329
-
1330
- if (!(flags & TRANSPORT_PUSH_NO_HOOK ))
1331
- if (run_pre_push_hook (transport , remote_refs ))
1332
- return -1 ;
1333
-
1334
- if ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND |
1335
- TRANSPORT_RECURSE_SUBMODULES_ONLY )) &&
1336
- !is_bare_repository ()) {
1337
- struct ref * ref = remote_refs ;
1338
- struct oid_array commits = OID_ARRAY_INIT ;
1339
-
1340
- trace2_region_enter ("transport_push" , "push_submodules" , r );
1341
- for (; ref ; ref = ref -> next )
1342
- if (!is_null_oid (& ref -> new_oid ))
1343
- oid_array_append (& commits ,
1344
- & ref -> new_oid );
1345
-
1346
- if (!push_unpushed_submodules (r ,
1347
- & commits ,
1348
- transport -> remote ,
1349
- rs ,
1350
- transport -> push_options ,
1351
- pretend )) {
1352
- oid_array_clear (& commits );
1353
- trace2_region_leave ("transport_push" , "push_submodules" , r );
1354
- die (_ ("failed to push all needed submodules" ));
1355
- }
1294
+ goto done ;
1295
+
1296
+ if (!transport -> vtable -> push_refs )
1297
+ goto done ;
1298
+
1299
+ local_refs = get_local_heads ();
1300
+
1301
+ if (check_push_refs (local_refs , rs ) < 0 )
1302
+ goto done ;
1303
+
1304
+ refspec_ref_prefixes (rs , & transport_options .ref_prefixes );
1305
+
1306
+ trace2_region_enter ("transport_push" , "get_refs_list" , r );
1307
+ remote_refs = transport -> vtable -> get_refs_list (transport , 1 ,
1308
+ & transport_options );
1309
+ trace2_region_leave ("transport_push" , "get_refs_list" , r );
1310
+
1311
+ transport_ls_refs_options_release (& transport_options );
1312
+
1313
+ if (flags & TRANSPORT_PUSH_ALL )
1314
+ match_flags |= MATCH_REFS_ALL ;
1315
+ if (flags & TRANSPORT_PUSH_MIRROR )
1316
+ match_flags |= MATCH_REFS_MIRROR ;
1317
+ if (flags & TRANSPORT_PUSH_PRUNE )
1318
+ match_flags |= MATCH_REFS_PRUNE ;
1319
+ if (flags & TRANSPORT_PUSH_FOLLOW_TAGS )
1320
+ match_flags |= MATCH_REFS_FOLLOW_TAGS ;
1321
+
1322
+ if (match_push_refs (local_refs , & remote_refs , rs , match_flags ))
1323
+ goto done ;
1324
+
1325
+ if (transport -> smart_options &&
1326
+ transport -> smart_options -> cas &&
1327
+ !is_empty_cas (transport -> smart_options -> cas ))
1328
+ apply_push_cas (transport -> smart_options -> cas ,
1329
+ transport -> remote , remote_refs );
1330
+
1331
+ set_ref_status_for_push (remote_refs ,
1332
+ flags & TRANSPORT_PUSH_MIRROR ,
1333
+ flags & TRANSPORT_PUSH_FORCE );
1334
+
1335
+ if (!(flags & TRANSPORT_PUSH_NO_HOOK ))
1336
+ if (run_pre_push_hook (transport , remote_refs ))
1337
+ goto done ;
1338
+
1339
+ if ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND |
1340
+ TRANSPORT_RECURSE_SUBMODULES_ONLY )) &&
1341
+ !is_bare_repository ()) {
1342
+ struct ref * ref = remote_refs ;
1343
+ struct oid_array commits = OID_ARRAY_INIT ;
1344
+
1345
+ trace2_region_enter ("transport_push" , "push_submodules" , r );
1346
+ for (; ref ; ref = ref -> next )
1347
+ if (!is_null_oid (& ref -> new_oid ))
1348
+ oid_array_append (& commits ,
1349
+ & ref -> new_oid );
1350
+
1351
+ if (!push_unpushed_submodules (r ,
1352
+ & commits ,
1353
+ transport -> remote ,
1354
+ rs ,
1355
+ transport -> push_options ,
1356
+ pretend )) {
1356
1357
oid_array_clear (& commits );
1357
1358
trace2_region_leave ("transport_push" , "push_submodules" , r );
1359
+ die (_ ("failed to push all needed submodules" ));
1358
1360
}
1361
+ oid_array_clear (& commits );
1362
+ trace2_region_leave ("transport_push" , "push_submodules" , r );
1363
+ }
1359
1364
1360
- if (((flags & TRANSPORT_RECURSE_SUBMODULES_CHECK ) ||
1361
- ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND |
1362
- TRANSPORT_RECURSE_SUBMODULES_ONLY )) &&
1363
- !pretend )) && !is_bare_repository ()) {
1364
- struct ref * ref = remote_refs ;
1365
- struct string_list needs_pushing = STRING_LIST_INIT_DUP ;
1366
- struct oid_array commits = OID_ARRAY_INIT ;
1367
-
1368
- trace2_region_enter ("transport_push" , "check_submodules" , r );
1369
- for (; ref ; ref = ref -> next )
1370
- if (!is_null_oid (& ref -> new_oid ))
1371
- oid_array_append (& commits ,
1372
- & ref -> new_oid );
1373
-
1374
- if (find_unpushed_submodules (r ,
1375
- & commits ,
1376
- transport -> remote -> name ,
1377
- & needs_pushing )) {
1378
- oid_array_clear (& commits );
1379
- trace2_region_leave ("transport_push" , "check_submodules" , r );
1380
- die_with_unpushed_submodules (& needs_pushing );
1381
- }
1382
- string_list_clear (& needs_pushing , 0 );
1365
+ if (((flags & TRANSPORT_RECURSE_SUBMODULES_CHECK ) ||
1366
+ ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND |
1367
+ TRANSPORT_RECURSE_SUBMODULES_ONLY )) &&
1368
+ !pretend )) && !is_bare_repository ()) {
1369
+ struct ref * ref = remote_refs ;
1370
+ struct string_list needs_pushing = STRING_LIST_INIT_DUP ;
1371
+ struct oid_array commits = OID_ARRAY_INIT ;
1372
+
1373
+ trace2_region_enter ("transport_push" , "check_submodules" , r );
1374
+ for (; ref ; ref = ref -> next )
1375
+ if (!is_null_oid (& ref -> new_oid ))
1376
+ oid_array_append (& commits ,
1377
+ & ref -> new_oid );
1378
+
1379
+ if (find_unpushed_submodules (r ,
1380
+ & commits ,
1381
+ transport -> remote -> name ,
1382
+ & needs_pushing )) {
1383
1383
oid_array_clear (& commits );
1384
1384
trace2_region_leave ("transport_push" , "check_submodules" , r );
1385
+ die_with_unpushed_submodules (& needs_pushing );
1385
1386
}
1387
+ string_list_clear (& needs_pushing , 0 );
1388
+ oid_array_clear (& commits );
1389
+ trace2_region_leave ("transport_push" , "check_submodules" , r );
1390
+ }
1386
1391
1387
- if (!(flags & TRANSPORT_RECURSE_SUBMODULES_ONLY )) {
1388
- trace2_region_enter ("transport_push" , "push_refs" , r );
1389
- push_ret = transport -> vtable -> push_refs (transport , remote_refs , flags );
1390
- trace2_region_leave ("transport_push" , "push_refs" , r );
1391
- } else
1392
- push_ret = 0 ;
1393
- err = push_had_errors (remote_refs );
1394
- ret = push_ret | err ;
1395
-
1396
- if (!quiet || err )
1397
- transport_print_push_status (transport -> url , remote_refs ,
1398
- verbose | porcelain , porcelain ,
1399
- reject_reasons );
1400
-
1401
- if (flags & TRANSPORT_PUSH_SET_UPSTREAM )
1402
- set_upstreams (transport , remote_refs , pretend );
1403
-
1404
- if (!(flags & (TRANSPORT_PUSH_DRY_RUN |
1405
- TRANSPORT_RECURSE_SUBMODULES_ONLY ))) {
1406
- struct ref * ref ;
1407
- for (ref = remote_refs ; ref ; ref = ref -> next )
1408
- transport_update_tracking_ref (transport -> remote , ref , verbose );
1409
- }
1392
+ if (!(flags & TRANSPORT_RECURSE_SUBMODULES_ONLY )) {
1393
+ trace2_region_enter ("transport_push" , "push_refs" , r );
1394
+ push_ret = transport -> vtable -> push_refs (transport , remote_refs , flags );
1395
+ trace2_region_leave ("transport_push" , "push_refs" , r );
1396
+ } else
1397
+ push_ret = 0 ;
1398
+ err = push_had_errors (remote_refs );
1399
+ ret = push_ret | err ;
1400
+
1401
+ if (!quiet || err )
1402
+ transport_print_push_status (transport -> url , remote_refs ,
1403
+ verbose | porcelain , porcelain ,
1404
+ reject_reasons );
1405
+
1406
+ if (flags & TRANSPORT_PUSH_SET_UPSTREAM )
1407
+ set_upstreams (transport , remote_refs , pretend );
1408
+
1409
+ if (!(flags & (TRANSPORT_PUSH_DRY_RUN |
1410
+ TRANSPORT_RECURSE_SUBMODULES_ONLY ))) {
1411
+ struct ref * ref ;
1412
+ for (ref = remote_refs ; ref ; ref = ref -> next )
1413
+ transport_update_tracking_ref (transport -> remote , ref , verbose );
1414
+ }
1410
1415
1411
- if (porcelain && !push_ret )
1412
- puts ("Done" );
1413
- else if (!quiet && !ret && !transport_refs_pushed (remote_refs ))
1414
- fprintf (stderr , "Everything up-to-date\n" );
1416
+ if (porcelain && !push_ret )
1417
+ puts ("Done" );
1418
+ else if (!quiet && !ret && !transport_refs_pushed (remote_refs ))
1419
+ fprintf (stderr , "Everything up-to-date\n" );
1415
1420
1416
- return ret ;
1417
- }
1418
- return 1 ;
1421
+ done :
1422
+ free_refs (local_refs );
1423
+ free_refs (remote_refs );
1424
+ return ret ;
1419
1425
}
1420
1426
1421
1427
const struct ref * transport_get_remote_refs (struct transport * transport ,
0 commit comments