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)
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)
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)
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
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)
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)
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
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"])
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))