Loading buildstream/_stream.py +5 −1 Original line number Diff line number Diff line Loading @@ -476,7 +476,7 @@ class Stream(): # Check for workspace config workspace = workspaces.get_workspace(target._get_full_name()) if workspace: if workspace and not force: raise StreamError("Workspace '{}' is already defined at: {}" .format(target.name, workspace.path)) Loading @@ -495,6 +495,10 @@ class Stream(): "fetch the latest version of the " + "source.") if workspace: workspaces.delete_workspace(target._get_full_name()) workspaces.save_config() shutil.rmtree(directory) try: os.makedirs(directory, exist_ok=True) except OSError as e: Loading tests/frontend/workspace.py +54 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,60 @@ def test_open_force(cli, tmpdir, datafiles, kind): result.assert_success() @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("kind", repo_kinds) def test_open_force_open(cli, tmpdir, datafiles, kind): element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, kind, False) # Assert the workspace dir exists assert os.path.exists(workspace) # Now open the workspace again with --force, this should happily succeed result = cli.run(project=project, args=[ 'workspace', 'open', '--force', element_name, workspace ]) result.assert_success() @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("kind", repo_kinds) def test_open_force_different_workspace(cli, tmpdir, datafiles, kind): element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, kind, False, "-alpha") # Assert the workspace dir exists assert os.path.exists(workspace) hello_path = os.path.join(workspace, 'usr', 'bin', 'hello') hello1_path = os.path.join(workspace, 'usr', 'bin', 'hello1') tmpdir = os.path.join(str(tmpdir), "-beta") shutil.move(hello_path, hello1_path) element_name2, project2, workspace2 = open_workspace(cli, tmpdir, datafiles, kind, False, "-beta") # Assert the workspace dir exists assert os.path.exists(workspace2) # Assert that workspace 1 contains the modified file assert os.path.exists(hello1_path) # Assert that workspace 2 contains the unmodified file assert os.path.exists(os.path.join(workspace2, 'usr', 'bin', 'hello')) # Now open the workspace again with --force, this should happily succeed result = cli.run(project=project, args=[ 'workspace', 'open', '--force', element_name2, workspace ]) print("\n\n\nls: {}\n\n\n".format(subprocess.check_output(["ls", "-R"], cwd=workspace))) # Assert that the file in workspace 1 has been replaced # With the file from workspace 2 assert os.path.exists(hello_path) assert not os.path.exists(hello1_path) result.assert_success() @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("kind", repo_kinds) def test_close(cli, tmpdir, datafiles, kind): Loading Loading
buildstream/_stream.py +5 −1 Original line number Diff line number Diff line Loading @@ -476,7 +476,7 @@ class Stream(): # Check for workspace config workspace = workspaces.get_workspace(target._get_full_name()) if workspace: if workspace and not force: raise StreamError("Workspace '{}' is already defined at: {}" .format(target.name, workspace.path)) Loading @@ -495,6 +495,10 @@ class Stream(): "fetch the latest version of the " + "source.") if workspace: workspaces.delete_workspace(target._get_full_name()) workspaces.save_config() shutil.rmtree(directory) try: os.makedirs(directory, exist_ok=True) except OSError as e: Loading
tests/frontend/workspace.py +54 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,60 @@ def test_open_force(cli, tmpdir, datafiles, kind): result.assert_success() @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("kind", repo_kinds) def test_open_force_open(cli, tmpdir, datafiles, kind): element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, kind, False) # Assert the workspace dir exists assert os.path.exists(workspace) # Now open the workspace again with --force, this should happily succeed result = cli.run(project=project, args=[ 'workspace', 'open', '--force', element_name, workspace ]) result.assert_success() @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("kind", repo_kinds) def test_open_force_different_workspace(cli, tmpdir, datafiles, kind): element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, kind, False, "-alpha") # Assert the workspace dir exists assert os.path.exists(workspace) hello_path = os.path.join(workspace, 'usr', 'bin', 'hello') hello1_path = os.path.join(workspace, 'usr', 'bin', 'hello1') tmpdir = os.path.join(str(tmpdir), "-beta") shutil.move(hello_path, hello1_path) element_name2, project2, workspace2 = open_workspace(cli, tmpdir, datafiles, kind, False, "-beta") # Assert the workspace dir exists assert os.path.exists(workspace2) # Assert that workspace 1 contains the modified file assert os.path.exists(hello1_path) # Assert that workspace 2 contains the unmodified file assert os.path.exists(os.path.join(workspace2, 'usr', 'bin', 'hello')) # Now open the workspace again with --force, this should happily succeed result = cli.run(project=project, args=[ 'workspace', 'open', '--force', element_name2, workspace ]) print("\n\n\nls: {}\n\n\n".format(subprocess.check_output(["ls", "-R"], cwd=workspace))) # Assert that the file in workspace 1 has been replaced # With the file from workspace 2 assert os.path.exists(hello_path) assert not os.path.exists(hello1_path) result.assert_success() @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("kind", repo_kinds) def test_close(cli, tmpdir, datafiles, kind): Loading