@@ -188,6 +188,7 @@ mod util {
188
188
use super :: Error ;
189
189
use crate :: bstr:: BStr ;
190
190
use crate :: Repository ;
191
+ use git_odb:: Find ;
191
192
use git_ref:: transaction:: { LogChange , RefLog } ;
192
193
193
194
pub fn write_remote_to_local_config_file (
@@ -259,26 +260,43 @@ mod util {
259
260
head_ref_name : referent. to_owned ( ) ,
260
261
source : err,
261
262
} ) ?;
262
- repo. edit_references ( [
263
- RefEdit {
264
- change : git_ref:: transaction:: Change :: Update {
265
- log : reflog_message ( ) ,
266
- expected : PreviousValue :: Any ,
267
- new : Target :: Peeled ( head_peeled_id. to_owned ( ) ) ,
268
- } ,
269
- name : referent. clone ( ) ,
270
- deref : false ,
271
- } ,
272
- RefEdit {
273
- change : git_ref:: transaction:: Change :: Update {
274
- log : reflog_message ( ) ,
275
- expected : PreviousValue :: Any ,
276
- new : Target :: Symbolic ( referent) ,
277
- } ,
278
- name : name. clone ( ) ,
279
- deref : false ,
280
- } ,
281
- ] ) ?;
263
+ repo. refs
264
+ . transaction ( )
265
+ . packed_refs ( git_ref:: file:: transaction:: PackedRefs :: DeletionsAndNonSymbolicUpdates (
266
+ Box :: new ( |oid, buf| {
267
+ repo. objects
268
+ . try_find ( oid, buf)
269
+ . map ( |obj| obj. map ( |obj| obj. kind ) )
270
+ . map_err ( |err| Box :: new ( err) as Box < dyn std:: error:: Error + Send + Sync + ' static > )
271
+ } ) ,
272
+ ) )
273
+ . prepare (
274
+ [
275
+ RefEdit {
276
+ change : git_ref:: transaction:: Change :: Update {
277
+ log : reflog_message ( ) ,
278
+ expected : PreviousValue :: Any ,
279
+ new : Target :: Peeled ( head_peeled_id. to_owned ( ) ) ,
280
+ } ,
281
+ name : referent. clone ( ) ,
282
+ deref : false ,
283
+ } ,
284
+ RefEdit {
285
+ change : git_ref:: transaction:: Change :: Update {
286
+ log : reflog_message ( ) ,
287
+ expected : PreviousValue :: Any ,
288
+ new : Target :: Symbolic ( referent) ,
289
+ } ,
290
+ name : name. clone ( ) ,
291
+ deref : false ,
292
+ } ,
293
+ ] ,
294
+ git_lock:: acquire:: Fail :: Immediately ,
295
+ git_lock:: acquire:: Fail :: Immediately ,
296
+ )
297
+ . map_err ( crate :: reference:: edit:: Error :: from) ?
298
+ . commit ( repo. committer_or_default ( ) )
299
+ . map_err ( crate :: reference:: edit:: Error :: from) ?;
282
300
let mut log = reflog_message ( ) ;
283
301
log. mode = RefLog :: Only ;
284
302
repo. edit_reference ( RefEdit {
0 commit comments