def test_skip_symlink(tmp_path, monkeypatch): foo = tmp_path / "foo" foo.mkdir() (foo / "a.py").touch() (foo / "link.py").symlink_to(foo / "a.py") monkeypatch.chdir(tmp_path) python_language = Language("python") assert cmp_path_sets( TargetManager.expand_targets([foo], python_language, False), {foo / "a.py"}, ) assert cmp_path_sets( TargetManager.expand_targets([foo / "link.py"], python_language, False), set())
def test_delete_git(tmp_path, monkeypatch): """ Check that deleted files are not included in expanded targets """ foo = tmp_path / "foo.py" bar = tmp_path / "bar.py" foo.touch() bar.touch() monkeypatch.chdir(tmp_path) subprocess.run(["git", "init"]) subprocess.run(["git", "add", foo]) subprocess.run(["git", "commit", "-m", "first commit"]) foo.unlink() subprocess.run(["git", "status"]) assert cmp_path_sets( TargetManager.expand_targets([Path(".")], "python", True), {bar})
def test_expand_targets_not_git(tmp_path, monkeypatch): """ Check that directory expansion works with relative paths, absolute paths, paths with .. """ foo = tmp_path / "foo" foo.mkdir() (foo / "a.go").touch() (foo / "b.go").touch() (foo / "py").touch() foo_a = foo / "a.py" foo_a.touch() foo_b = foo / "b.py" foo_b.touch() bar = tmp_path / "bar" bar.mkdir() bar_a = bar / "a.py" bar_a.touch() bar_b = bar / "b.py" bar_b.touch() foo_bar = foo / "bar" foo_bar.mkdir() foo_bar_a = foo_bar / "a.py" foo_bar_a.touch() foo_bar_b = foo_bar / "b.py" foo_bar_b.touch() in_foo_bar = {foo_bar_a, foo_bar_b} in_foo = {foo_a, foo_b}.union(in_foo_bar) in_bar = {bar_a, bar_b} in_all = in_foo.union(in_bar) python_language = Language("python") monkeypatch.chdir(tmp_path) assert cmp_path_sets( TargetManager.expand_targets([Path(".")], python_language, False), in_all) assert cmp_path_sets( TargetManager.expand_targets([Path("bar")], python_language, False), in_bar) assert cmp_path_sets( TargetManager.expand_targets([Path("foo")], python_language, False), in_foo) assert cmp_path_sets( TargetManager.expand_targets([Path("foo").resolve()], python_language, False), in_foo, ) assert cmp_path_sets( TargetManager.expand_targets([Path("foo/bar")], python_language, False), in_foo_bar, ) assert cmp_path_sets( TargetManager.expand_targets([Path("foo/bar").resolve()], python_language, False), in_foo_bar, ) monkeypatch.chdir(foo) assert cmp_path_sets( TargetManager.expand_targets([Path(".")], python_language, False), in_foo) assert cmp_path_sets( TargetManager.expand_targets([Path("./foo")], python_language, False), set()) assert cmp_path_sets( TargetManager.expand_targets([Path("bar")], python_language, False), in_foo_bar) assert cmp_path_sets( TargetManager.expand_targets([Path("bar")], python_language, False), in_foo_bar) assert cmp_path_sets( TargetManager.expand_targets([Path("..")], python_language, False), in_all) assert cmp_path_sets( TargetManager.expand_targets([Path("../bar")], python_language, False), in_bar) assert cmp_path_sets( TargetManager.expand_targets([Path("../foo/bar")], python_language, False), in_foo_bar, )
def test_expand_targets_git(tmp_path, monkeypatch): """ Test TargetManager with visible_to_git_only flag on in a git repository with nested .gitignores """ foo = tmp_path / "foo" foo.mkdir() foo_a_go = foo / "a.go" foo_a_go.touch() (foo / "b.go").touch() (foo / "py").touch() foo_a = foo / "a.py" foo_a.touch() foo_b = foo / "b.py" foo_b.touch() bar = tmp_path / "bar" bar.mkdir() bar_a = bar / "a.py" bar_a.touch() bar_b = bar / "b.py" bar_b.touch() foo_bar = foo / "bar" foo_bar.mkdir() foo_bar_a = foo_bar / "a.py" foo_bar_a.touch() foo_bar_b = foo_bar / "b.py" foo_bar_b.touch() monkeypatch.chdir(tmp_path) subprocess.run(["git", "init"]) subprocess.run(["git", "add", foo_a]) subprocess.run(["git", "add", foo_bar_a]) subprocess.run(["git", "add", foo_bar_b]) subprocess.run(["git", "add", foo_a_go]) subprocess.run(["git", "commit", "-m", "first"]) # Check that all files are visible without a .gitignore in_foo_bar = {foo_bar_a, foo_bar_b} in_foo = {foo_a, foo_b}.union(in_foo_bar) in_bar = {bar_a, bar_b} in_all = in_foo.union(in_bar) python_language = Language("python") monkeypatch.chdir(tmp_path) assert cmp_path_sets( TargetManager.expand_targets([Path(".")], python_language, True), in_all) assert cmp_path_sets( TargetManager.expand_targets([Path("bar")], python_language, True), in_bar) assert cmp_path_sets( TargetManager.expand_targets([Path("foo")], python_language, True), in_foo) assert cmp_path_sets( TargetManager.expand_targets([Path("foo").resolve()], python_language, True), in_foo, ) assert cmp_path_sets( TargetManager.expand_targets([Path("foo/bar")], python_language, True), in_foo_bar, ) assert cmp_path_sets( TargetManager.expand_targets([Path("foo/bar").resolve()], python_language, True), in_foo_bar, ) monkeypatch.chdir(foo) assert cmp_path_sets( TargetManager.expand_targets([Path(".")], python_language, True), in_foo) assert cmp_path_sets( TargetManager.expand_targets([Path("./foo")], python_language, True), set()) assert cmp_path_sets( TargetManager.expand_targets([Path("bar")], python_language, True), in_foo_bar) assert cmp_path_sets( TargetManager.expand_targets([Path("bar")], python_language, True), in_foo_bar) assert cmp_path_sets( TargetManager.expand_targets([Path("..")], python_language, True), in_all) assert cmp_path_sets( TargetManager.expand_targets([Path("../bar")], python_language, True), in_bar) assert cmp_path_sets( TargetManager.expand_targets([Path("../foo/bar")], python_language, True), in_foo_bar, ) # Add bar/, foo/bar/a.py, foo/b.py to gitignores monkeypatch.chdir(tmp_path) (tmp_path / ".gitignore").write_text("bar/\nfoo/bar/a.py") (tmp_path / "foo" / ".gitignore").write_text("b.py") # Reflect what should now be visible given gitignores in_foo_bar = { foo_bar_a, foo_bar_b, } # foo/bar/a.py is gitignored but is already tracked in_foo = {foo_a}.union( in_foo_bar) # foo/b.py is gitignored with a nested gitignore in_bar = set() # bar/ is gitignored in_all = in_foo.union(in_bar) monkeypatch.chdir(tmp_path) assert cmp_path_sets( TargetManager.expand_targets([Path(".")], python_language, True), in_all) assert cmp_path_sets( TargetManager.expand_targets([Path("bar")], python_language, True), in_bar) assert cmp_path_sets( TargetManager.expand_targets([Path("foo")], python_language, True), in_foo) assert cmp_path_sets( TargetManager.expand_targets([Path("foo").resolve()], python_language, True), in_foo, ) assert cmp_path_sets( TargetManager.expand_targets([Path("foo/bar")], python_language, True), in_foo_bar, ) assert cmp_path_sets( TargetManager.expand_targets([Path("foo/bar").resolve()], python_language, True), in_foo_bar, ) monkeypatch.chdir(foo) assert cmp_path_sets( TargetManager.expand_targets([Path(".")], python_language, True), in_foo) assert cmp_path_sets( TargetManager.expand_targets([Path("./foo")], python_language, True), set()) assert cmp_path_sets( TargetManager.expand_targets([Path("bar")], python_language, True), in_foo_bar) assert cmp_path_sets( TargetManager.expand_targets([Path("bar")], python_language, True), in_foo_bar) assert cmp_path_sets( TargetManager.expand_targets([Path("..")], python_language, True), in_all) assert cmp_path_sets( TargetManager.expand_targets([Path("../bar")], python_language, True), in_bar) assert cmp_path_sets( TargetManager.expand_targets([Path("../foo/bar")], python_language, True), in_foo_bar, )