Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions josh-core/src/housekeeping.rs
Original file line number Diff line number Diff line change
Expand Up @@ -209,12 +209,13 @@ pub fn find_all_workspaces_and_subdirectories(
let _trace_s = span!(Level::TRACE, "find_all_workspaces_and_subdirectories");
let mut hs = std::collections::HashSet::new();
tree.walk(git2::TreeWalkMode::PreOrder, |root, entry| {
if entry.name() == Some("workspace.josh") {
hs.insert(format!(":workspace={}", root.trim_matches('/')));
}
if root.is_empty() {
return 0;
}

if entry.name() == Some("workspace.josh") {
hs.insert(format!(":workspace={}", root.trim_matches('/')));
}
let v = format!("::{}/", root.trim_matches('/'));
if v.chars().filter(|x| *x == '/').count() < 3 {
hs.insert(v);
Expand Down
3 changes: 0 additions & 3 deletions josh-filter/src/bin/josh-filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -233,9 +233,6 @@ fn run_filter(args: Vec<String>) -> josh::JoshResult<i32> {
let r = repo.revparse_single(&input_ref)?;
let hs = josh::housekeeping::find_all_workspaces_and_subdirectories(&r.peel_to_tree()?)?;
for i in hs {
if i.contains(":workspace=") {
continue;
}
let (mut updated_refs, _) = josh::filter_refs(
&transaction,
josh::filter::parse(&i)?,
Expand Down
103 changes: 103 additions & 0 deletions tests/filter/workspace_discover.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
$ export TERM=dumb
$ export RUST_LOG_STYLE=never

$ git init -q real_repo 1> /dev/null
$ cd real_repo

$ mkdir sub1
$ echo contents1 > sub1/file1
$ echo contents1 > sub1/file2
$ chmod +x sub1/file2
$ git add sub1
$ git commit -m "add file1" 1> /dev/null
$ git ls-tree -r HEAD
100644 blob a024003ee1acc6bf70318a46e7b6df651b9dc246\tsub1/file1 (esc)
100755 blob a024003ee1acc6bf70318a46e7b6df651b9dc246\tsub1/file2 (esc)

$ mkdir -p sub2/subsub
$ echo contents1 > sub2/subsub/file2
$ git add sub2
$ git commit -m "add file2" 1> /dev/null

$ mkdir ws
$ cat > ws/workspace.josh <<EOF
> :/sub1::file1
> :/sub1::file2
> ::sub2/subsub/
> EOF
$ git add ws
$ git commit -m "add ws" 1> /dev/null

$ mkdir ws2
$ cat > ws2/workspace.josh <<EOF
> :/sub1::file1
> :/sub1::file2
> ::sub2/subsub
> EOF
$ git add ws2
$ git commit -m "add ws2" 1> /dev/null

$ josh-filter -s
$ josh-filter -d -s
[1] :/sub1
[1] :/subsub
[1] :prefix=sub1
[1] :prefix=sub2
[1] :prefix=subsub
[1] :prefix=ws
[1] :prefix=ws2
[2] :/sub2
[2] :/ws
[2] :/ws2
[2] :[
:/sub1:[
::file1
::file2
]
::sub2/subsub
]
[2] :[
:/sub1:[
::file1
::file2
]
::sub2/subsub/
]
[2] :workspace=ws
[2] :workspace=ws2

$ cat > workspace.josh <<EOF
> :/sub1::file1
> :/sub1::file2
> ::sub2/subsub
> EOF
$ git add .
$ git commit -m "add root ws" 1> /dev/null

$ josh-filter -d -s
[1] :/sub1
[1] :/subsub
[1] :prefix=sub1
[1] :prefix=sub2
[1] :prefix=subsub
[1] :prefix=ws
[1] :prefix=ws2
[2] :/sub2
[2] :/ws
[2] :/ws2
[2] :[
:/sub1:[
::file1
::file2
]
::sub2/subsub
]
[2] :[
:/sub1:[
::file1
::file2
]
::sub2/subsub/
]
[2] :workspace=ws
[2] :workspace=ws2