@@ -2290,6 +2290,34 @@ int read_ref_at(const char *refname, unsigned long at_time, int cnt,
22902290 return 1 ;
22912291}
22922292
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+
22932321int for_each_recent_reflog_ent (const char * refname , each_reflog_ent_fn fn , long ofs , void * cb_data )
22942322{
22952323 const char * logfile ;
@@ -2314,35 +2342,8 @@ int for_each_recent_reflog_ent(const char *refname, each_reflog_ent_fn fn, long
23142342 }
23152343 }
23162344
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 );
23462347 fclose (logfp );
23472348 strbuf_release (& sb );
23482349 return ret ;
0 commit comments