def test_foreach_with_groups_from_config( tsrc_cli: CLI, git_server: GitServer, message_recorder: MessageRecorder ) -> None: """ * Create a manifest containing: * a group named `foo` with repos `bar` and `baz`, * a group named `spam` with repos `eggs` and `beacon` * a repo named `other`, not part of any group * Initialize a workspace from this manifest, using the `foo` and `spam` groups * Check that `tsrc foreach ---group "foo" --ls README` works and runs `ls` only on everything but `other` """ git_server.add_group("foo", ["bar", "baz"]) git_server.add_group("spam", ["eggs", "beacon"]) git_server.add_repo("other") manifest_url = git_server.manifest_url tsrc_cli.run("init", manifest_url, "--groups", "foo", "spam") message_recorder.reset() tsrc_cli.run("foreach", "ls") assert message_recorder.find("bar\n") assert message_recorder.find("baz\n") assert message_recorder.find("eggs\n") assert not message_recorder.find("other\n")
def test_happy(tsrc_cli: CLI, git_server: GitServer, message_recorder: MessageRecorder) -> None: """ Scenario: * Create a manifest with two repos, foo and bar * Initialize a workspace from this manifest * Create a tag named v0.1 on foo and bar * Run `tsrc log --from v0.1 """ git_server.add_repo("foo") git_server.add_repo("spam") git_server.push_file("foo", "bar.txt", message="boring bar") git_server.tag("foo", "v0.1") git_server.tag("spam", "v0.1") manifest_url = git_server.manifest_url tsrc_cli.run("init", manifest_url) git_server.push_file("foo", "foo.txt", message="new foo!") tsrc_cli.run("sync") message_recorder.reset() tsrc_cli.run("log", "--from", "v0.1") assert message_recorder.find("new foo!") message_recorder.reset() tsrc_cli.run("log", "--from", "v0.1", "--to", "v0.1") assert not message_recorder.find("new foo!")
def test_foreach_with_all_cloned_repos_requested( tsrc_cli: CLI, git_server: GitServer, workspace_path: Path, message_recorder: MessageRecorder, ) -> None: """ * Create a manifest containing: * a group named `foo` with repos `bar` and `baz`, * a group named `spam` with repos `eggs` and `beacon` * a repo named `quux`, not part of any group * Initialize a workspace from this manifest, using the `foo` group * Force the clone of the `other` repo * Check that `tsrc foreach --all-cloned` visits all repos """ git_server.add_group("foo", ["bar", "baz"]) git_server.add_group("spam", ["eggs", "bacon"]) quux_url = git_server.add_repo("quux") manifest_url = git_server.manifest_url tsrc_cli.run("init", manifest_url, "--groups", "foo", "spam") tsrc.git.run(workspace_path, "clone", quux_url) message_recorder.reset() tsrc_cli.run("foreach", "--all-cloned", "ls") assert message_recorder.find("bar\n") assert message_recorder.find("baz\n") assert message_recorder.find("eggs\n") assert message_recorder.find("bacon\n") assert message_recorder.find("quux\n")
def test_use_given_group( tsrc_cli: CLI, git_server: GitServer, workspace_path: Path, message_recorder: MessageRecorder, ) -> None: """Scenario: * Create a manifest with two disjoint groups, group1 and group2 * Initialize a workspace from this manifest using the two groups * Run `tsrc status --group group1` * Check that the output contains repos from group1, but not from group2 """ git_server.add_group("group1", ["foo"]) git_server.add_group("group2", ["bar"]) manifest_url = git_server.manifest_url tsrc_cli.run("init", manifest_url, "--groups", "group1", "group2") message_recorder.reset() tsrc_cli.run("status", "--group", "group1") assert message_recorder.find(r"\* foo"), "foo status have been read" assert not message_recorder.find(r"\* bar"), "bar should have been skipped"
def test_custom_group(tsrc_cli: CLI, git_server: GitServer, message_recorder: MessageRecorder) -> None: git_server.add_group("foo", ["bar", "baz"]) git_server.add_repo("other") tsrc_cli.run("init", git_server.manifest_url, "--group", "foo") message_recorder.reset() tsrc_cli.run("sync") assert message_recorder.find("bar") assert not message_recorder.find("other")
def test_foreach_error_when_using_missing_groups( tsrc_cli: CLI, git_server: GitServer, message_recorder: MessageRecorder) -> None: git_server.add_group("foo", ["bar", "baz"]) git_server.add_group("spam", ["eggs", "beacon"]) manifest_url = git_server.manifest_url tsrc_cli.run("init", manifest_url, "-g", "foo") message_recorder.reset() tsrc_cli.run("foreach", "-g", "foo", "-g", "spam", "ls", expect_fail=True)
def test_foreach_groups_warn_skipped( tsrc_cli: CLI, git_server: GitServer, message_recorder: MessageRecorder) -> None: git_server.add_group("foo", ["bar", "baz"]) git_server.add_group("spam", ["eggs", "beacon"]) git_server.add_repo("other") manifest_url = git_server.manifest_url tsrc_cli.run("init", manifest_url, "-g", "foo") cmd = get_cmd_for_foreach_test(shell=False) message_recorder.reset() tsrc_cli.run("foreach", "-g", "foo", "-g", "spam", *cmd)
def test_foreach_with_groups_from_config( tsrc_cli: CLI, git_server: GitServer, message_recorder: MessageRecorder) -> None: git_server.add_group("foo", ["bar", "baz"]) git_server.add_group("spam", ["eggs", "beacon"]) git_server.add_repo("other") manifest_url = git_server.manifest_url tsrc_cli.run("init", manifest_url, "--groups", "foo", "spam") message_recorder.reset() tsrc_cli.run("foreach", "--groups-from-config", "ls") assert message_recorder.find("bar\n") assert message_recorder.find("baz\n") assert message_recorder.find("eggs\n") assert not message_recorder.find("other\n")
def test_foreach_error_when_using_missing_groups( tsrc_cli: CLI, git_server: GitServer, message_recorder: MessageRecorder ) -> None: """ * Create a manifest containing: * a group named `foo` with repos `bar` and `baz`, * a group named `spam` with repos `eggs` and `beacon` * Initialize a workspace from this manifest, using the `foo` group * Check that `tsrc foreach ---groups foo spam --ls` fails """ git_server.add_group("foo", ["bar", "baz"]) git_server.add_group("spam", ["eggs", "beacon"]) manifest_url = git_server.manifest_url tsrc_cli.run("init", manifest_url, "--group", "foo") message_recorder.reset() tsrc_cli.run_and_fail("foreach", "--groups", "foo", "spam", "--", "ls")
def test_foreach_with_explicit_groups( tsrc_cli: CLI, git_server: GitServer, message_recorder: MessageRecorder) -> None: git_server.add_group("foo", ["bar", "baz"]) git_server.add_group("spam", ["eggs", "beacon"]) git_server.add_repo("other") manifest_url = git_server.manifest_url tsrc_cli.run("init", manifest_url, "--groups", "foo", "spam") cmd = get_cmd_for_foreach_test(shell=False) message_recorder.reset() tsrc_cli.run("foreach", "-g", "foo", *cmd) assert message_recorder.find("bar\n") assert message_recorder.find("baz\n") assert not message_recorder.find("eggs\n") assert not message_recorder.find("other\n")
def test_happy(tsrc_cli: CLI, git_server: GitServer, message_recorder: MessageRecorder) -> None: git_server.add_repo("foo") git_server.add_repo("spam") git_server.push_file("foo", "bar.txt", message="boring bar") git_server.tag("foo", "v0.1") git_server.tag("spam", "v0.1") manifest_url = git_server.manifest_url tsrc_cli.run("init", manifest_url) git_server.push_file("foo", "foo.txt", message="new foo!") tsrc_cli.run("sync") message_recorder.reset() tsrc_cli.run("log", "--from", "v0.1") assert message_recorder.find("new foo!") message_recorder.reset() tsrc_cli.run("log", "--from", "v0.1", "--to", "v0.1") assert not message_recorder.find("new foo!")
def test_missing_repos_from_given_group( tsrc_cli: CLI, git_server: GitServer, message_recorder: MessageRecorder) -> None: """ Scenario: * Create a manifest with two disjoint groups, group1 and group2 * For each repo, create v0.1 tag * Initialize a workspace from this manifest using group1 * Run `tsrc log --from v0.1 --groups group1 group2` * Check it fails """ git_server.add_group("group1", ["foo"]) git_server.add_group("group2", ["bar"]) git_server.tag("foo", "v0.1") git_server.tag("bar", "v0.1") manifest_url = git_server.manifest_url tsrc_cli.run("init", manifest_url, "--group", "group1") message_recorder.reset() tsrc_cli.run_and_fail("log", "--from", "v0.1", "--groups", "group1", "group2")
def test_use_non_cloned_group( tsrc_cli: CLI, git_server: GitServer, workspace_path: Path, message_recorder: MessageRecorder, ) -> None: """Scenario: * Create a manifest with two disjoint groups, group1 and group2 * Initialize a workspace from this manifest using the group 'group1' * Run `tsrc status --group group2` * Check that it does not crash """ git_server.add_group("group1", ["foo"]) git_server.add_group("group2", ["bar"]) manifest_url = git_server.manifest_url tsrc_cli.run("init", manifest_url, "--groups", "group1") message_recorder.reset() tsrc_cli.run("status", "--group", "group2")