File tree Expand file tree Collapse file tree 2 files changed +37
-2
lines changed 
bootstrap/src/core/build_steps Expand file tree Collapse file tree 2 files changed +37
-2
lines changed Original file line number Diff line number Diff line change @@ -7,7 +7,7 @@ use std::sync::mpsc::SyncSender;
77use  std:: sync:: Mutex ; 
88
99use  build_helper:: ci:: CiEnv ; 
10- use  build_helper:: git:: get_git_modified_files; 
10+ use  build_helper:: git:: { get_git_modified_files,  warn_old_master_branch } ; 
1111use  ignore:: WalkBuilder ; 
1212
1313use  crate :: core:: builder:: Builder ; 
@@ -93,7 +93,8 @@ fn get_modified_rs_files(build: &Builder<'_>) -> Result<Option<Vec<String>>, Str
9393    if  !verify_rustfmt_version ( build)  { 
9494        return  Ok ( None ) ; 
9595    } 
96- 
96+     warn_old_master_branch ( & build. config . git_config ( ) ,  & build. config . src ) 
97+         . map_err ( |e| e. to_string ( ) ) ?; 
9798    get_git_modified_files ( & build. config . git_config ( ) ,  Some ( & build. config . src ) ,  & [ "rs" ] ) 
9899} 
99100
Original file line number Diff line number Diff line change @@ -159,3 +159,37 @@ pub fn get_git_untracked_files(
159159        . collect ( ) ; 
160160    Ok ( Some ( files) ) 
161161} 
162+ 
163+ /// Print a warning if the branch returned from `updated_master_branch` is old 
164+ /// 
165+ /// For certain configurations of git repository, this remote will not be 
166+ /// updated when running `git pull`. 
167+ /// 
168+ /// This can result in formatting thousands of files instead of a dozen, 
169+ /// so we should warn the user something is wrong. 
170+ pub  fn  warn_old_master_branch ( 
171+     config :  & GitConfig < ' _ > , 
172+     git_dir :  & Path , 
173+ )  -> Result < ( ) ,  Box < dyn  std:: error:: Error > >  { 
174+     use  std:: time:: Duration ; 
175+     const  WARN_AFTER :  Duration  = Duration :: from_secs ( 60  *  60  *  24  *  10 ) ; 
176+     let  updated_master = updated_master_branch ( config,  Some ( git_dir) ) ?; 
177+     let  branch_path = git_dir. join ( ".git/refs/remotes" ) . join ( & updated_master) ; 
178+     match  std:: fs:: metadata ( branch_path)  { 
179+         Ok ( meta)  => { 
180+             if  meta. modified ( ) ?. elapsed ( ) ? > WARN_AFTER  { 
181+                 eprintln ! ( "warning: {updated_master} has not been updated in 10 days" ) ; 
182+             }  else  { 
183+                 return  Ok ( ( ) ) ; 
184+             } 
185+         } 
186+         Err ( err)  => { 
187+             eprintln ! ( "warning: unable to check if {updated_master} is old due to error: {err}" ) 
188+         } 
189+     } 
190+     eprintln ! ( 
191+         "warning: {updated_master} is used to determine if files have been modified\n \  
192+                 warning: if it is not updated, this may cause files to be needlessly reformatted"
193+     ) ; 
194+     Ok ( ( ) ) 
195+ } 
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments