@@ -2,7 +2,7 @@ use rand::Rng;
22use std:: collections:: HashMap ;
33use std:: fs:: { self , File , OpenOptions } ;
44use std:: io:: Write ;
5- use std:: path:: PathBuf ;
5+ use std:: path:: { Path , PathBuf } ;
66use std:: time:: Duration ;
77use tokio:: process:: Command ;
88use tokio:: time:: sleep;
@@ -16,7 +16,7 @@ use crate::webhook::{self, JobFailure};
1616/// Default jitter ratio when not explicitly configured (25% of base delay)
1717const AUTO_JITTER_RATIO : u32 = 25 ;
1818
19- pub async fn execute_job ( job : & Job , sot_path : & PathBuf , runner : & RunnerConfig ) -> bool {
19+ pub async fn execute_job ( job : & Job , sot_path : & Path , runner : & RunnerConfig ) -> bool {
2020 let job_dir = git:: get_job_dir ( sot_path, & job. id ) ;
2121 let work_dir = resolve_work_dir ( sot_path, & job. id , & job. working_dir ) ;
2222 let mut log_file = job
@@ -28,8 +28,8 @@ pub async fn execute_job(job: &Job, sot_path: &PathBuf, runner: &RunnerConfig) -
2828 let mut last_result: Option < CommandResult > = None ;
2929
3030 for attempt in 0 ..max_attempts {
31- if attempt > 0 {
32- if let Some ( retry) = job. retry . as_ref ( ) {
31+ if attempt > 0
32+ && let Some ( retry) = job. retry . as_ref ( ) {
3333 let delay = calculate_backoff ( retry, attempt - 1 ) ;
3434 info ! (
3535 target: "rollcron::job" ,
@@ -41,7 +41,6 @@ pub async fn execute_job(job: &Job, sot_path: &PathBuf, runner: &RunnerConfig) -
4141 ) ;
4242 sleep ( delay) . await ;
4343 }
44- }
4544
4645 info ! (
4746 target: "rollcron::job" ,
@@ -116,7 +115,7 @@ pub async fn execute_job(job: &Job, sot_path: &PathBuf, runner: &RunnerConfig) -
116115 false
117116}
118117
119- fn resolve_work_dir ( sot_path : & PathBuf , job_id : & str , working_dir : & Option < String > ) -> PathBuf {
118+ fn resolve_work_dir ( sot_path : & Path , job_id : & str , working_dir : & Option < String > ) -> PathBuf {
120119 let job_dir = git:: get_job_dir ( sot_path, job_id) ;
121120 match working_dir {
122121 Some ( dir) => {
@@ -141,8 +140,8 @@ fn resolve_work_dir(sot_path: &PathBuf, job_id: &str, working_dir: &Option<Strin
141140
142141async fn run_command (
143142 job : & Job ,
144- work_dir : & PathBuf ,
145- sot_path : & PathBuf ,
143+ work_dir : & Path ,
144+ sot_path : & Path ,
146145 runner : & RunnerConfig ,
147146) -> CommandResult {
148147 let env_vars = match merge_env_vars ( job, work_dir, sot_path, runner) {
@@ -180,7 +179,7 @@ async fn run_command(
180179/// Load runner-level env vars for webhook URL expansion.
181180/// Returns None on error (webhook will fall back to process env).
182181fn load_runner_env_vars (
183- sot_path : & PathBuf ,
182+ sot_path : & Path ,
184183 runner : & RunnerConfig ,
185184) -> Option < HashMap < String , String > > {
186185 let mut env_vars = HashMap :: new ( ) ;
@@ -210,8 +209,8 @@ fn load_runner_env_vars(
210209
211210fn merge_env_vars (
212211 job : & Job ,
213- work_dir : & PathBuf ,
214- sot_path : & PathBuf ,
212+ work_dir : & Path ,
213+ sot_path : & Path ,
215214 runner : & RunnerConfig ,
216215) -> anyhow:: Result < HashMap < String , String > > {
217216 let mut env_vars = HashMap :: new ( ) ;
@@ -319,26 +318,24 @@ fn generate_jitter(max: Duration) -> Duration {
319318
320319// === Logging ===
321320
322- fn rotate_log_file ( path : & PathBuf , max_size : u64 ) {
323- if let Ok ( meta) = fs:: metadata ( path) {
324- if meta. len ( ) >= max_size {
321+ fn rotate_log_file ( path : & Path , max_size : u64 ) {
322+ if let Ok ( meta) = fs:: metadata ( path)
323+ && meta. len ( ) >= max_size {
325324 let old_path = path. with_extension ( "log.old" ) ;
326325 let _ = fs:: remove_file ( & old_path) ;
327326 let _ = fs:: rename ( path, & old_path) ;
328327 }
329- }
330328}
331329
332- fn create_log_file ( job_dir : & PathBuf , log_path : & str , max_size : u64 ) -> Option < File > {
330+ fn create_log_file ( job_dir : & Path , log_path : & str , max_size : u64 ) -> Option < File > {
333331 let expanded = env:: expand_string ( log_path) ;
334332 let full_path = job_dir. join ( & expanded) ;
335333
336- if let Some ( parent) = full_path. parent ( ) {
337- if let Err ( e) = fs:: create_dir_all ( parent) {
334+ if let Some ( parent) = full_path. parent ( )
335+ && let Err ( e) = fs:: create_dir_all ( parent) {
338336 warn ! ( target: "rollcron::job" , error = %e, "Failed to create log directory" ) ;
339337 return None ;
340338 }
341- }
342339
343340 rotate_log_file ( & full_path, max_size) ;
344341
0 commit comments