forked from mirrors/jj
index: move function for saving MutableIndex onto the struct
This commit is contained in:
parent
713d32d803
commit
b77740e58a
1 changed files with 23 additions and 30 deletions
|
@ -462,6 +462,24 @@ impl MutableIndex {
|
||||||
buf
|
buf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn save(self, dir: &Path) -> io::Result<ReadonlyIndex> {
|
||||||
|
let hash_length = self.hash_length;
|
||||||
|
let buf = self.serialize();
|
||||||
|
|
||||||
|
let mut hasher = Blake2b::new();
|
||||||
|
hasher.update(&buf);
|
||||||
|
let index_file_id_hex = hex::encode(&hasher.finalize());
|
||||||
|
let index_file_path = dir.join(&index_file_id_hex);
|
||||||
|
|
||||||
|
let mut temp_file = NamedTempFile::new_in(&dir)?;
|
||||||
|
let file = temp_file.as_file_mut();
|
||||||
|
file.write_all(&buf).unwrap();
|
||||||
|
temp_file.persist(&index_file_path)?;
|
||||||
|
|
||||||
|
let mut cursor = Cursor::new(&buf);
|
||||||
|
ReadonlyIndex::load_from(&mut cursor, dir, index_file_id_hex, hash_length)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn num_commits(&self) -> u32 {
|
pub fn num_commits(&self) -> u32 {
|
||||||
CompositeIndex(self).num_commits()
|
CompositeIndex(self).num_commits()
|
||||||
}
|
}
|
||||||
|
@ -1120,24 +1138,6 @@ impl ReadonlyIndex {
|
||||||
ReadonlyIndex::load_from(&mut index_file, dir, index_file_id_hex, hash_length)
|
ReadonlyIndex::load_from(&mut index_file, dir, index_file_id_hex, hash_length)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn from_mutable(dir: &Path, data: MutableIndex) -> io::Result<ReadonlyIndex> {
|
|
||||||
let hash_length = data.hash_length;
|
|
||||||
let buf = data.serialize();
|
|
||||||
|
|
||||||
let mut hasher = Blake2b::new();
|
|
||||||
hasher.update(&buf);
|
|
||||||
let index_file_id_hex = hex::encode(&hasher.finalize());
|
|
||||||
let index_file_path = dir.join(&index_file_id_hex);
|
|
||||||
|
|
||||||
let mut temp_file = NamedTempFile::new_in(&dir)?;
|
|
||||||
let file = temp_file.as_file_mut();
|
|
||||||
file.write_all(&buf).unwrap();
|
|
||||||
temp_file.persist(&index_file_path)?;
|
|
||||||
|
|
||||||
let mut cursor = Cursor::new(&buf);
|
|
||||||
ReadonlyIndex::load_from(&mut cursor, dir, index_file_id_hex, hash_length)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn index(store: &StoreWrapper, dir: &Path, operation: &Operation) -> io::Result<ReadonlyIndex> {
|
fn index(store: &StoreWrapper, dir: &Path, operation: &Operation) -> io::Result<ReadonlyIndex> {
|
||||||
let view = operation.view();
|
let view = operation.view();
|
||||||
let operations_dir = dir.join("operations");
|
let operations_dir = dir.join("operations");
|
||||||
|
@ -1183,7 +1183,7 @@ impl ReadonlyIndex {
|
||||||
data.add_commit(&commit);
|
data.add_commit(&commit);
|
||||||
}
|
}
|
||||||
|
|
||||||
let index_file = ReadonlyIndex::from_mutable(dir, data)?;
|
let index_file = data.save(dir)?;
|
||||||
|
|
||||||
let mut temp_file = NamedTempFile::new_in(&dir)?;
|
let mut temp_file = NamedTempFile::new_in(&dir)?;
|
||||||
let file = temp_file.as_file_mut();
|
let file = temp_file.as_file_mut();
|
||||||
|
@ -1312,9 +1312,7 @@ mod tests {
|
||||||
let temp_dir;
|
let temp_dir;
|
||||||
let index = if use_file {
|
let index = if use_file {
|
||||||
temp_dir = tempfile::tempdir().unwrap();
|
temp_dir = tempfile::tempdir().unwrap();
|
||||||
IndexRef::Readonly(Arc::new(
|
IndexRef::Readonly(Arc::new(index.save(temp_dir.path()).unwrap()))
|
||||||
ReadonlyIndex::from_mutable(temp_dir.path(), index).unwrap(),
|
|
||||||
))
|
|
||||||
} else {
|
} else {
|
||||||
IndexRef::Mutable(&index)
|
IndexRef::Mutable(&index)
|
||||||
};
|
};
|
||||||
|
@ -1341,9 +1339,7 @@ mod tests {
|
||||||
let temp_dir;
|
let temp_dir;
|
||||||
let index = if use_file {
|
let index = if use_file {
|
||||||
temp_dir = tempfile::tempdir().unwrap();
|
temp_dir = tempfile::tempdir().unwrap();
|
||||||
IndexRef::Readonly(Arc::new(
|
IndexRef::Readonly(Arc::new(index.save(temp_dir.path()).unwrap()))
|
||||||
ReadonlyIndex::from_mutable(temp_dir.path(), index).unwrap(),
|
|
||||||
))
|
|
||||||
} else {
|
} else {
|
||||||
IndexRef::Mutable(&index)
|
IndexRef::Mutable(&index)
|
||||||
};
|
};
|
||||||
|
@ -1404,8 +1400,7 @@ mod tests {
|
||||||
// now and build the remainder as another segment on top.
|
// now and build the remainder as another segment on top.
|
||||||
let temp_dir = tempfile::tempdir().unwrap();
|
let temp_dir = tempfile::tempdir().unwrap();
|
||||||
if incremental {
|
if incremental {
|
||||||
let initial_file =
|
let initial_file = Arc::new(index.save(temp_dir.path()).unwrap());
|
||||||
Arc::new(ReadonlyIndex::from_mutable(temp_dir.path(), index).unwrap());
|
|
||||||
index = MutableIndex::incremental(initial_file);
|
index = MutableIndex::incremental(initial_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1413,9 +1408,7 @@ mod tests {
|
||||||
index.add_commit_data(id_4.clone(), vec![id_1.clone()]);
|
index.add_commit_data(id_4.clone(), vec![id_1.clone()]);
|
||||||
index.add_commit_data(id_5.clone(), vec![id_4.clone(), id_2.clone()]);
|
index.add_commit_data(id_5.clone(), vec![id_4.clone(), id_2.clone()]);
|
||||||
let index = if use_file {
|
let index = if use_file {
|
||||||
IndexRef::Readonly(Arc::new(
|
IndexRef::Readonly(Arc::new(index.save(temp_dir.path()).unwrap()))
|
||||||
ReadonlyIndex::from_mutable(temp_dir.path(), index).unwrap(),
|
|
||||||
))
|
|
||||||
} else {
|
} else {
|
||||||
IndexRef::Mutable(&index)
|
IndexRef::Mutable(&index)
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue