Source code for mass_driver.models.repository

"""Repositories for cloning and patching"""

from pydantic import BaseModel, BaseSettings, DirectoryPath

BranchName = str
"""A git branch name, assumed to exist remotely on the Forge"""


RepoID = str
"""A unique identifier for a repository to process"""

RepoUrl = str
"""A repo's clone URL, either git@github.com format or local filesystem path"""


[docs] class SourcedRepo(BaseModel): """A repository as-discovered, pre-cloning, along with any Sourced metadata""" clone_url: RepoUrl """The 'git clone'-able URL""" repo_id: RepoID """A unique name for the repo, to identify it against others""" upstream_branch: BranchName | None = None """A git branch to check out fro mremote, if any (defaults to None = use as-is)""" force_pull: bool = False """Pull the given branch before handing it over (useful when reusing repos)""" patch_data: dict = {} """Arbitrary data dict from Source"""
[docs] class ClonedRepo(SourcedRepo): """A repository after it has been successfully cloned, branch configured""" cloned_path: DirectoryPath """The filesystem path to the git cloned repo""" current_branch: BranchName """The name of the currently checked out branch"""
IndexedRepos = dict[RepoID, SourcedRepo] """A "list" of repositories, but indexed by repo ID (SourcedRepo.repo_id)""" IndexedClonedRepos = dict[RepoID, ClonedRepo] """A "list" of cloned repositories, but indexed by repo ID (ClonedRepo.repo_id)"""
[docs] class Source(BaseSettings): """Base class for Sources of SourcedRepo, on which to apply patching or scan"""
[docs] def discover(self) -> IndexedRepos: """Discover a list of repositories""" raise NotImplementedError("Source base class can't discover, use derived")
[docs] class Config: """Configuration of the Source class""" underscore_attrs_are_private = True """Ensure that _api is treated private""" env_prefix = "SOURCE_"