def control_files_in_root(tree: Tree, subpath: str) -> bool: debian_path = os.path.join(subpath, "debian") if tree.has_filename(debian_path): return False control_path = os.path.join(subpath, "control") if tree.has_filename(control_path): return True if tree.has_filename(control_path + ".in"): return True return False
def only_changes_last_changelog_block( tree: WorkingTree, basis_tree: Tree, changelog_path: str, changes ) -> bool: """Check whether the only change in a tree is to the last changelog entry. Args: tree: Tree to analyze changelog_path: Path to the changelog file changes: Changes in the tree Returns: boolean """ with tree.lock_read(), basis_tree.lock_read(): changes_seen = False for change in changes: if change.path[1] == "": continue if change.path[1] == changelog_path: changes_seen = True continue if not tree.has_versioned_directories() and is_inside( change.path[1], changelog_path ): continue return False if not changes_seen: return False try: new_cl = Changelog(tree.get_file_text(changelog_path)) except NoSuchFile: return False try: old_cl = Changelog(basis_tree.get_file_text(changelog_path)) except NoSuchFile: return True if old_cl.distributions != "UNRELEASED": return False del new_cl._blocks[0] del old_cl._blocks[0] return str(new_cl) == str(old_cl)
def changelog_changes(tree: Tree, basis_tree: Tree, cl_path: str = 'debian/changelog') -> List[str]: changes = [] for change in tree.iter_changes(basis_tree, specific_files=[cl_path]): paths = change.path changed_content = change.changed_content versioned = change.versioned kind = change.kind # Content not changed if not changed_content: return None # Not versioned in new tree if not versioned[1]: return None # Not a file in one tree if kind[0] != 'file' or kind[1] != 'file': return None old_text = basis_tree.get_file_lines(paths[0]) new_text = tree.get_file_lines(paths[1]) changes.extend(new_changelog_entries(old_text, new_text)) return changes
def control_file_present(tree: Tree, subpath: str) -> bool: """Check whether there are any control files present in a tree. Args: tree: Tree to check subpath: subpath to check Returns: whether control file is present """ for name in ["debian/control", "debian/control.in", "control", "control.in", "debian/debcargo.toml"]: name = os.path.join(subpath, name) if tree.has_filename(name): return True return False
def targeted_python_versions(tree: Tree, subpath: str) -> List[str]: with tree.get_file(os.path.join(subpath, "debian/control")) as f: control = Deb822(f) build_depends = PkgRelation.parse_relations( control.get("Build-Depends", "")) all_build_deps: Set[str] = set() for or_deps in build_depends: all_build_deps.update(or_dep["name"] for or_dep in or_deps) targeted = [] if any(x.startswith("python3-") for x in all_build_deps): targeted.append("python3") if any(x.startswith("pypy") for x in all_build_deps): targeted.append("pypy") if any(x.startswith("python-") for x in all_build_deps): targeted.append("python") return targeted
def gbp_conf_has_dch_section(tree: Tree, debian_path: str = "") -> Optional[bool]: try: gbp_conf_path = osutils.pathjoin(debian_path, "gbp.conf") gbp_conf_text = tree.get_file_text(gbp_conf_path) except NoSuchFile: return False try: import configparser except ImportError: return None else: parser = configparser.ConfigParser(defaults={}, strict=False) parser.read_string( gbp_conf_text.decode("utf-8", errors="replace"), gbp_conf_path ) return parser.has_section("dch")
def build( tree: Tree, subpath: str = "", builder: Optional[str] = None, result_dir: Optional[str] = None, ) -> None: """Build a debian package in a directory. Args: tree: Working tree subpath: Subpath to build in builder: Builder command (e.g. 'sbuild', 'debuild') result_dir: Directory to copy results to """ if builder is None: builder = DEFAULT_BUILDER # TODO(jelmer): Refactor brz-debian so it's not necessary # to call out to cmd_builddeb, but to lower-level # functions instead. cmd_builddeb().run([tree.abspath(subpath)], builder=builder, result_dir=result_dir)
def is_debcargo_package(tree: Tree, subpath: str) -> bool: control_path = os.path.join(subpath, "debian", "debcargo.toml") return tree.has_filename(control_path)