@@ -204,29 +204,59 @@ pub fn get_git_untracked_files(
204
204
///
205
205
/// This can result in formatting thousands of files instead of a dozen,
206
206
/// so we should warn the user something is wrong.
207
- pub fn warn_old_master_branch (
208
- config : & GitConfig < ' _ > ,
209
- git_dir : & Path ,
210
- ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
211
- use std:: time:: Duration ;
212
- const WARN_AFTER : Duration = Duration :: from_secs ( 60 * 60 * 24 * 10 ) ;
213
- let updated_master = updated_master_branch ( config, Some ( git_dir) ) ?;
214
- let branch_path = git_dir. join ( ".git/refs/remotes" ) . join ( & updated_master) ;
215
- match std:: fs:: metadata ( branch_path) {
216
- Ok ( meta) => {
217
- if meta. modified ( ) ?. elapsed ( ) ? > WARN_AFTER {
218
- eprintln ! ( "warning: {updated_master} has not been updated in 10 days" ) ;
219
- } else {
220
- return Ok ( ( ) ) ;
207
+ pub fn warn_old_master_branch ( config : & GitConfig < ' _ > , git_dir : & Path ) {
208
+ if crate :: ci:: CiEnv :: is_ci ( ) {
209
+ // this warning is useless in CI,
210
+ // and CI probably won't have the right branches anyway.
211
+ return ;
212
+ }
213
+ // this will be overwritten by the actual name, if possible
214
+ let mut updated_master = "the upstream master branch" . to_string ( ) ;
215
+ match warn_old_master_branch_ ( config, git_dir, & mut updated_master) {
216
+ Ok ( branch_is_old) => {
217
+ if !branch_is_old {
218
+ return ;
221
219
}
220
+ // otherwise fall through and print the rest of the warning
222
221
}
223
222
Err ( err) => {
224
223
eprintln ! ( "warning: unable to check if {updated_master} is old due to error: {err}" )
225
224
}
226
225
}
227
226
eprintln ! (
228
227
"warning: {updated_master} is used to determine if files have been modified\n \
229
- warning: if it is not updated, this may cause files to be needlessly reformatted"
228
+ warning: if it is not updated, this may cause files to be needlessly reformatted"
230
229
) ;
231
- Ok ( ( ) )
230
+ }
231
+
232
+ pub fn warn_old_master_branch_ (
233
+ config : & GitConfig < ' _ > ,
234
+ git_dir : & Path ,
235
+ updated_master : & mut String ,
236
+ ) -> Result < bool , Box < dyn std:: error:: Error > > {
237
+ use std:: time:: Duration ;
238
+ * updated_master = updated_master_branch ( config, Some ( git_dir) ) ?;
239
+ let branch_path = git_dir. join ( ".git/refs/remotes" ) . join ( & updated_master) ;
240
+ const WARN_AFTER : Duration = Duration :: from_secs ( 60 * 60 * 24 * 10 ) ;
241
+ let meta = match std:: fs:: metadata ( & branch_path) {
242
+ Ok ( meta) => meta,
243
+ Err ( err) => {
244
+ let gcd = git_common_dir ( & git_dir) ?;
245
+ if branch_path. starts_with ( & gcd) {
246
+ return Err ( Box :: new ( err) ) ;
247
+ }
248
+ std:: fs:: metadata ( Path :: new ( & gcd) . join ( "refs/remotes" ) . join ( & updated_master) ) ?
249
+ }
250
+ } ;
251
+ if meta. modified ( ) ?. elapsed ( ) ? > WARN_AFTER {
252
+ eprintln ! ( "warning: {updated_master} has not been updated in 10 days" ) ;
253
+ Ok ( true )
254
+ } else {
255
+ Ok ( false )
256
+ }
257
+ }
258
+
259
+ fn git_common_dir ( dir : & Path ) -> Result < String , String > {
260
+ output_result ( Command :: new ( "git" ) . arg ( "-C" ) . arg ( dir) . arg ( "rev-parse" ) . arg ( "--git-common-dir" ) )
261
+ . map ( |x| x. trim ( ) . to_string ( ) )
232
262
}
0 commit comments