equal
deleted
inserted
replaced
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 } |