@@ -919,7 +919,7 @@ int refs_delete_ref(struct ref_store *refs, const char *msg,
919919 struct ref_transaction * transaction ;
920920 struct strbuf err = STRBUF_INIT ;
921921
922- transaction = ref_store_transaction_begin (refs , & err );
922+ transaction = ref_store_transaction_begin (refs , 0 , & err );
923923 if (!transaction ||
924924 ref_transaction_delete (transaction , refname , old_oid ,
925925 NULL , flags , msg , & err ) ||
@@ -1117,13 +1117,15 @@ int read_ref_at(struct ref_store *refs, const char *refname,
11171117}
11181118
11191119struct ref_transaction * ref_store_transaction_begin (struct ref_store * refs ,
1120+ unsigned int flags ,
11201121 struct strbuf * err )
11211122{
11221123 struct ref_transaction * tr ;
11231124 assert (err );
11241125
11251126 CALLOC_ARRAY (tr , 1 );
11261127 tr -> ref_store = refs ;
1128+ tr -> flags = flags ;
11271129 return tr ;
11281130}
11291131
@@ -1187,8 +1189,9 @@ struct ref_update *ref_transaction_add_update(
11871189 oidcpy (& update -> new_oid , new_oid );
11881190 if ((flags & REF_HAVE_OLD ) && old_oid )
11891191 oidcpy (& update -> old_oid , old_oid );
1192+ if (!(flags & REF_SKIP_CREATE_REFLOG ))
1193+ update -> msg = normalize_reflog_message (msg );
11901194
1191- update -> msg = normalize_reflog_message (msg );
11921195 return update ;
11931196}
11941197
@@ -1310,7 +1313,7 @@ int refs_update_ref(struct ref_store *refs, const char *msg,
13101313 struct strbuf err = STRBUF_INIT ;
13111314 int ret = 0 ;
13121315
1313- t = ref_store_transaction_begin (refs , & err );
1316+ t = ref_store_transaction_begin (refs , 0 , & err );
13141317 if (!t ||
13151318 ref_transaction_update (t , refname , new_oid , old_oid , NULL , NULL ,
13161319 flags , msg , & err ) ||
@@ -2128,7 +2131,7 @@ int refs_update_symref_extended(struct ref_store *refs, const char *ref,
21282131 struct strbuf err = STRBUF_INIT ;
21292132 int ret = 0 , prepret = 0 ;
21302133
2131- transaction = ref_store_transaction_begin (refs , & err );
2134+ transaction = ref_store_transaction_begin (refs , 0 , & err );
21322135 if (!transaction ) {
21332136 error_return :
21342137 ret = error ("%s" , err .buf );
@@ -2342,7 +2345,7 @@ int ref_transaction_commit(struct ref_transaction *transaction,
23422345 }
23432346
23442347 ret = refs -> be -> transaction_finish (refs , transaction , err );
2345- if (!ret )
2348+ if (!ret && !( transaction -> flags & REF_TRANSACTION_FLAG_INITIAL ) )
23462349 run_transaction_hook (transaction , "committed" );
23472350 return ret ;
23482351}
@@ -2351,6 +2354,7 @@ int refs_verify_refname_available(struct ref_store *refs,
23512354 const char * refname ,
23522355 const struct string_list * extras ,
23532356 const struct string_list * skip ,
2357+ int initial_transaction ,
23542358 struct strbuf * err )
23552359{
23562360 const char * slash ;
@@ -2359,8 +2363,6 @@ int refs_verify_refname_available(struct ref_store *refs,
23592363 struct strbuf referent = STRBUF_INIT ;
23602364 struct object_id oid ;
23612365 unsigned int type ;
2362- struct ref_iterator * iter ;
2363- int ok ;
23642366 int ret = -1 ;
23652367
23662368 /*
@@ -2390,7 +2392,8 @@ int refs_verify_refname_available(struct ref_store *refs,
23902392 if (skip && string_list_has_string (skip , dirname .buf ))
23912393 continue ;
23922394
2393- if (!refs_read_raw_ref (refs , dirname .buf , & oid , & referent ,
2395+ if (!initial_transaction &&
2396+ !refs_read_raw_ref (refs , dirname .buf , & oid , & referent ,
23942397 & type , & ignore_errno )) {
23952398 strbuf_addf (err , _ ("'%s' exists; cannot create '%s'" ),
23962399 dirname .buf , refname );
@@ -2415,21 +2418,26 @@ int refs_verify_refname_available(struct ref_store *refs,
24152418 strbuf_addstr (& dirname , refname + dirname .len );
24162419 strbuf_addch (& dirname , '/' );
24172420
2418- iter = refs_ref_iterator_begin (refs , dirname .buf , NULL , 0 ,
2419- DO_FOR_EACH_INCLUDE_BROKEN );
2420- while ((ok = ref_iterator_advance (iter )) == ITER_OK ) {
2421- if (skip &&
2422- string_list_has_string (skip , iter -> refname ))
2423- continue ;
2421+ if (!initial_transaction ) {
2422+ struct ref_iterator * iter ;
2423+ int ok ;
24242424
2425- strbuf_addf (err , _ ("'%s' exists; cannot create '%s'" ),
2426- iter -> refname , refname );
2427- ref_iterator_abort (iter );
2428- goto cleanup ;
2429- }
2425+ iter = refs_ref_iterator_begin (refs , dirname .buf , NULL , 0 ,
2426+ DO_FOR_EACH_INCLUDE_BROKEN );
2427+ while ((ok = ref_iterator_advance (iter )) == ITER_OK ) {
2428+ if (skip &&
2429+ string_list_has_string (skip , iter -> refname ))
2430+ continue ;
24302431
2431- if (ok != ITER_DONE )
2432- BUG ("error while iterating over references" );
2432+ strbuf_addf (err , _ ("'%s' exists; cannot create '%s'" ),
2433+ iter -> refname , refname );
2434+ ref_iterator_abort (iter );
2435+ goto cleanup ;
2436+ }
2437+
2438+ if (ok != ITER_DONE )
2439+ BUG ("error while iterating over references" );
2440+ }
24332441
24342442 extra_refname = find_descendant_ref (dirname .buf , extras , skip );
24352443 if (extra_refname )
@@ -2513,14 +2521,6 @@ int refs_reflog_expire(struct ref_store *refs,
25132521 cleanup_fn , policy_cb_data );
25142522}
25152523
2516- int initial_ref_transaction_commit (struct ref_transaction * transaction ,
2517- struct strbuf * err )
2518- {
2519- struct ref_store * refs = transaction -> ref_store ;
2520-
2521- return refs -> be -> initial_transaction_commit (refs , transaction , err );
2522- }
2523-
25242524void ref_transaction_for_each_queued_update (struct ref_transaction * transaction ,
25252525 ref_transaction_for_each_queued_update_fn cb ,
25262526 void * cb_data )
@@ -2556,7 +2556,7 @@ int refs_delete_refs(struct ref_store *refs, const char *logmsg,
25562556 * individual updates can't fail, so we can pack all of the
25572557 * updates into a single transaction.
25582558 */
2559- transaction = ref_store_transaction_begin (refs , & err );
2559+ transaction = ref_store_transaction_begin (refs , 0 , & err );
25602560 if (!transaction ) {
25612561 ret = error ("%s" , err .buf );
25622562 goto out ;
@@ -2862,7 +2862,8 @@ int repo_migrate_ref_storage_format(struct repository *repo,
28622862 if (ret < 0 )
28632863 goto done ;
28642864
2865- transaction = ref_store_transaction_begin (new_refs , errbuf );
2865+ transaction = ref_store_transaction_begin (new_refs , REF_TRANSACTION_FLAG_INITIAL ,
2866+ errbuf );
28662867 if (!transaction )
28672868 goto done ;
28682869
@@ -2887,13 +2888,6 @@ int repo_migrate_ref_storage_format(struct repository *repo,
28872888 if (ret < 0 )
28882889 goto done ;
28892890
2890- /*
2891- * TODO: we might want to migrate to `initial_ref_transaction_commit()`
2892- * here, which is more efficient for the files backend because it would
2893- * write new refs into the packed-refs file directly. At this point,
2894- * the files backend doesn't handle pseudo-refs and symrefs correctly
2895- * though, so this requires some more work.
2896- */
28972891 ret = ref_transaction_commit (transaction , errbuf );
28982892 if (ret < 0 )
28992893 goto done ;
0 commit comments