rust/hg-core/src/dirstate_tree/dirstate_map.rs
changeset 49132 7276a6007573
parent 49131 fcf6f943a142
child 49133 23a5659125c8
equal deleted inserted replaced
49131:fcf6f943a142 49132:7276a6007573
   731             new = true;
   731             new = true;
   732         };
   732         };
   733         Ok(new)
   733         Ok(new)
   734     }
   734     }
   735 
   735 
   736     /// It is the responsibility of the caller to know that there was an entry
   736     /// Set a node as untracked in the dirstate.
   737     /// there before. Does not handle the removal of copy source
   737     ///
       
   738     /// It is the responsibility of the caller to remove the copy source and/or
       
   739     /// the entry itself if appropriate.
       
   740     ///
       
   741     /// # Panics
       
   742     ///
       
   743     /// Panics if the node does not exist.
   738     fn set_untracked(
   744     fn set_untracked(
   739         &mut self,
   745         &mut self,
   740         filename: &HgPath,
   746         filename: &HgPath,
   741         old_entry: DirstateEntry,
   747         old_entry: DirstateEntry,
   742     ) -> Result<(), DirstateV2ParseError> {
   748     ) -> Result<(), DirstateV2ParseError> {
   743         let node = self.get_or_insert_node(filename, |ancestor| {
   749         let node = DirstateMap::get_node_mut(
   744             ancestor.tracked_descendants_count = ancestor
   750             self.on_disk,
   745                 .tracked_descendants_count
   751             &mut self.unreachable_bytes,
   746                 .checked_sub(1)
   752             &mut self.root,
   747                 .expect("tracked_descendants_count should be >= 0");
   753             filename,
   748         })?;
   754             |ancestor| {
       
   755                 ancestor.tracked_descendants_count = ancestor
       
   756                     .tracked_descendants_count
       
   757                     .checked_sub(1)
       
   758                     .expect("tracked_descendants_count should be >= 0");
       
   759             },
       
   760         )?
       
   761         .expect("node should exist");
   749         let mut new_entry = old_entry.clone();
   762         let mut new_entry = old_entry.clone();
   750         new_entry.set_untracked();
   763         new_entry.set_untracked();
   751         node.data = NodeData::Entry(new_entry);
   764         node.data = NodeData::Entry(new_entry);
   752         Ok(())
   765         Ok(())
   753     }
   766     }
   754 
   767 
       
   768     /// Set a node as clean in the dirstate.
       
   769     ///
       
   770     /// It is the responsibility of the caller to remove the copy source.
       
   771     ///
       
   772     /// # Panics
       
   773     ///
       
   774     /// Panics if the node does not exist.
   755     fn set_clean(
   775     fn set_clean(
   756         &mut self,
   776         &mut self,
   757         filename: &HgPath,
   777         filename: &HgPath,
   758         old_entry: DirstateEntry,
   778         old_entry: DirstateEntry,
   759         mode: u32,
   779         mode: u32,
   760         size: u32,
   780         size: u32,
   761         mtime: TruncatedTimestamp,
   781         mtime: TruncatedTimestamp,
   762     ) -> Result<(), DirstateError> {
   782     ) -> Result<(), DirstateError> {
   763         let node = self.get_or_insert_node(filename, |ancestor| {
   783         let node = DirstateMap::get_node_mut(
   764             if !old_entry.tracked() {
   784             self.on_disk,
   765                 ancestor.tracked_descendants_count += 1;
   785             &mut self.unreachable_bytes,
   766             }
   786             &mut self.root,
   767         })?;
   787             filename,
       
   788             |ancestor| {
       
   789                 if !old_entry.tracked() {
       
   790                     ancestor.tracked_descendants_count += 1;
       
   791                 }
       
   792             },
       
   793         )?
       
   794         .expect("node should exist");
   768         let mut new_entry = old_entry.clone();
   795         let mut new_entry = old_entry.clone();
   769         new_entry.set_clean(mode, size, mtime);
   796         new_entry.set_clean(mode, size, mtime);
   770         node.data = NodeData::Entry(new_entry);
   797         node.data = NodeData::Entry(new_entry);
   771         Ok(())
   798         Ok(())
   772     }
   799     }
   773 
   800 
       
   801     /// Set a node as possibly dirty in the dirstate.
       
   802     ///
       
   803     /// # Panics
       
   804     ///
       
   805     /// Panics if the node does not exist.
   774     fn set_possibly_dirty(
   806     fn set_possibly_dirty(
   775         &mut self,
   807         &mut self,
   776         filename: &HgPath,
   808         filename: &HgPath,
   777     ) -> Result<(), DirstateError> {
   809     ) -> Result<(), DirstateError> {
   778         let node = self.get_or_insert_node(filename, |_ancestor| {})?;
   810         let node = DirstateMap::get_node_mut(
       
   811             self.on_disk,
       
   812             &mut self.unreachable_bytes,
       
   813             &mut self.root,
       
   814             filename,
       
   815             |_ancestor| {},
       
   816         )?
       
   817         .expect("node should exist");
   779         let entry = node.data.as_entry_mut().expect("entry should exist");
   818         let entry = node.data.as_entry_mut().expect("entry should exist");
   780         entry.set_possibly_dirty();
   819         entry.set_possibly_dirty();
   781         node.data = NodeData::Entry(*entry);
   820         node.data = NodeData::Entry(*entry);
   782         Ok(())
   821         Ok(())
   783     }
   822     }