@@ -19,7 +19,9 @@ use fn_error_context::context;
19
19
use crate :: commands:: gc:: mark_commit_reachable;
20
20
use crate :: commands:: restack:: find_abandoned_children;
21
21
use crate :: core:: config:: { get_restack_warn_abandoned, RESTACK_WARN_ABANDONED_CONFIG_KEY } ;
22
- use crate :: core:: eventlog:: { should_ignore_ref_updates, Event , EventLogDb , EventReplayer } ;
22
+ use crate :: core:: eventlog:: {
23
+ should_ignore_ref_updates, Event , EventLogDb , EventReplayer , EventTransactionId ,
24
+ } ;
23
25
use crate :: core:: formatting:: Pluralize ;
24
26
use crate :: core:: graph:: { make_graph, BranchOids , HeadOid , MainBranchOid } ;
25
27
use crate :: core:: mergebase:: MergeBaseDb ;
@@ -63,6 +65,11 @@ pub fn hook_post_rewrite(out: &mut impl Write, rewrite_type: &str) -> anyhow::Re
63
65
let now = SystemTime :: now ( ) ;
64
66
let timestamp = now. duration_since ( SystemTime :: UNIX_EPOCH ) ?. as_secs_f64 ( ) ;
65
67
68
+ let repo = get_repo ( ) ?;
69
+ let conn = get_db_conn ( & repo) ?;
70
+ let mut event_log_db = EventLogDb :: new ( & conn) ?;
71
+ let event_tx_id = event_log_db. make_transaction_id ( now, "hook-post-rewrite" ) ?;
72
+
66
73
let ( old_commits, events) = {
67
74
let mut old_commits = Vec :: new ( ) ;
68
75
let mut events = Vec :: new ( ) ;
@@ -83,6 +90,7 @@ pub fn hook_post_rewrite(out: &mut impl Write, rewrite_type: &str) -> anyhow::Re
83
90
old_commits. push ( old_commit_oid) ;
84
91
events. push ( Event :: RewriteEvent {
85
92
timestamp,
93
+ event_tx_id,
86
94
old_commit_oid,
87
95
new_commit_oid,
88
96
} )
@@ -93,8 +101,6 @@ pub fn hook_post_rewrite(out: &mut impl Write, rewrite_type: &str) -> anyhow::Re
93
101
( old_commits, events)
94
102
} ;
95
103
96
- let repo = get_repo ( ) ?;
97
-
98
104
let is_spurious_event = rewrite_type == "amend" && is_rebase_underway ( & repo) ?;
99
105
if !is_spurious_event {
100
106
let message_rewritten_commits = Pluralize {
@@ -106,8 +112,6 @@ pub fn hook_post_rewrite(out: &mut impl Write, rewrite_type: &str) -> anyhow::Re
106
112
writeln ! ( out, "branchless: processing {}" , message_rewritten_commits) ?;
107
113
}
108
114
109
- let conn = get_db_conn ( & repo) ?;
110
- let mut event_log_db = EventLogDb :: new ( & conn) ?;
111
115
event_log_db. add_events ( events) ?;
112
116
113
117
let should_check_abandoned_commits = get_restack_warn_abandoned ( & repo) ?;
@@ -237,8 +241,10 @@ pub fn hook_post_checkout(
237
241
let repo = get_repo ( ) ?;
238
242
let conn = get_db_conn ( & repo) ?;
239
243
let mut event_log_db = EventLogDb :: new ( & conn) ?;
244
+ let event_tx_id = event_log_db. make_transaction_id ( now, "hook-post-checkout" ) ?;
240
245
event_log_db. add_events ( vec ! [ Event :: RefUpdateEvent {
241
246
timestamp: timestamp. as_secs_f64( ) ,
247
+ event_tx_id,
242
248
old_ref: Some ( String :: from( previous_head_ref) ) ,
243
249
new_ref: Some ( String :: from( current_head_ref) ) ,
244
250
ref_name: String :: from( "HEAD" ) ,
@@ -253,6 +259,7 @@ pub fn hook_post_checkout(
253
259
pub fn hook_post_commit ( out : & mut impl Write ) -> anyhow:: Result < ( ) > {
254
260
writeln ! ( out, "branchless: processing commit" ) ?;
255
261
262
+ let now = SystemTime :: now ( ) ;
256
263
let repo = get_repo ( ) ?;
257
264
let conn = get_db_conn ( & repo) ?;
258
265
let mut event_log_db = EventLogDb :: new ( & conn) ?;
@@ -266,15 +273,21 @@ pub fn hook_post_commit(out: &mut impl Write) -> anyhow::Result<()> {
266
273
. with_context ( || "Marking commit as reachable for GC purposes" ) ?;
267
274
268
275
let timestamp = commit. time ( ) . seconds ( ) as f64 ;
276
+ let event_tx_id = event_log_db. make_transaction_id ( now, "hook-post-commit" ) ?;
269
277
event_log_db. add_events ( vec ! [ Event :: CommitEvent {
270
278
timestamp,
279
+ event_tx_id,
271
280
commit_oid: commit. id( ) ,
272
281
} ] ) ?;
273
282
274
283
Ok ( ( ) )
275
284
}
276
285
277
- fn parse_reference_transaction_line ( now : SystemTime , line : & str ) -> anyhow:: Result < Option < Event > > {
286
+ fn parse_reference_transaction_line (
287
+ line : & str ,
288
+ now : SystemTime ,
289
+ event_tx_id : EventTransactionId ,
290
+ ) -> anyhow:: Result < Option < Event > > {
278
291
match * line. split ( ' ' ) . collect :: < Vec < _ > > ( ) . as_slice ( ) {
279
292
[ old_value, new_value, ref_name] => {
280
293
if !should_ignore_ref_updates ( ref_name) {
@@ -283,6 +296,7 @@ fn parse_reference_transaction_line(now: SystemTime, line: &str) -> anyhow::Resu
283
296
. with_context ( || "Processing timestamp" ) ?;
284
297
Ok ( Some ( Event :: RefUpdateEvent {
285
298
timestamp : timestamp. as_secs_f64 ( ) ,
299
+ event_tx_id,
286
300
ref_name : String :: from ( ref_name) ,
287
301
old_ref : Some ( String :: from ( old_value) ) ,
288
302
new_ref : Some ( String :: from ( new_value) ) ,
@@ -312,7 +326,12 @@ pub fn hook_reference_transaction(
312
326
if transaction_state != "committed" {
313
327
return Ok ( ( ) ) ;
314
328
}
315
- let timestamp = SystemTime :: now ( ) ;
329
+ let now = SystemTime :: now ( ) ;
330
+
331
+ let repo = get_repo ( ) ?;
332
+ let conn = get_db_conn ( & repo) ?;
333
+ let mut event_log_db = EventLogDb :: new ( & conn) ?;
334
+ let event_tx_id = event_log_db. make_transaction_id ( now, "reference-transaction" ) ?;
316
335
317
336
let events: Vec < Event > = stdin ( )
318
337
. lock ( )
@@ -322,7 +341,7 @@ pub fn hook_reference_transaction(
322
341
Ok ( line) => line,
323
342
Err ( _) => return None ,
324
343
} ;
325
- match parse_reference_transaction_line ( timestamp , & line) {
344
+ match parse_reference_transaction_line ( & line, now , event_tx_id ) {
326
345
Ok ( event) => event,
327
346
Err ( err) => {
328
347
log:: error!( "Could not parse reference-transaction-line: {:?}" , err) ;
@@ -345,10 +364,6 @@ pub fn hook_reference_transaction(
345
364
"branchless: processing {}" ,
346
365
num_reference_updates. to_string( )
347
366
) ?;
348
-
349
- let repo = get_repo ( ) ?;
350
- let conn = get_db_conn ( & repo) ?;
351
- let mut event_log_db = EventLogDb :: new ( & conn) ?;
352
367
event_log_db. add_events ( events) ?;
353
368
354
369
Ok ( ( ) )
@@ -362,12 +377,14 @@ mod tests {
362
377
363
378
#[ test]
364
379
fn test_parse_reference_transaction_line ( ) -> anyhow:: Result < ( ) > {
365
- let timestamp = SystemTime :: UNIX_EPOCH ;
366
380
let line = "123abc 456def mybranch" ;
381
+ let timestamp = SystemTime :: UNIX_EPOCH ;
382
+ let event_tx_id = crate :: core:: eventlog:: testing:: make_dummy_transaction_id ( 789 ) ;
367
383
assert_eq ! (
368
- parse_reference_transaction_line( timestamp, & line ) ?,
384
+ parse_reference_transaction_line( & line , timestamp, event_tx_id ) ?,
369
385
Some ( Event :: RefUpdateEvent {
370
386
timestamp: 0.0 ,
387
+ event_tx_id,
371
388
old_ref: Some ( String :: from( "123abc" ) ) ,
372
389
new_ref: Some ( String :: from( "456def" ) ) ,
373
390
ref_name: String :: from( "mybranch" ) ,
@@ -376,10 +393,13 @@ mod tests {
376
393
) ;
377
394
378
395
let line = "123abc 456def ORIG_HEAD" ;
379
- assert_eq ! ( parse_reference_transaction_line( timestamp, & line) ?, None ) ;
396
+ assert_eq ! (
397
+ parse_reference_transaction_line( & line, timestamp, event_tx_id) ?,
398
+ None
399
+ ) ;
380
400
381
401
let line = "there are not three fields here" ;
382
- assert ! ( parse_reference_transaction_line( timestamp, & line ) . is_err( ) ) ;
402
+ assert ! ( parse_reference_transaction_line( & line , timestamp, event_tx_id ) . is_err( ) ) ;
383
403
384
404
Ok ( ( ) )
385
405
}
0 commit comments