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 ), |