Fix non-worktree directory detection for status
This commit is contained in:
@@ -1,10 +1,18 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
from helpers import *
|
from helpers import *
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
def test_worktree_status():
|
|
||||||
|
@pytest.mark.parametrize("has_config", [True, False])
|
||||||
|
def test_worktree_status(has_config):
|
||||||
with TempGitRepositoryWorktree() as (base_dir, _commit):
|
with TempGitRepositoryWorktree() as (base_dir, _commit):
|
||||||
|
if has_config:
|
||||||
|
with open(os.path.join(base_dir, "grm.toml"), "w") as f:
|
||||||
|
f.write("")
|
||||||
cmd = grm(["wt", "add", "test"], cwd=base_dir)
|
cmd = grm(["wt", "add", "test"], cwd=base_dir)
|
||||||
assert cmd.returncode == 0
|
assert cmd.returncode == 0
|
||||||
|
|
||||||
@@ -40,3 +48,30 @@ def test_worktree_status_non_git():
|
|||||||
assert cmd.returncode != 0
|
assert cmd.returncode != 0
|
||||||
assert len(cmd.stdout) == 0
|
assert len(cmd.stdout) == 0
|
||||||
assert len(cmd.stderr) != 0
|
assert len(cmd.stderr) != 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_worktree_status_warn_with_non_worktree_dir():
|
||||||
|
with TempGitRepositoryWorktree() as (base_dir, _commit):
|
||||||
|
cmd = grm(["wt", "add", "test"], cwd=base_dir)
|
||||||
|
assert cmd.returncode == 0
|
||||||
|
|
||||||
|
shell(
|
||||||
|
f"""
|
||||||
|
cd {base_dir}
|
||||||
|
mkdir not_a_worktree
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
cmd = grm(["wt", "status"], cwd=base_dir)
|
||||||
|
|
||||||
|
assert cmd.returncode == 0
|
||||||
|
assert len(cmd.stdout) != 0
|
||||||
|
assert len(cmd.stderr) != 0
|
||||||
|
assert (
|
||||||
|
re.match(
|
||||||
|
".*error.*not_a_worktree.*not a valid worktree directory",
|
||||||
|
cmd.stderr,
|
||||||
|
re.IGNORECASE,
|
||||||
|
)
|
||||||
|
is not None
|
||||||
|
)
|
||||||
|
|||||||
26
src/table.rs
26
src/table.rs
@@ -1,3 +1,5 @@
|
|||||||
|
use crate::Repo;
|
||||||
|
|
||||||
use comfy_table::{Cell, Table};
|
use comfy_table::{Cell, Table};
|
||||||
|
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
@@ -130,25 +132,11 @@ pub fn get_worktree_status_table(
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for entry in std::fs::read_dir(&directory).map_err(|error| error.to_string())? {
|
for worktree in Repo::find_unmanaged_worktrees(&repo, &directory).unwrap() {
|
||||||
let dirname = crate::path_as_string(
|
errors.push(format!(
|
||||||
entry
|
"Found {}, which is not a valid worktree directory!",
|
||||||
.map_err(|error| error.to_string())?
|
&worktree
|
||||||
.path()
|
));
|
||||||
.strip_prefix(&directory)
|
|
||||||
// this unwrap is safe, as we can be sure that each subentry of
|
|
||||||
// &directory also has the prefix &dir
|
|
||||||
.unwrap(),
|
|
||||||
);
|
|
||||||
if dirname == crate::GIT_MAIN_WORKTREE_DIRECTORY {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if !&worktrees.iter().any(|worktree| worktree.name() == dirname) {
|
|
||||||
errors.push(format!(
|
|
||||||
"Found {}, which is not a valid worktree directory!",
|
|
||||||
&dirname
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Ok((table, errors))
|
Ok((table, errors))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user