diff --git a/core/src/main/groovy/com/muwire/core/files/FileTree.groovy b/core/src/main/groovy/com/muwire/core/files/FileTree.groovy index 3f389603..810f38bf 100644 --- a/core/src/main/groovy/com/muwire/core/files/FileTree.groovy +++ b/core/src/main/groovy/com/muwire/core/files/FileTree.groovy @@ -96,6 +96,13 @@ class FileTree { } } + synchronized File commonAncestor() { + TreeNode current = root + while(current.children.size() == 1) + current = current.children.first() + current.file + } + public static class TreeNode { TreeNode parent File file diff --git a/core/src/test/groovy/com/muwire/core/files/FileTreeTest.groovy b/core/src/test/groovy/com/muwire/core/files/FileTreeTest.groovy index 1cfa6392..d648668b 100644 --- a/core/src/test/groovy/com/muwire/core/files/FileTreeTest.groovy +++ b/core/src/test/groovy/com/muwire/core/files/FileTreeTest.groovy @@ -134,4 +134,32 @@ class FileTreeTest { assert values.size() == 1 assert values.contains("c") } + + @Test + public void testCommonAncestor() { + File a = new File("a") + File b = new File(a,"b") + File c = new File(b,"c") + File d = new File(b,"d") + + a.delete() + b.delete() + c.delete() + d.delete() + + a.mkdir() + b.mkdir() + c.createNewFile() + d.createNewFile() + + FileTree tree = new FileTree<>() + tree.add(a, null) + tree.add(b, null) + tree.add(c, null) + tree.add(d, null) + + File common = tree.commonAncestor() + + assert common == b + } }