Exemple #1
0
    def test_parse_BUILD_pom_with_change_detection(self):
        package_rel_path = "package1/package2"
        group_id = "group1"
        artifact_id = "art1"
        version = "1.2.3"
        repo_root = tempfile.mkdtemp("monorepo")
        repo_package = os.path.join(repo_root, package_rel_path)
        os.makedirs(repo_package)
        self._write_build_pom_set_change_detection_false(repo_package, artifact_id, group_id, version, "dynamic")
        art_def = buildpom.parse_maven_artifact_def(repo_root, package_rel_path)
        self.assertFalse(art_def.change_detection)

        self._write_build_pom_set_change_detection_true(repo_package, artifact_id, group_id, version, "dynamic")
        art_def = buildpom.parse_maven_artifact_def(repo_root, package_rel_path)
        self.assertTrue(art_def.change_detection)
Exemple #2
0
    def test_parse_BUILD_pom_and_BUILD_pom_released(self):
        package_rel_path = "package1/package2"
        group_id = "group1"
        artifact_id = "art1"
        version = "1.2.3"
        released_version = "1.2.2"
        released_artifact_hash = "af5fe5cac7dfcfbc500283b111ea9e37083e5862"
        repo_root = tempfile.mkdtemp("monorepo")
        repo_package = os.path.join(repo_root, package_rel_path)
        os.makedirs(repo_package)
        self._write_build_pom(repo_package, artifact_id, group_id, version, "dynamic")
        self._write_build_pom_released(repo_package, released_version, released_artifact_hash)

        art_def = buildpom.parse_maven_artifact_def(repo_root, package_rel_path)

        self.assertEqual(group_id, art_def.group_id)
        self.assertEqual(artifact_id, art_def.artifact_id)
        self.assertEqual(version, art_def.version)
        self.assertEqual([], art_def.deps)
        self.assertIs(pomgenmode.DYNAMIC, art_def.pom_generation_mode)
        self.assertEqual(None, art_def.pom_template_file)
        self.assertTrue(art_def.include_deps)
        self.assertEqual(package_rel_path, art_def.bazel_package)
        self.assertEqual(released_version, art_def.released_version)
        self.assertEqual(released_artifact_hash, art_def.released_artifact_hash)
Exemple #3
0
    def test_parse_BUILD_pom__skip_pomgen_mode(self):
        package_rel_path = "package1/package2"
        group_id = "group1"
        artifact_id = "art1"
        version = "1.2.3"
        repo_root = tempfile.mkdtemp("monorepo")
        repo_package = os.path.join(repo_root, package_rel_path)
        os.makedirs(repo_package)
        self._write_build_pom_skip_generation_mode(repo_package)

        art_def = buildpom.parse_maven_artifact_def(repo_root,
                                                    package_rel_path)

        self.assertIs(pomgenmode.SKIP, art_def.pom_generation_mode)
        self.assertEqual(None, art_def.group_id)
        self.assertEqual(None, art_def.artifact_id)
        self.assertEqual(None, art_def.version)
        self.assertEqual([], art_def.deps)
        self.assertEqual(None, art_def.custom_pom_template_content)
        self.assertTrue(art_def.include_deps)
        self.assertTrue(art_def.change_detection)
        self.assertEqual(package_rel_path, art_def.bazel_package)
        self.assertEqual(None, art_def.released_version)
        self.assertEqual(None, art_def.released_artifact_hash)
        self.assertEqual(None, art_def.version_increment_strategy)
        self.assertFalse(art_def.pom_generation_mode.produces_artifact)
Exemple #4
0
def update_released_artifact(root_path,
                             packages,
                             source_exclusions,
                             new_version=None,
                             new_artifact_hash=None,
                             use_current_artifact_hash=False):
    """
    Updates the version and/or artifact hash attributes in the 
    BUILD.pom.released files in the specified packages.

    Creates the BUILD.pom.released file if it does not exist.
    """

    for package in packages:
        path = os.path.join(root_path, package, "BUILD.pom.released")
        try:
            if use_current_artifact_hash:
                assert new_artifact_hash is None
                # we need to load the BUILD.pom file to see whether additional
                # packages are specified
                packages = [package]
                art_def = buildpom.parse_maven_artifact_def(root_path, package)
                if art_def is not None:
                    # if the BUILD.pom file doesn't exist, then by definition
                    # additional packages cannot have been specified
                    packages += art_def.additional_change_detected_packages
                artifact_hash = git.get_dir_hash(root_path, packages,
                                                 source_exclusions)
                assert artifact_hash is not None
            else:
                artifact_hash = new_artifact_hash

            content, _ = mdfiles.read_file(
                root_path, package, mdfiles.BUILD_POM_RELEASED_FILE_NAME)

            if content is not None:
                if new_version is not None:
                    content = _update_version_in_build_pom_released_content(
                        content, new_version)
                if artifact_hash is not None:
                    content = _update_artifact_hash_in_build_pom_released_content(
                        content, artifact_hash)
                mdfiles.write_file(content, root_path, package,
                                   mdfiles.BUILD_POM_RELEASED_FILE_NAME)

            else:
                if not os.path.exists(os.path.join(root_path, package)):
                    raise Exception("Bad package %s" % package)
                content = _get_build_pom_released_content(
                    new_version, artifact_hash)
                mdfiles.write_file(content, root_path, package,
                                   mdfiles.BUILD_POM_RELEASED_FILE_NAME)
        except:
            print("[ERROR] Cannot update BUILD.pom.released [%s]: %s" %
                  (path, sys.exc_info()))
            raise
Exemple #5
0
    def test_parse_BUILD_pom__template_pomgen_mode(self):
        package_rel_path = "package1/package2"
        group_id = "group1"
        artifact_id = "art1"
        version = "1.2.3"
        repo_root = tempfile.mkdtemp("monorepo")
        repo_package = os.path.join(repo_root, package_rel_path)
        os.makedirs(repo_package)
        self._write_build_pom(repo_package, artifact_id, group_id, version, pom_gen_mode="template")

        art_def = buildpom.parse_maven_artifact_def(repo_root, package_rel_path)

        self.assertIs(pomgenmode.TEMPLATE, art_def.pom_generation_mode)
Exemple #6
0
    def test_load_pom_xml_released(self):
        package_rel_path = "package1/package2"
        group_id = "group1"
        artifact_id = "art1"
        version = "1.2.3"
        repo_root = tempfile.mkdtemp("monorepo")
        repo_package = os.path.join(repo_root, package_rel_path)
        os.makedirs(repo_package)
        self._write_build_pom(repo_package, artifact_id, group_id, version, "dynamic")
        pom_content = self._write_pom_xml_released(repo_package)

        art_def = buildpom.parse_maven_artifact_def(repo_root, package_rel_path)

        # strip because loading the pom should also strip whitespace
        self.assertEqual(pom_content.strip(), art_def.released_pom_content)
Exemple #7
0
    def parse_maven_artifact_def(self, package):
        """
        Parses the Maven metadata files files in the specified package and 
        returns a MavenArtifactDef instance.

        Returns None if there is no BUILD.pom file at the specified path.
        """
        if package in self._package_to_artifact_def:
            return self._package_to_artifact_def[package]
        art_def = buildpom.parse_maven_artifact_def(self.repo_root_path, package)
        if art_def is not None:
            art_def = artifactprocessor.augment_artifact_def(self.repo_root_path, art_def, self.source_exclusions)
        # cache result, next time it is returned from cache
        self._package_to_artifact_def[package] = art_def
        return art_def
Exemple #8
0
    def test_parse_BUILD_pom__additional_change_detected_packages(self):
        package_rel_path = "package1/package2"
        group_id = "group1"
        artifact_id = "art1"
        version = "1.2.3"
        more_packages = ["//root/a/b/c", "root/d/e/f"]
        repo_root = tempfile.mkdtemp("monorepo")
        repo_package = os.path.join(repo_root, package_rel_path)
        os.makedirs(repo_package)
        self._write_build_pom_with_additional_change_detected_packages(
            repo_package,
            artifact_id,
            group_id,
            version,
            pom_gen_mode="template",
            additional_change_detected_packages=more_packages)

        art_def = buildpom.parse_maven_artifact_def(repo_root,
                                                    package_rel_path)

        self.assertEquals(art_def.additional_change_detected_packages,
                          ["root/a/b/c", "root/d/e/f"])
Exemple #9
0
        if len(packages) == 0:
            raise Exception("Did not find any BUILD.pom packages at [%s]" %
                            args.package)

    if args.list_libraries:
        all_libs = []
        for lib_path in bazel.query_all_libraries(repo_root, packages):
            attrs = OrderedDict()
            attrs["name"] = os.path.basename(lib_path)
            attrs["path"] = lib_path
            all_libs.append(attrs)
        print(_to_json(all_libs))

    if args.list_artifacts:
        maven_artifacts = [
            buildpom.parse_maven_artifact_def(repo_root, p) for p in packages
        ]
        all_artifacts = []
        if args.filter is not None:
            query = instancequery.InstanceQuery(args.filter)
            maven_artifacts = query(maven_artifacts)
        for maven_artifact in sorted(maven_artifacts,
                                     key=lambda a: a.bazel_package):
            attrs = OrderedDict()
            attrs["artifact_id"] = maven_artifact.artifact_id
            attrs["group_id"] = maven_artifact.group_id
            attrs["version"] = maven_artifact.version
            attrs["path"] = maven_artifact.bazel_package
            all_artifacts.append(attrs)
        print(_to_json(all_artifacts))