You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by no...@apache.org on 2020/12/29 12:51:45 UTC

[buildstream] 01/01: Move bzr plugin to bst-plugins-experimental

This is an automated email from the ASF dual-hosted git repository.

not-in-ldap pushed a commit to branch jjardon/bzr
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit 9ac28f4da561043efb478ffa244c377f105a8ab4
Author: Javier Jardón <jj...@gnome.org>
AuthorDate: Sat Apr 25 13:18:09 2020 +0100

    Move bzr plugin to bst-plugins-experimental
---
 doc/source/core_plugins.rst                  |   1 -
 src/buildstream/plugins/sources/bzr.py       | 214 ---------------------------
 src/buildstream/testing/_utils/site.py       |   9 --
 tests/cachekey/cachekey.py                   |   3 +-
 tests/cachekey/project/sources/bzr1.bst      |   6 -
 tests/cachekey/project/sources/bzr1.expected |   1 -
 tests/cachekey/project/target.bst            |   1 -
 tests/cachekey/project/target.expected       |   2 +-
 tests/conftest.py                            |   2 -
 tests/frontend/workspace.py                  |  20 ---
 tests/sources/bzr.py                         |  40 -----
 tests/sources/bzr/basic/test                 |   1 -
 tests/sources/bzr/project.conf               |   3 -
 tests/testutils/repo/bzr.py                  |  47 ------
 14 files changed, 2 insertions(+), 348 deletions(-)

diff --git a/doc/source/core_plugins.rst b/doc/source/core_plugins.rst
index e788936..8efe8a7 100644
--- a/doc/source/core_plugins.rst
+++ b/doc/source/core_plugins.rst
@@ -53,7 +53,6 @@ information.
    sources/tar
    sources/zip
    sources/git
-   sources/bzr
    sources/patch
    sources/pip
 
diff --git a/src/buildstream/plugins/sources/bzr.py b/src/buildstream/plugins/sources/bzr.py
deleted file mode 100644
index 8a02eff..0000000
--- a/src/buildstream/plugins/sources/bzr.py
+++ /dev/null
@@ -1,214 +0,0 @@
-#  Copyright (C) 2017 Codethink Limited
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU Lesser General Public
-#  License as published by the Free Software Foundation; either
-#  version 2 of the License, or (at your option) any later version.
-#
-#  This library is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with this library. If not, see <http://www.gnu.org/licenses/>.
-#
-#  Authors:
-#        Jonathan Maw <jo...@codethink.co.uk>
-
-"""
-bzr - stage files from a bazaar repository
-==========================================
-
-**Host dependencies:**
-
-  * bzr
-
-**Usage:**
-
-.. code:: yaml
-
-   # Specify the bzr source kind
-   kind: bzr
-
-   # Specify the bzr url. Bazaar URLs come in many forms, see
-   # `bzr help urlspec` for more information. Using an alias defined
-   # in your project configuration is encouraged.
-   url: https://launchpad.net/bzr
-
-   # Specify the tracking branch. This is mandatory, as bzr cannot identify
-   # an individual revision outside its branch. bzr URLs that omit the branch
-   # name implicitly specify the trunk branch, but bst requires this to be
-   # explicit.
-   track: trunk
-
-   # Specify the ref. This is a revision number. This is usually a decimal,
-   # but revisions on a branch are of the form
-   # <revision-branched-from>.<branch-number>.<revision-since-branching>
-   # e.g. 6622.1.6.
-   # The ref must be specified to build, and 'bst source track' will update the
-   # revision number to the one on the tip of the branch specified in 'track'.
-   ref: 6622
-
-See :ref:`built-in functionality doumentation <core_source_builtins>` for
-details on common configuration options for sources.
-"""
-
-import os
-import shutil
-import fcntl
-from contextlib import contextmanager
-
-from buildstream import Source, SourceError
-from buildstream import utils
-
-
-class BzrSource(Source):
-    # pylint: disable=attribute-defined-outside-init
-
-    def configure(self, node):
-        node.validate_keys(["url", "track", "ref", *Source.COMMON_CONFIG_KEYS])
-
-        self.original_url = node.get_str("url")
-        self.tracking = node.get_str("track")
-        self.ref = node.get_str("ref", None)
-        self.url = self.translate_url(self.original_url)
-
-    def preflight(self):
-        # Check if bzr is installed, get the binary at the same time.
-        self.host_bzr = utils.get_host_tool("bzr")
-
-    def get_unique_key(self):
-        return [self.original_url, self.tracking, self.ref]
-
-    def is_cached(self):
-        with self._locked():
-            return self._check_ref()
-
-    def load_ref(self, node):
-        self.ref = node.get_str("ref", None)
-
-    def get_ref(self):
-        return self.ref
-
-    def set_ref(self, ref, node):
-        node["ref"] = self.ref = ref
-
-    def track(self):  # pylint: disable=arguments-differ
-        with self.timed_activity("Tracking {}".format(self.url), silent_nested=True), self._locked():
-            self._ensure_mirror(skip_ref_check=True)
-            ret, out = self.check_output(
-                [self.host_bzr, "version-info", "--custom", "--template={revno}", self._get_branch_dir()],
-                fail="Failed to read the revision number at '{}'".format(self._get_branch_dir()),
-            )
-            if ret != 0:
-                raise SourceError("{}: Failed to get ref for tracking {}".format(self, self.tracking))
-
-            return out
-
-    def fetch(self):  # pylint: disable=arguments-differ
-        with self.timed_activity("Fetching {}".format(self.url), silent_nested=True), self._locked():
-            self._ensure_mirror()
-
-    def stage(self, directory):
-        self.call(
-            [
-                self.host_bzr,
-                "checkout",
-                "--lightweight",
-                "--revision=revno:{}".format(self.ref),
-                self._get_branch_dir(),
-                directory,
-            ],
-            fail="Failed to checkout revision {} from branch {} to {}".format(
-                self.ref, self._get_branch_dir(), directory
-            ),
-        )
-        # Remove .bzr dir
-        shutil.rmtree(os.path.join(directory, ".bzr"))
-
-    def init_workspace(self, directory):
-        url = os.path.join(self.url, self.tracking)
-        with self.timed_activity('Setting up workspace "{}"'.format(directory), silent_nested=True):
-            # Checkout from the cache
-            self.call(
-                [
-                    self.host_bzr,
-                    "branch",
-                    "--use-existing-dir",
-                    "--revision=revno:{}".format(self.ref),
-                    self._get_branch_dir(),
-                    directory,
-                ],
-                fail="Failed to branch revision {} from branch {} to {}".format(
-                    self.ref, self._get_branch_dir(), directory
-                ),
-            )
-            # Switch the parent branch to the source's origin
-            self.call(
-                [self.host_bzr, "switch", "--directory={}".format(directory), url],
-                fail="Failed to switch workspace's parent branch to {}".format(url),
-            )
-
-    # _locked()
-    #
-    # This context manager ensures exclusive access to the
-    # bzr repository.
-    #
-    @contextmanager
-    def _locked(self):
-        lockdir = os.path.join(self.get_mirror_directory(), "locks")
-        lockfile = os.path.join(lockdir, utils.url_directory_name(self.original_url) + ".lock")
-        os.makedirs(lockdir, exist_ok=True)
-        with open(lockfile, "w") as lock:
-            fcntl.flock(lock, fcntl.LOCK_EX)
-            try:
-                yield
-            finally:
-                fcntl.flock(lock, fcntl.LOCK_UN)
-
-    def _check_ref(self):
-        # If the mirror doesnt exist yet, then we dont have the ref
-        if not os.path.exists(self._get_branch_dir()):
-            return False
-
-        return self.call([self.host_bzr, "revno", "--revision=revno:{}".format(self.ref), self._get_branch_dir()]) == 0
-
-    def _get_branch_dir(self):
-        return os.path.join(self._get_mirror_dir(), self.tracking)
-
-    def _get_mirror_dir(self):
-        return os.path.join(self.get_mirror_directory(), utils.url_directory_name(self.original_url))
-
-    def _ensure_mirror(self, skip_ref_check=False):
-        mirror_dir = self._get_mirror_dir()
-        bzr_metadata_dir = os.path.join(mirror_dir, ".bzr")
-        if not os.path.exists(bzr_metadata_dir):
-            self.call(
-                [self.host_bzr, "init-repo", "--no-trees", mirror_dir], fail="Failed to initialize bzr repository"
-            )
-
-        branch_dir = os.path.join(mirror_dir, self.tracking)
-        branch_url = self.url + "/" + self.tracking
-        if not os.path.exists(branch_dir):
-            # `bzr branch` the branch if it doesn't exist
-            # to get the upstream code
-            self.call(
-                [self.host_bzr, "branch", branch_url, branch_dir],
-                fail="Failed to branch from {} to {}".format(branch_url, branch_dir),
-            )
-
-        else:
-            # `bzr pull` the branch if it does exist
-            # to get any changes to the upstream code
-            self.call(
-                [self.host_bzr, "pull", "--directory={}".format(branch_dir), branch_url],
-                fail="Failed to pull new changes for {}".format(branch_dir),
-            )
-
-        if not skip_ref_check and not self._check_ref():
-            raise SourceError("Failed to ensure ref '{}' was mirrored".format(self.ref), reason="ref-not-mirrored")
-
-
-def setup():
-    return BzrSource
diff --git a/src/buildstream/testing/_utils/site.py b/src/buildstream/testing/_utils/site.py
index 0dfbce2..61b9936 100644
--- a/src/buildstream/testing/_utils/site.py
+++ b/src/buildstream/testing/_utils/site.py
@@ -37,15 +37,6 @@ except ProgramNotFoundError:
     GIT_ENV = dict()
 
 try:
-    BZR = utils.get_host_tool("bzr")  # type: Optional[str]
-    HAVE_BZR = True
-    BZR_ENV = {"BZR_EMAIL": "Testy McTesterson <te...@example.com>"}
-except ProgramNotFoundError:
-    BZR = None
-    HAVE_BZR = False
-    BZR_ENV = {}
-
-try:
     utils.get_host_tool("bwrap")
     HAVE_BWRAP = True
     HAVE_BWRAP_JSON_STATUS = _site.get_bwrap_version() >= (0, 3, 2)
diff --git a/tests/cachekey/cachekey.py b/tests/cachekey/cachekey.py
index 08870f2..4e1ca20 100644
--- a/tests/cachekey/cachekey.py
+++ b/tests/cachekey/cachekey.py
@@ -45,7 +45,7 @@ import os
 import pytest
 
 from buildstream.testing.runcli import cli  # pylint: disable=unused-import
-from buildstream.testing._utils.site import HAVE_BZR, HAVE_GIT, IS_LINUX, MACHINE_ARCH
+from buildstream.testing._utils.site import HAVE_GIT, IS_LINUX, MACHINE_ARCH
 from buildstream.plugin import CoreWarnings
 from buildstream import _yaml
 
@@ -155,7 +155,6 @@ DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "project",)
 #
 @pytest.mark.skipif(MACHINE_ARCH != "x86-64", reason="Cache keys depend on architecture")
 @pytest.mark.skipif(not IS_LINUX, reason="Only available on linux")
-@pytest.mark.skipif(HAVE_BZR is False, reason="bzr is not available")
 @pytest.mark.skipif(HAVE_GIT is False, reason="git is not available")
 @pytest.mark.datafiles(DATA_DIR)
 def test_cache_key(datafiles, cli):
diff --git a/tests/cachekey/project/sources/bzr1.bst b/tests/cachekey/project/sources/bzr1.bst
deleted file mode 100644
index 4798d8a..0000000
--- a/tests/cachekey/project/sources/bzr1.bst
+++ /dev/null
@@ -1,6 +0,0 @@
-kind: import
-sources:
-- kind: bzr
-  url: https://launchpad.net/bzr
-  track: trunk
-  ref: 6622
diff --git a/tests/cachekey/project/sources/bzr1.expected b/tests/cachekey/project/sources/bzr1.expected
deleted file mode 100644
index 50eff30..0000000
--- a/tests/cachekey/project/sources/bzr1.expected
+++ /dev/null
@@ -1 +0,0 @@
-2825e2d55baa6617ec7e559ae554bb66761105a1ce50028bffdb983b6bb11707
\ No newline at end of file
diff --git a/tests/cachekey/project/target.bst b/tests/cachekey/project/target.bst
index cabf3f7..c95a0a8 100644
--- a/tests/cachekey/project/target.bst
+++ b/tests/cachekey/project/target.bst
@@ -4,7 +4,6 @@ description: |
   This is the main entry point including cases in the cache key test.
 
 depends:
-- sources/bzr1.bst
 - sources/git1.bst
 - sources/git2.bst
 - sources/git3.bst
diff --git a/tests/cachekey/project/target.expected b/tests/cachekey/project/target.expected
index cf38ddc..920ebd7 100644
--- a/tests/cachekey/project/target.expected
+++ b/tests/cachekey/project/target.expected
@@ -1 +1 @@
-a57f84353d1528b3ecbd9993ac02a20d0355f2451e19700172c95575af9a5b48
\ No newline at end of file
+42eba0ea5bada0a2f49514ac652b0f4807bb6b8d179f12d660838bd2cdc1bfe9
diff --git a/tests/conftest.py b/tests/conftest.py
index 8d33fa0..f62bec5 100755
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -31,7 +31,6 @@ from buildstream.testing.integration import integration_cache  # pylint: disable
 
 
 from tests.testutils.repo.git import Git
-from tests.testutils.repo.bzr import Bzr
 from tests.testutils.repo.tar import Tar
 from tests.testutils.repo.zip import Zip
 
@@ -111,7 +110,6 @@ def remote_services(request):
 # Setup for templated source tests              #
 #################################################
 register_repo_kind("git", Git, None)
-register_repo_kind("bzr", Bzr, None)
 register_repo_kind("tar", Tar, None)
 register_repo_kind("zip", Zip, None)
 
diff --git a/tests/frontend/workspace.py b/tests/frontend/workspace.py
index b450d18..dd054fc 100644
--- a/tests/frontend/workspace.py
+++ b/tests/frontend/workspace.py
@@ -159,23 +159,6 @@ def open_workspace(
 
 
 @pytest.mark.datafiles(DATA_DIR)
-def test_open_bzr_customize(cli, tmpdir, datafiles):
-    element_name, project, workspace = open_workspace(cli, tmpdir, datafiles, "bzr")
-
-    # Check that the .bzr dir exists
-    bzrdir = os.path.join(workspace, ".bzr")
-    assert os.path.isdir(bzrdir)
-
-    # Check that the correct origin branch is set
-    element_config = _yaml.load(os.path.join(project, "elements", element_name))
-    source_config = element_config.get_sequence("sources").mapping_at(0)
-    output = subprocess.check_output(["bzr", "info"], cwd=workspace)
-    stripped_url = source_config.get_str("url").lstrip("file:///")
-    expected_output_str = "checkout of branch: /{}/{}".format(stripped_url, source_config.get_str("track"))
-    assert expected_output_str in str(output)
-
-
-@pytest.mark.datafiles(DATA_DIR)
 def test_open_multi(cli, tmpdir, datafiles):
 
     workspace_object = WorkspaceCreator(cli, tmpdir, datafiles)
@@ -186,11 +169,8 @@ def test_open_multi(cli, tmpdir, datafiles):
         workspace_lsdir = os.listdir(workspace)
         if kind == "git":
             assert ".git" in workspace_lsdir
-        elif kind == "bzr":
-            assert ".bzr" in workspace_lsdir
         else:
             assert ".git" not in workspace_lsdir
-            assert ".bzr" not in workspace_lsdir
 
 
 @pytest.mark.skipif(os.geteuid() == 0, reason="root may have CAP_DAC_OVERRIDE and ignore permissions")
diff --git a/tests/sources/bzr.py b/tests/sources/bzr.py
deleted file mode 100644
index 2dcacfe..0000000
--- a/tests/sources/bzr.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Pylint doesn't play well with fixtures and dependency injection from pytest
-# pylint: disable=redefined-outer-name
-
-import os
-import pytest
-
-from buildstream.testing import cli  # pylint: disable=unused-import
-from buildstream.testing import create_repo
-from buildstream.testing import generate_element
-from buildstream.testing._utils.site import HAVE_BZR
-
-DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "bzr")
-
-
-@pytest.mark.skipif(HAVE_BZR is False, reason="bzr is not available")
-@pytest.mark.datafiles(os.path.join(DATA_DIR))
-def test_fetch_checkout(cli, tmpdir, datafiles):
-    project = str(datafiles)
-    checkoutdir = os.path.join(str(tmpdir), "checkout")
-
-    repo = create_repo("bzr", str(tmpdir))
-    ref = repo.create(os.path.join(project, "basic"))
-
-    # Write out our test target
-    element = {"kind": "import", "sources": [repo.source_config(ref=ref)]}
-    generate_element(project, "target.bst", element)
-
-    # Fetch, build, checkout
-    result = cli.run(project=project, args=["source", "fetch", "target.bst"])
-    assert result.exit_code == 0
-    result = cli.run(project=project, args=["build", "target.bst"])
-    assert result.exit_code == 0
-    result = cli.run(project=project, args=["artifact", "checkout", "target.bst", "--directory", checkoutdir])
-    assert result.exit_code == 0
-
-    # Assert we checked out the file as it was commited
-    with open(os.path.join(checkoutdir, "test")) as f:
-        text = f.read()
-
-    assert text == "test\n"
diff --git a/tests/sources/bzr/basic/test b/tests/sources/bzr/basic/test
deleted file mode 100644
index 9daeafb..0000000
--- a/tests/sources/bzr/basic/test
+++ /dev/null
@@ -1 +0,0 @@
-test
diff --git a/tests/sources/bzr/project.conf b/tests/sources/bzr/project.conf
deleted file mode 100644
index 08a9d60..0000000
--- a/tests/sources/bzr/project.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-# Basic Project
-name: foo
-min-version: 2.0
diff --git a/tests/testutils/repo/bzr.py b/tests/testutils/repo/bzr.py
deleted file mode 100644
index b698341..0000000
--- a/tests/testutils/repo/bzr.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import os
-import subprocess
-import pytest
-
-from buildstream.testing import Repo
-from buildstream.testing._utils.site import BZR, BZR_ENV, HAVE_BZR
-
-
-class Bzr(Repo):
-    def __init__(self, directory, subdir):
-        if not HAVE_BZR:
-            pytest.skip("bzr is not available")
-        super().__init__(directory, subdir)
-        self.bzr = BZR
-
-        self.env = os.environ.copy()
-        self.env.update(BZR_ENV)
-
-    def create(self, directory):
-        # Work around race condition in bzr's creation of ~/.bazaar in
-        # ensure_config_dir_exists() when running tests in parallel.
-        bazaar_config_dir = os.path.expanduser("~/.bazaar")
-        os.makedirs(bazaar_config_dir, exist_ok=True)
-
-        branch_dir = os.path.join(self.repo, "trunk")
-
-        subprocess.call([self.bzr, "init-repo", self.repo], env=self.env)
-        subprocess.call([self.bzr, "init", branch_dir], env=self.env)
-        self.copy_directory(directory, branch_dir)
-        subprocess.call([self.bzr, "add", "."], env=self.env, cwd=branch_dir)
-        subprocess.call([self.bzr, "commit", '--message="Initial commit"'], env=self.env, cwd=branch_dir)
-
-        return self.latest_commit()
-
-    def source_config(self, ref=None):
-        config = {"kind": "bzr", "url": "file://" + self.repo, "track": "trunk"}
-        if ref is not None:
-            config["ref"] = ref
-
-        return config
-
-    def latest_commit(self):
-        return subprocess.check_output(
-            [self.bzr, "version-info", "--custom", "--template={revno}", os.path.join(self.repo, "trunk")],
-            env=self.env,
-            universal_newlines=True,
-        ).strip()