@@ -2290,6 +2290,34 @@ int read_ref_at(const char *refname, unsigned long at_time, int cnt,
2290
2290
return 1 ;
2291
2291
}
2292
2292
2293
+ static int show_one_reflog_ent (struct strbuf * sb , each_reflog_ent_fn fn , void * cb_data )
2294
+ {
2295
+ unsigned char osha1 [20 ], nsha1 [20 ];
2296
+ char * email_end , * message ;
2297
+ unsigned long timestamp ;
2298
+ int tz ;
2299
+
2300
+ /* old SP new SP name <email> SP time TAB msg LF */
2301
+ if (sb -> len < 83 || sb -> buf [sb -> len - 1 ] != '\n' ||
2302
+ get_sha1_hex (sb -> buf , osha1 ) || sb -> buf [40 ] != ' ' ||
2303
+ get_sha1_hex (sb -> buf + 41 , nsha1 ) || sb -> buf [81 ] != ' ' ||
2304
+ !(email_end = strchr (sb -> buf + 82 , '>' )) ||
2305
+ email_end [1 ] != ' ' ||
2306
+ !(timestamp = strtoul (email_end + 2 , & message , 10 )) ||
2307
+ !message || message [0 ] != ' ' ||
2308
+ (message [1 ] != '+' && message [1 ] != '-' ) ||
2309
+ !isdigit (message [2 ]) || !isdigit (message [3 ]) ||
2310
+ !isdigit (message [4 ]) || !isdigit (message [5 ]))
2311
+ return 0 ; /* corrupt? */
2312
+ email_end [1 ] = '\0' ;
2313
+ tz = strtol (message + 1 , NULL , 10 );
2314
+ if (message [6 ] != '\t' )
2315
+ message += 6 ;
2316
+ else
2317
+ message += 7 ;
2318
+ return fn (osha1 , nsha1 , sb -> buf + 82 , timestamp , tz , message , cb_data );
2319
+ }
2320
+
2293
2321
int for_each_recent_reflog_ent (const char * refname , each_reflog_ent_fn fn , long ofs , void * cb_data )
2294
2322
{
2295
2323
const char * logfile ;
@@ -2314,35 +2342,8 @@ int for_each_recent_reflog_ent(const char *refname, each_reflog_ent_fn fn, long
2314
2342
}
2315
2343
}
2316
2344
2317
- while (!strbuf_getwholeline (& sb , logfp , '\n' )) {
2318
- unsigned char osha1 [20 ], nsha1 [20 ];
2319
- char * email_end , * message ;
2320
- unsigned long timestamp ;
2321
- int tz ;
2322
-
2323
- /* old SP new SP name <email> SP time TAB msg LF */
2324
- if (sb .len < 83 || sb .buf [sb .len - 1 ] != '\n' ||
2325
- get_sha1_hex (sb .buf , osha1 ) || sb .buf [40 ] != ' ' ||
2326
- get_sha1_hex (sb .buf + 41 , nsha1 ) || sb .buf [81 ] != ' ' ||
2327
- !(email_end = strchr (sb .buf + 82 , '>' )) ||
2328
- email_end [1 ] != ' ' ||
2329
- !(timestamp = strtoul (email_end + 2 , & message , 10 )) ||
2330
- !message || message [0 ] != ' ' ||
2331
- (message [1 ] != '+' && message [1 ] != '-' ) ||
2332
- !isdigit (message [2 ]) || !isdigit (message [3 ]) ||
2333
- !isdigit (message [4 ]) || !isdigit (message [5 ]))
2334
- continue ; /* corrupt? */
2335
- email_end [1 ] = '\0' ;
2336
- tz = strtol (message + 1 , NULL , 10 );
2337
- if (message [6 ] != '\t' )
2338
- message += 6 ;
2339
- else
2340
- message += 7 ;
2341
- ret = fn (osha1 , nsha1 , sb .buf + 82 , timestamp , tz , message ,
2342
- cb_data );
2343
- if (ret )
2344
- break ;
2345
- }
2345
+ while (!ret && !strbuf_getwholeline (& sb , logfp , '\n' ))
2346
+ ret = show_one_reflog_ent (& sb , fn , cb_data );
2346
2347
fclose (logfp );
2347
2348
strbuf_release (& sb );
2348
2349
return ret ;
0 commit comments