mirror of
https://github.com/martinvonz/jj.git
synced 2024-12-24 12:48:55 +00:00
working_copy: return MergedTreeId
on snapshot
This commit is contained in:
parent
88e9933462
commit
abf3853717
6 changed files with 29 additions and 23 deletions
|
@ -1295,7 +1295,7 @@ See https://github.com/martinvonz/jj/blob/main/docs/working-copy.md#stale-workin
|
|||
max_new_file_size: self.settings.max_new_file_size()?,
|
||||
})?;
|
||||
drop(progress);
|
||||
if new_tree_id != *wc_commit.tree_id() {
|
||||
if new_tree_id != *wc_commit.merged_tree_id() {
|
||||
let mut tx = start_repo_transaction(
|
||||
&self.user_repo.repo,
|
||||
&self.settings,
|
||||
|
@ -1305,7 +1305,7 @@ See https://github.com/martinvonz/jj/blob/main/docs/working-copy.md#stale-workin
|
|||
let mut_repo = tx.mut_repo();
|
||||
let commit = mut_repo
|
||||
.rewrite_commit(&self.settings, &wc_commit)
|
||||
.set_tree(new_tree_id)
|
||||
.set_tree_id(new_tree_id)
|
||||
.write()?;
|
||||
mut_repo.set_wc_commit(workspace_id, commit.id().clone())?;
|
||||
|
||||
|
|
|
@ -1334,12 +1334,14 @@ fn cmd_untrack(
|
|||
locked_working_copy.reset(&new_tree)?;
|
||||
// Commit the working copy again so we can inform the user if paths couldn't be
|
||||
// untracked because they're not ignored.
|
||||
let wc_tree_id = locked_working_copy.snapshot(SnapshotOptions {
|
||||
base_ignores,
|
||||
fsmonitor_kind: command.settings().fsmonitor_kind()?,
|
||||
progress: None,
|
||||
max_new_file_size: command.settings().max_new_file_size()?,
|
||||
})?;
|
||||
let wc_tree_id = locked_working_copy
|
||||
.snapshot(SnapshotOptions {
|
||||
base_ignores,
|
||||
fsmonitor_kind: command.settings().fsmonitor_kind()?,
|
||||
progress: None,
|
||||
max_new_file_size: command.settings().max_new_file_size()?,
|
||||
})?
|
||||
.to_legacy_tree_id();
|
||||
if wc_tree_id != new_tree_id {
|
||||
let wc_tree = store.get_tree(&RepoPath::root(), &wc_tree_id)?;
|
||||
let added_back = wc_tree.entries_matching(matcher.as_ref()).collect_vec();
|
||||
|
|
|
@ -1583,10 +1583,10 @@ impl LockedWorkingCopy<'_> {
|
|||
// The base_ignores are passed in here rather than being set on the TreeState
|
||||
// because the TreeState may be long-lived if the library is used in a
|
||||
// long-lived process.
|
||||
pub fn snapshot(&mut self, options: SnapshotOptions) -> Result<TreeId, SnapshotError> {
|
||||
pub fn snapshot(&mut self, options: SnapshotOptions) -> Result<MergedTreeId, SnapshotError> {
|
||||
let tree_state = self.wc.tree_state_mut()?;
|
||||
self.tree_state_dirty |= tree_state.snapshot(options)?;
|
||||
Ok(tree_state.current_tree_id().to_legacy_tree_id())
|
||||
Ok(tree_state.current_tree_id().clone())
|
||||
}
|
||||
|
||||
pub fn check_out(&mut self, new_tree: &MergedTree) -> Result<CheckoutStats, CheckoutError> {
|
||||
|
|
|
@ -25,7 +25,7 @@ use std::os::unix::net::UnixListener;
|
|||
use std::sync::Arc;
|
||||
|
||||
use itertools::Itertools;
|
||||
use jj_lib::backend::{ObjectId, TreeId, TreeValue};
|
||||
use jj_lib::backend::{MergedTreeId, ObjectId, TreeId, TreeValue};
|
||||
use jj_lib::fsmonitor::FsmonitorKind;
|
||||
use jj_lib::merge::Merge;
|
||||
use jj_lib::merged_tree::MergedTree;
|
||||
|
@ -444,7 +444,7 @@ fn test_snapshot_racy_timestamps(use_git: bool) {
|
|||
let workspace_root = test_workspace.workspace.workspace_root().clone();
|
||||
|
||||
let file_path = workspace_root.join("file");
|
||||
let mut previous_tree_id = repo.store().empty_tree_id().clone();
|
||||
let mut previous_tree_id = MergedTreeId::Legacy(repo.store().empty_tree_id().clone());
|
||||
let wc = test_workspace.workspace.working_copy_mut();
|
||||
for i in 0..100 {
|
||||
{
|
||||
|
@ -496,7 +496,7 @@ fn test_snapshot_special_file() {
|
|||
.snapshot(SnapshotOptions::empty_for_test())
|
||||
.unwrap();
|
||||
locked_wc.finish(OperationId::from_hex("abc123")).unwrap();
|
||||
let tree = store.get_tree(&RepoPath::root(), &tree_id).unwrap();
|
||||
let tree = store.get_root_tree(&tree_id).unwrap();
|
||||
// Only the regular files should be in the tree
|
||||
assert_eq!(
|
||||
tree.entries().map(|(path, _value)| path).collect_vec(),
|
||||
|
@ -883,14 +883,17 @@ fn test_fsmonitor() {
|
|||
{
|
||||
let mut locked_wc = wc.start_mutation().unwrap();
|
||||
let tree_id = snapshot(&mut locked_wc, &[]);
|
||||
assert_eq!(tree_id, *repo.store().empty_tree_id());
|
||||
assert_eq!(
|
||||
tree_id,
|
||||
MergedTreeId::Legacy(repo.store().empty_tree_id().clone())
|
||||
);
|
||||
locked_wc.discard();
|
||||
}
|
||||
|
||||
{
|
||||
let mut locked_wc = wc.start_mutation().unwrap();
|
||||
let tree_id = snapshot(&mut locked_wc, &[&foo_path]);
|
||||
insta::assert_snapshot!(testutils::dump_tree(repo.store(), &tree_id), @r###"
|
||||
insta::assert_snapshot!(testutils::dump_tree(repo.store(), tree_id.as_legacy_tree_id()), @r###"
|
||||
tree 205f6b799e7d5c2524468ca006a0131aa57ecce7
|
||||
file "foo" (257cc5642cb1a054f08cc83f2d943e56fd3ebe99): "foo\n"
|
||||
"###);
|
||||
|
@ -903,7 +906,7 @@ fn test_fsmonitor() {
|
|||
&mut locked_wc,
|
||||
&[&foo_path, &bar_path, &nested_path, &ignored_path],
|
||||
);
|
||||
insta::assert_snapshot!(testutils::dump_tree(repo.store(), &tree_id), @r###"
|
||||
insta::assert_snapshot!(testutils::dump_tree(repo.store(), tree_id.as_legacy_tree_id()), @r###"
|
||||
tree ab5a0465cc71725a723f28b685844a5bc0f5b599
|
||||
file "bar" (5716ca5987cbf97d6bb54920bea6adde242d87e6): "bar\n"
|
||||
file "foo" (257cc5642cb1a054f08cc83f2d943e56fd3ebe99): "foo\n"
|
||||
|
@ -917,7 +920,7 @@ fn test_fsmonitor() {
|
|||
testutils::write_working_copy_file(&workspace_root, &bar_path, "updated bar\n");
|
||||
let mut locked_wc = wc.start_mutation().unwrap();
|
||||
let tree_id = snapshot(&mut locked_wc, &[&foo_path]);
|
||||
insta::assert_snapshot!(testutils::dump_tree(repo.store(), &tree_id), @r###"
|
||||
insta::assert_snapshot!(testutils::dump_tree(repo.store(), tree_id.as_legacy_tree_id()), @r###"
|
||||
tree 2f57ab8f48ae62e3137079f2add9878dfa1d1bcc
|
||||
file "bar" (5716ca5987cbf97d6bb54920bea6adde242d87e6): "bar\n"
|
||||
file "foo" (9d053d7c8a18a286dce9b99a59bb058be173b463): "updated foo\n"
|
||||
|
@ -930,7 +933,7 @@ fn test_fsmonitor() {
|
|||
std::fs::remove_file(foo_path.to_fs_path(&workspace_root)).unwrap();
|
||||
let mut locked_wc = wc.start_mutation().unwrap();
|
||||
let tree_id = snapshot(&mut locked_wc, &[&foo_path]);
|
||||
insta::assert_snapshot!(testutils::dump_tree(repo.store(), &tree_id), @r###"
|
||||
insta::assert_snapshot!(testutils::dump_tree(repo.store(), tree_id.as_legacy_tree_id()), @r###"
|
||||
tree 34b83765131477e1a7d72160079daec12c6144e3
|
||||
file "bar" (5716ca5987cbf97d6bb54920bea6adde242d87e6): "bar\n"
|
||||
file "path/to/nested" (79c53955ef856f16f2107446bc721c8879a1bd2e): "nested\n"
|
||||
|
|
|
@ -16,6 +16,7 @@ use std::cmp::max;
|
|||
use std::thread;
|
||||
|
||||
use assert_matches::assert_matches;
|
||||
use jj_lib::backend::MergedTreeId;
|
||||
use jj_lib::merged_tree::MergedTree;
|
||||
use jj_lib::repo::{Repo, StoreFactories};
|
||||
use jj_lib::repo_path::RepoPath;
|
||||
|
@ -104,7 +105,7 @@ fn test_checkout_parallel() {
|
|||
for i in 0..num_threads {
|
||||
let path = RepoPath::from_internal_string(format!("file{i}").as_str());
|
||||
let tree = testutils::create_tree(repo, &[(&path, "contents")]);
|
||||
tree_ids.push(tree.id().clone());
|
||||
tree_ids.push(MergedTreeId::Legacy(tree.id().clone()));
|
||||
}
|
||||
|
||||
// Create another tree just so we can test the update stats reliably from the
|
||||
|
@ -133,12 +134,12 @@ fn test_checkout_parallel() {
|
|||
let tree = workspace
|
||||
.repo_loader()
|
||||
.store()
|
||||
.get_tree(&RepoPath::root(), &tree_id)
|
||||
.get_root_tree(&tree_id)
|
||||
.unwrap();
|
||||
// The operation ID is not correct, but that doesn't matter for this test
|
||||
let stats = workspace
|
||||
.working_copy_mut()
|
||||
.check_out(op_id, None, &MergedTree::legacy(tree))
|
||||
.check_out(op_id, None, &tree)
|
||||
.unwrap();
|
||||
assert_eq!(stats.updated_files, 0);
|
||||
assert_eq!(stats.added_files, 1);
|
||||
|
|
|
@ -170,13 +170,13 @@ impl TestWorkspace {
|
|||
let tree_id = locked_wc.snapshot(SnapshotOptions {
|
||||
max_new_file_size: self.settings.max_new_file_size().unwrap(),
|
||||
..SnapshotOptions::empty_for_test()
|
||||
});
|
||||
})?;
|
||||
// arbitrary operation id
|
||||
locked_wc.finish(self.repo.op_id().clone()).unwrap();
|
||||
Ok(self
|
||||
.repo
|
||||
.store()
|
||||
.get_tree(&RepoPath::root(), &tree_id?)
|
||||
.get_tree(&RepoPath::root(), &tree_id.to_legacy_tree_id())
|
||||
.unwrap())
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue