rust/hg-core/src/dirstate/entry.rs
changeset 48345 d5a91701f7dc
parent 48263 83d0bd45b662
child 48392 434de12918fd
equal deleted inserted replaced
48344:b6d8eea9872c 48345:d5a91701f7dc
   578     #[cfg(unix)]
   578     #[cfg(unix)]
   579     pub fn mode_changed(
   579     pub fn mode_changed(
   580         &self,
   580         &self,
   581         filesystem_metadata: &std::fs::Metadata,
   581         filesystem_metadata: &std::fs::Metadata,
   582     ) -> bool {
   582     ) -> bool {
   583         use std::os::unix::fs::MetadataExt;
   583         let dirstate_exec_bit = (self.mode() as u32 & EXEC_BIT_MASK) != 0;
   584         const EXEC_BIT_MASK: u32 = 0o100;
   584         let fs_exec_bit = has_exec_bit(filesystem_metadata);
   585         let dirstate_exec_bit = (self.mode() as u32) & EXEC_BIT_MASK;
       
   586         let fs_exec_bit = filesystem_metadata.mode() & EXEC_BIT_MASK;
       
   587         dirstate_exec_bit != fs_exec_bit
   585         dirstate_exec_bit != fs_exec_bit
   588     }
   586     }
   589 
   587 
   590     /// Returns a `(state, mode, size, mtime)` tuple as for
   588     /// Returns a `(state, mode, size, mtime)` tuple as for
   591     /// `DirstateMapMethods::debug_iter`.
   589     /// `DirstateMapMethods::debug_iter`.
   639             EntryState::Removed => b'r',
   637             EntryState::Removed => b'r',
   640             EntryState::Merged => b'm',
   638             EntryState::Merged => b'm',
   641         }
   639         }
   642     }
   640     }
   643 }
   641 }
       
   642 
       
   643 const EXEC_BIT_MASK: u32 = 0o100;
       
   644 
       
   645 pub fn has_exec_bit(metadata: &std::fs::Metadata) -> bool {
       
   646     // TODO: How to handle executable permissions on Windows?
       
   647     use std::os::unix::fs::MetadataExt;
       
   648     (metadata.mode() & EXEC_BIT_MASK) != 0
       
   649 }