rust/hg-core/src/dirstate_tree/on_disk.rs
changeset 48501 4afb9627dc77
parent 48421 2097f63575a5
child 48525 d6c53b40b078
equal deleted inserted replaced
48500:c5d6c874766a 48501:4afb9627dc77
   380         // unset.
   380         // unset.
   381         if self.flags().contains(Flags::DIRECTORY)
   381         if self.flags().contains(Flags::DIRECTORY)
   382             && self.flags().contains(Flags::HAS_MTIME)
   382             && self.flags().contains(Flags::HAS_MTIME)
   383             && self.flags().contains(Flags::ALL_UNKNOWN_RECORDED)
   383             && self.flags().contains(Flags::ALL_UNKNOWN_RECORDED)
   384         {
   384         {
   385             Ok(Some(self.mtime.try_into()?))
   385             Ok(Some(self.mtime()?))
   386         } else {
   386         } else {
   387             Ok(None)
   387             Ok(None)
   388         }
   388         }
   389     }
   389     }
   390 
   390 
   398             0o755
   398             0o755
   399         } else {
   399         } else {
   400             0o644
   400             0o644
   401         };
   401         };
   402         file_type | permisions
   402         file_type | permisions
       
   403     }
       
   404 
       
   405     fn mtime(&self) -> Result<TruncatedTimestamp, DirstateV2ParseError> {
       
   406         let mut m: TruncatedTimestamp = self.mtime.try_into()?;
       
   407         if self.flags().contains(Flags::MTIME_SECOND_AMBIGUOUS) {
       
   408             m.second_ambiguous = true;
       
   409         }
       
   410         Ok(m)
   403     }
   411     }
   404 
   412 
   405     fn assume_entry(&self) -> Result<DirstateEntry, DirstateV2ParseError> {
   413     fn assume_entry(&self) -> Result<DirstateEntry, DirstateV2ParseError> {
   406         // TODO: convert through raw bits instead?
   414         // TODO: convert through raw bits instead?
   407         let wdir_tracked = self.flags().contains(Flags::WDIR_TRACKED);
   415         let wdir_tracked = self.flags().contains(Flags::WDIR_TRACKED);
   416         };
   424         };
   417         let mtime = if self.flags().contains(Flags::HAS_MTIME)
   425         let mtime = if self.flags().contains(Flags::HAS_MTIME)
   418             && !self.flags().contains(Flags::DIRECTORY)
   426             && !self.flags().contains(Flags::DIRECTORY)
   419             && !self.flags().contains(Flags::EXPECTED_STATE_IS_MODIFIED)
   427             && !self.flags().contains(Flags::EXPECTED_STATE_IS_MODIFIED)
   420         {
   428         {
   421             let mut m: TruncatedTimestamp = self.mtime.try_into()?;
   429             Some(self.mtime()?)
   422             if self.flags().contains(Flags::MTIME_SECOND_AMBIGUOUS) {
       
   423                 m.second_ambiguous = true;
       
   424             }
       
   425             Some(m)
       
   426         } else {
   430         } else {
   427             None
   431             None
   428         };
   432         };
   429         let fallback_exec = if self.flags().contains(Flags::HAS_FALLBACK_EXEC)
   433         let fallback_exec = if self.flags().contains(Flags::HAS_FALLBACK_EXEC)
   430         {
   434         {
   679                 NodeRef::InMemory(path, node) => {
   683                 NodeRef::InMemory(path, node) => {
   680                     let (flags, size, mtime) = match &node.data {
   684                     let (flags, size, mtime) = match &node.data {
   681                         dirstate_map::NodeData::Entry(entry) => {
   685                         dirstate_map::NodeData::Entry(entry) => {
   682                             Node::from_dirstate_entry(entry)
   686                             Node::from_dirstate_entry(entry)
   683                         }
   687                         }
   684                         dirstate_map::NodeData::CachedDirectory { mtime } => (
   688                         dirstate_map::NodeData::CachedDirectory { mtime } => {
   685                             // we currently never set a mtime if unknown file
   689                             // we currently never set a mtime if unknown file
   686                             // are present.
   690                             // are present.
   687                             // So if we have a mtime for a directory, we know
   691                             // So if we have a mtime for a directory, we know
   688                             // they are no unknown
   692                             // they are no unknown
   689                             // files and we
   693                             // files and we
   690                             // blindly set ALL_UNKNOWN_RECORDED.
   694                             // blindly set ALL_UNKNOWN_RECORDED.
   691                             //
   695                             //
   692                             // We never set ALL_IGNORED_RECORDED since we
   696                             // We never set ALL_IGNORED_RECORDED since we
   693                             // don't track that case
   697                             // don't track that case
   694                             // currently.
   698                             // currently.
   695                             Flags::DIRECTORY
   699                             let mut flags = Flags::DIRECTORY
   696                                 | Flags::HAS_MTIME
   700                                 | Flags::HAS_MTIME
   697                                 | Flags::ALL_UNKNOWN_RECORDED,
   701                                 | Flags::ALL_UNKNOWN_RECORDED;
   698                             0.into(),
   702                             if mtime.second_ambiguous {
   699                             (*mtime).into(),
   703                                 flags.insert(Flags::MTIME_SECOND_AMBIGUOUS)
   700                         ),
   704                             }
       
   705                             (flags, 0.into(), (*mtime).into())
       
   706                         }
   701                         dirstate_map::NodeData::None => (
   707                         dirstate_map::NodeData::None => (
   702                             Flags::DIRECTORY,
   708                             Flags::DIRECTORY,
   703                             0.into(),
   709                             0.into(),
   704                             PackedTruncatedTimestamp::null(),
   710                             PackedTruncatedTimestamp::null(),
   705                         ),
   711                         ),