style: autoformat src and tests
Repository-wide formatting pass over src/ and tests/: sorted imports and __all__ entries, dropped redundant `# -*- coding: utf-8 -*-` headers, unquoted forward-reference annotations (safe under `from __future__ import annotations`), merged nested `with` statements, moved `Iterable` and friends from `typing` to `collections.abc`, and removed `# noqa: F401` markers that no longer suppress anything. No behavioural changes. Unit and integration suites show the same four pre-existing failures before and after the pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Top-level pkgmgr package.
|
Top-level pkgmgr package.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
# expose subpackages for patch() / resolve_name() friendliness
|
# expose subpackages for patch() / resolve_name() friendliness
|
||||||
from . import release as release # noqa: F401
|
from . import release as release
|
||||||
|
|
||||||
__all__ = ["release"]
|
__all__ = ["release"]
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
from collections.abc import Iterable
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Iterable
|
|
||||||
|
|
||||||
DEFAULT_FILENAME_PATTERN = re.compile(r"^\d{3}-[^/]+\.md$")
|
DEFAULT_FILENAME_PATTERN = re.compile(r"^\d{3}-[^/]+\.md$")
|
||||||
TEMPLATE_FILENAME = "000-template.md"
|
TEMPLATE_FILENAME = "000-template.md"
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""
|
"""
|
||||||
Public API for branch actions.
|
Public API for branch actions.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from .open_branch import open_branch
|
|
||||||
from .close_branch import close_branch
|
from .close_branch import close_branch
|
||||||
from .drop_branch import drop_branch
|
from .drop_branch import drop_branch
|
||||||
|
from .open_branch import open_branch
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"open_branch",
|
|
||||||
"close_branch",
|
"close_branch",
|
||||||
"drop_branch",
|
"drop_branch",
|
||||||
|
"open_branch",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from pkgmgr.core.git.errors import GitRunError
|
|
||||||
from pkgmgr.core.git.queries import get_current_branch
|
|
||||||
from pkgmgr.core.git.commands import (
|
from pkgmgr.core.git.commands import (
|
||||||
GitDeleteRemoteBranchError,
|
GitDeleteRemoteBranchError,
|
||||||
checkout,
|
checkout,
|
||||||
@@ -14,8 +12,8 @@ from pkgmgr.core.git.commands import (
|
|||||||
pull,
|
pull,
|
||||||
push,
|
push,
|
||||||
)
|
)
|
||||||
|
from pkgmgr.core.git.errors import GitRunError
|
||||||
from pkgmgr.core.git.queries import resolve_base_branch
|
from pkgmgr.core.git.queries import get_current_branch, resolve_base_branch
|
||||||
|
|
||||||
|
|
||||||
def close_branch(
|
def close_branch(
|
||||||
|
|||||||
@@ -2,15 +2,13 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from pkgmgr.core.git.errors import GitRunError
|
|
||||||
from pkgmgr.core.git.queries import get_current_branch
|
|
||||||
from pkgmgr.core.git.commands import (
|
from pkgmgr.core.git.commands import (
|
||||||
GitDeleteRemoteBranchError,
|
GitDeleteRemoteBranchError,
|
||||||
delete_local_branch,
|
delete_local_branch,
|
||||||
delete_remote_branch,
|
delete_remote_branch,
|
||||||
)
|
)
|
||||||
|
from pkgmgr.core.git.errors import GitRunError
|
||||||
from pkgmgr.core.git.queries import resolve_base_branch
|
from pkgmgr.core.git.queries import get_current_branch, resolve_base_branch
|
||||||
|
|
||||||
|
|
||||||
def drop_branch(
|
def drop_branch(
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Helpers to generate changelog information from Git history.
|
Helpers to generate changelog information from Git history.
|
||||||
@@ -10,8 +9,8 @@ from __future__ import annotations
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from pkgmgr.core.git.queries import (
|
from pkgmgr.core.git.queries import (
|
||||||
get_changelog,
|
|
||||||
GitChangelogQueryError,
|
GitChangelogQueryError,
|
||||||
|
get_changelog,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class CodeScanningResult:
|
|||||||
files: List[str] = field(default_factory=list)
|
files: List[str] = field(default_factory=list)
|
||||||
|
|
||||||
|
|
||||||
def _gh(args: List[str]) -> "subprocess.CompletedProcess[str]":
|
def _gh(args: List[str]) -> subprocess.CompletedProcess[str]:
|
||||||
return subprocess.run(["gh", *args], capture_output=True, text=True)
|
return subprocess.run(["gh", *args], capture_output=True, text=True)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import yaml
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
|
||||||
from pkgmgr.core.config.save import save_user_config
|
from pkgmgr.core.config.save import save_user_config
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Initialize user configuration by scanning the repositories base directory.
|
Initialize user configuration by scanning the repositories base directory.
|
||||||
@@ -55,7 +54,7 @@ def config_init(
|
|||||||
|
|
||||||
print("[INIT] Scanning repository base directory:")
|
print("[INIT] Scanning repository base directory:")
|
||||||
print(f" {repositories_base_dir}")
|
print(f" {repositories_base_dir}")
|
||||||
print("")
|
print()
|
||||||
|
|
||||||
if not os.path.isdir(repositories_base_dir):
|
if not os.path.isdir(repositories_base_dir):
|
||||||
print(f"[ERROR] Base directory does not exist: {repositories_base_dir}")
|
print(f"[ERROR] Base directory does not exist: {repositories_base_dir}")
|
||||||
@@ -153,7 +152,7 @@ def config_init(
|
|||||||
|
|
||||||
new_entries.append(entry)
|
new_entries.append(entry)
|
||||||
|
|
||||||
print("") # blank line between accounts
|
print() # blank line between accounts
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
# Summary
|
# Summary
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from pkgmgr.core.config.load import load_config
|
from pkgmgr.core.config.load import load_config
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,24 +18,24 @@ from __future__ import annotations
|
|||||||
import os
|
import os
|
||||||
from typing import Any, Dict, List, Optional, Tuple
|
from typing import Any, Dict, List, Optional, Tuple
|
||||||
|
|
||||||
from pkgmgr.core.repository.identifier import get_repo_identifier
|
|
||||||
from pkgmgr.core.repository.dir import get_repo_dir
|
|
||||||
from pkgmgr.core.repository.verify import verify_repository
|
|
||||||
from pkgmgr.actions.repository.clone import clone_repos
|
|
||||||
from pkgmgr.actions.install.context import RepoContext
|
from pkgmgr.actions.install.context import RepoContext
|
||||||
|
from pkgmgr.actions.install.installers.makefile import (
|
||||||
|
MakefileInstaller,
|
||||||
|
)
|
||||||
|
from pkgmgr.actions.install.installers.nix import (
|
||||||
|
NixFlakeInstaller,
|
||||||
|
)
|
||||||
from pkgmgr.actions.install.installers.os_packages import (
|
from pkgmgr.actions.install.installers.os_packages import (
|
||||||
ArchPkgbuildInstaller,
|
ArchPkgbuildInstaller,
|
||||||
DebianControlInstaller,
|
DebianControlInstaller,
|
||||||
RpmSpecInstaller,
|
RpmSpecInstaller,
|
||||||
)
|
)
|
||||||
from pkgmgr.actions.install.installers.nix import (
|
|
||||||
NixFlakeInstaller,
|
|
||||||
)
|
|
||||||
from pkgmgr.actions.install.installers.python import PythonInstaller
|
from pkgmgr.actions.install.installers.python import PythonInstaller
|
||||||
from pkgmgr.actions.install.installers.makefile import (
|
|
||||||
MakefileInstaller,
|
|
||||||
)
|
|
||||||
from pkgmgr.actions.install.pipeline import InstallationPipeline
|
from pkgmgr.actions.install.pipeline import InstallationPipeline
|
||||||
|
from pkgmgr.actions.repository.clone import clone_repos
|
||||||
|
from pkgmgr.core.repository.dir import get_repo_dir
|
||||||
|
from pkgmgr.core.repository.identifier import get_repo_identifier
|
||||||
|
from pkgmgr.core.repository.verify import verify_repository
|
||||||
|
|
||||||
Repository = Dict[str, Any]
|
Repository = Dict[str, Any]
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Capability detection for pkgmgr.
|
Capability detection for pkgmgr.
|
||||||
@@ -35,7 +34,8 @@ from __future__ import annotations
|
|||||||
import glob
|
import glob
|
||||||
import os
|
import os
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from typing import Iterable, TYPE_CHECKING, Optional
|
from collections.abc import Iterable
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from pkgmgr.actions.install.context import RepoContext
|
from pkgmgr.actions.install.context import RepoContext
|
||||||
@@ -100,7 +100,7 @@ class CapabilityMatcher(ABC):
|
|||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def is_provided(self, ctx: "RepoContext", layer: str) -> bool:
|
def is_provided(self, ctx: RepoContext, layer: str) -> bool:
|
||||||
"""
|
"""
|
||||||
Return True if this capability is actually provided by the given layer
|
Return True if this capability is actually provided by the given layer
|
||||||
for this repository.
|
for this repository.
|
||||||
@@ -133,7 +133,7 @@ class PythonRuntimeCapability(CapabilityMatcher):
|
|||||||
# OS packages may wrap Python builds, but must explicitly prove it
|
# OS packages may wrap Python builds, but must explicitly prove it
|
||||||
return layer in {"python", "nix", "os-packages"}
|
return layer in {"python", "nix", "os-packages"}
|
||||||
|
|
||||||
def is_provided(self, ctx: "RepoContext", layer: str) -> bool:
|
def is_provided(self, ctx: RepoContext, layer: str) -> bool:
|
||||||
repo_dir = ctx.repo_dir
|
repo_dir = ctx.repo_dir
|
||||||
|
|
||||||
if layer == "python":
|
if layer == "python":
|
||||||
@@ -208,7 +208,7 @@ class MakeInstallCapability(CapabilityMatcher):
|
|||||||
def applies_to_layer(self, layer: str) -> bool:
|
def applies_to_layer(self, layer: str) -> bool:
|
||||||
return layer in {"makefile", "python", "nix", "os-packages"}
|
return layer in {"makefile", "python", "nix", "os-packages"}
|
||||||
|
|
||||||
def is_provided(self, ctx: "RepoContext", layer: str) -> bool:
|
def is_provided(self, ctx: RepoContext, layer: str) -> bool:
|
||||||
repo_dir = ctx.repo_dir
|
repo_dir = ctx.repo_dir
|
||||||
|
|
||||||
if layer == "makefile":
|
if layer == "makefile":
|
||||||
@@ -274,7 +274,7 @@ class NixFlakeCapability(CapabilityMatcher):
|
|||||||
# Only Nix itself and OS packages that explicitly wrap Nix
|
# Only Nix itself and OS packages that explicitly wrap Nix
|
||||||
return layer in {"nix", "os-packages"}
|
return layer in {"nix", "os-packages"}
|
||||||
|
|
||||||
def is_provided(self, ctx: "RepoContext", layer: str) -> bool:
|
def is_provided(self, ctx: RepoContext, layer: str) -> bool:
|
||||||
repo_dir = ctx.repo_dir
|
repo_dir = ctx.repo_dir
|
||||||
|
|
||||||
if layer == "nix":
|
if layer == "nix":
|
||||||
@@ -328,7 +328,7 @@ LAYER_ORDER: list[str] = [
|
|||||||
|
|
||||||
|
|
||||||
def detect_capabilities(
|
def detect_capabilities(
|
||||||
ctx: "RepoContext",
|
ctx: RepoContext,
|
||||||
layers: Iterable[str],
|
layers: Iterable[str],
|
||||||
) -> dict[str, set[str]]:
|
) -> dict[str, set[str]]:
|
||||||
"""
|
"""
|
||||||
@@ -359,7 +359,7 @@ def detect_capabilities(
|
|||||||
|
|
||||||
|
|
||||||
def resolve_effective_capabilities(
|
def resolve_effective_capabilities(
|
||||||
ctx: "RepoContext",
|
ctx: RepoContext,
|
||||||
layers: Optional[Iterable[str]] = None,
|
layers: Optional[Iterable[str]] = None,
|
||||||
) -> dict[str, set[str]]:
|
) -> dict[str, set[str]]:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Installer package for pkgmgr.
|
Installer package for pkgmgr.
|
||||||
@@ -9,15 +8,17 @@ pkgmgr.actions.install.installers.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from pkgmgr.actions.install.installers.base import BaseInstaller # noqa: F401
|
from pkgmgr.actions.install.installers.base import BaseInstaller # noqa: F401
|
||||||
from pkgmgr.actions.install.installers.nix import NixFlakeInstaller # noqa: F401
|
|
||||||
from pkgmgr.actions.install.installers.python import PythonInstaller # noqa: F401
|
|
||||||
from pkgmgr.actions.install.installers.makefile import MakefileInstaller # noqa: F401
|
from pkgmgr.actions.install.installers.makefile import MakefileInstaller # noqa: F401
|
||||||
|
from pkgmgr.actions.install.installers.nix import NixFlakeInstaller # noqa: F401
|
||||||
|
|
||||||
# OS-specific installers
|
# OS-specific installers
|
||||||
from pkgmgr.actions.install.installers.os_packages.arch_pkgbuild import (
|
from pkgmgr.actions.install.installers.os_packages.arch_pkgbuild import (
|
||||||
ArchPkgbuildInstaller as ArchPkgbuildInstaller,
|
ArchPkgbuildInstaller as ArchPkgbuildInstaller,
|
||||||
) # noqa: F401
|
)
|
||||||
from pkgmgr.actions.install.installers.os_packages.debian_control import (
|
from pkgmgr.actions.install.installers.os_packages.debian_control import (
|
||||||
DebianControlInstaller as DebianControlInstaller,
|
DebianControlInstaller as DebianControlInstaller,
|
||||||
) # noqa: F401
|
)
|
||||||
from pkgmgr.actions.install.installers.os_packages.rpm_spec import RpmSpecInstaller # noqa: F401
|
from pkgmgr.actions.install.installers.os_packages.rpm_spec import (
|
||||||
|
RpmSpecInstaller, # noqa: F401
|
||||||
|
)
|
||||||
|
from pkgmgr.actions.install.installers.python import PythonInstaller # noqa: F401
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Base interface for all installer components in the pkgmgr installation pipeline.
|
Base interface for all installer components in the pkgmgr installation pipeline.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from typing import Set, Optional
|
from typing import Optional, Set
|
||||||
|
|
||||||
from pkgmgr.actions.install.context import RepoContext
|
|
||||||
from pkgmgr.actions.install.capabilities import CAPABILITY_MATCHERS
|
from pkgmgr.actions.install.capabilities import CAPABILITY_MATCHERS
|
||||||
|
from pkgmgr.actions.install.context import RepoContext
|
||||||
|
|
||||||
|
|
||||||
class BaseInstaller(ABC):
|
class BaseInstaller(ABC):
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class NixConflictResolver:
|
|||||||
|
|
||||||
def resolve(
|
def resolve(
|
||||||
self,
|
self,
|
||||||
ctx: "RepoContext",
|
ctx: RepoContext,
|
||||||
install_cmd: str,
|
install_cmd: str,
|
||||||
stdout: str,
|
stdout: str,
|
||||||
stderr: str,
|
stderr: str,
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class NixFlakeInstaller(BaseInstaller):
|
|||||||
# Newer nix rejects numeric indices; we learn this at runtime and cache the decision.
|
# Newer nix rejects numeric indices; we learn this at runtime and cache the decision.
|
||||||
self._indices_supported: bool | None = None
|
self._indices_supported: bool | None = None
|
||||||
|
|
||||||
def supports(self, ctx: "RepoContext") -> bool:
|
def supports(self, ctx: RepoContext) -> bool:
|
||||||
if os.environ.get("PKGMGR_DISABLE_NIX_FLAKE_INSTALLER") == "1":
|
if os.environ.get("PKGMGR_DISABLE_NIX_FLAKE_INSTALLER") == "1":
|
||||||
if not ctx.quiet:
|
if not ctx.quiet:
|
||||||
print(
|
print(
|
||||||
@@ -42,13 +42,13 @@ class NixFlakeInstaller(BaseInstaller):
|
|||||||
|
|
||||||
return os.path.exists(os.path.join(ctx.repo_dir, self.FLAKE_FILE))
|
return os.path.exists(os.path.join(ctx.repo_dir, self.FLAKE_FILE))
|
||||||
|
|
||||||
def _profile_outputs(self, ctx: "RepoContext") -> List[Tuple[str, bool]]:
|
def _profile_outputs(self, ctx: RepoContext) -> List[Tuple[str, bool]]:
|
||||||
# (output_name, allow_failure)
|
# (output_name, allow_failure)
|
||||||
if ctx.identifier in {"pkgmgr", "package-manager"}:
|
if ctx.identifier in {"pkgmgr", "package-manager"}:
|
||||||
return [("pkgmgr", False), ("default", True)]
|
return [("pkgmgr", False), ("default", True)]
|
||||||
return [("default", False)]
|
return [("default", False)]
|
||||||
|
|
||||||
def run(self, ctx: "RepoContext") -> None:
|
def run(self, ctx: RepoContext) -> None:
|
||||||
if not self.supports(ctx):
|
if not self.supports(ctx):
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ class NixFlakeInstaller(BaseInstaller):
|
|||||||
else:
|
else:
|
||||||
self._install_only(ctx, output, allow_failure)
|
self._install_only(ctx, output, allow_failure)
|
||||||
|
|
||||||
def _installable(self, ctx: "RepoContext", output: str) -> str:
|
def _installable(self, ctx: RepoContext, output: str) -> str:
|
||||||
return f"{ctx.repo_dir}#{output}"
|
return f"{ctx.repo_dir}#{output}"
|
||||||
|
|
||||||
# ---------------------------------------------------------------------
|
# ---------------------------------------------------------------------
|
||||||
@@ -76,7 +76,7 @@ class NixFlakeInstaller(BaseInstaller):
|
|||||||
# ---------------------------------------------------------------------
|
# ---------------------------------------------------------------------
|
||||||
|
|
||||||
def _install_only(
|
def _install_only(
|
||||||
self, ctx: "RepoContext", output: str, allow_failure: bool
|
self, ctx: RepoContext, output: str, allow_failure: bool
|
||||||
) -> None:
|
) -> None:
|
||||||
install_cmd = f"nix profile install {self._installable(ctx, output)}"
|
install_cmd = f"nix profile install {self._installable(ctx, output)}"
|
||||||
|
|
||||||
@@ -162,7 +162,7 @@ class NixFlakeInstaller(BaseInstaller):
|
|||||||
# ---------------------------------------------------------------------
|
# ---------------------------------------------------------------------
|
||||||
|
|
||||||
def _force_upgrade_output(
|
def _force_upgrade_output(
|
||||||
self, ctx: "RepoContext", output: str, allow_failure: bool
|
self, ctx: RepoContext, output: str, allow_failure: bool
|
||||||
) -> None:
|
) -> None:
|
||||||
# Prefer token path if indices unsupported (new nix)
|
# Prefer token path if indices unsupported (new nix)
|
||||||
if self._indices_supported is False:
|
if self._indices_supported is False:
|
||||||
@@ -215,7 +215,7 @@ class NixFlakeInstaller(BaseInstaller):
|
|||||||
s = (stderr or "").lower()
|
s = (stderr or "").lower()
|
||||||
return "no longer supports indices" in s or "does not support indices" in s
|
return "no longer supports indices" in s or "does not support indices" in s
|
||||||
|
|
||||||
def _upgrade_index(self, ctx: "RepoContext", idx: int) -> bool:
|
def _upgrade_index(self, ctx: RepoContext, idx: int) -> bool:
|
||||||
cmd = f"nix profile upgrade --refresh {idx}"
|
cmd = f"nix profile upgrade --refresh {idx}"
|
||||||
res = self._runner.run(ctx, cmd, allow_failure=True)
|
res = self._runner.run(ctx, cmd, allow_failure=True)
|
||||||
|
|
||||||
@@ -228,7 +228,7 @@ class NixFlakeInstaller(BaseInstaller):
|
|||||||
|
|
||||||
return res.returncode == 0
|
return res.returncode == 0
|
||||||
|
|
||||||
def _remove_index(self, ctx: "RepoContext", idx: int) -> None:
|
def _remove_index(self, ctx: RepoContext, idx: int) -> None:
|
||||||
res = self._runner.run(ctx, f"nix profile remove {idx}", allow_failure=True)
|
res = self._runner.run(ctx, f"nix profile remove {idx}", allow_failure=True)
|
||||||
|
|
||||||
if self._stderr_says_indices_unsupported(getattr(res, "stderr", "")):
|
if self._stderr_says_indices_unsupported(getattr(res, "stderr", "")):
|
||||||
@@ -237,7 +237,7 @@ class NixFlakeInstaller(BaseInstaller):
|
|||||||
if self._indices_supported is None:
|
if self._indices_supported is None:
|
||||||
self._indices_supported = True
|
self._indices_supported = True
|
||||||
|
|
||||||
def _remove_tokens_for_output(self, ctx: "RepoContext", output: str) -> None:
|
def _remove_tokens_for_output(self, ctx: RepoContext, output: str) -> None:
|
||||||
tokens = self._profile.find_remove_tokens_for_output(ctx, self._runner, output)
|
tokens = self._profile.find_remove_tokens_for_output(ctx, self._runner, output)
|
||||||
if not tokens:
|
if not tokens:
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from .inspector import NixProfileInspector
|
from .inspector import NixProfileInspector
|
||||||
from .models import NixProfileEntry
|
from .models import NixProfileEntry
|
||||||
|
|
||||||
__all__ = ["NixProfileInspector", "NixProfileEntry"]
|
__all__ = ["NixProfileEntry", "NixProfileInspector"]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import Any, List, TYPE_CHECKING
|
from typing import TYPE_CHECKING, Any, List
|
||||||
|
|
||||||
from .matcher import (
|
from .matcher import (
|
||||||
entry_matches_output,
|
entry_matches_output,
|
||||||
@@ -29,7 +29,7 @@ class NixProfileInspector:
|
|||||||
- find_remove_tokens_for_store_prefixes()
|
- find_remove_tokens_for_store_prefixes()
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def list_json(self, ctx: "RepoContext", runner: "CommandRunner") -> dict[str, Any]:
|
def list_json(self, ctx: RepoContext, runner: CommandRunner) -> dict[str, Any]:
|
||||||
res = runner.run(ctx, "nix profile list --json", allow_failure=False)
|
res = runner.run(ctx, "nix profile list --json", allow_failure=False)
|
||||||
raw = extract_stdout_text(res)
|
raw = extract_stdout_text(res)
|
||||||
return parse_profile_list_json(raw)
|
return parse_profile_list_json(raw)
|
||||||
@@ -40,8 +40,8 @@ class NixProfileInspector:
|
|||||||
|
|
||||||
def find_installed_indices_for_output(
|
def find_installed_indices_for_output(
|
||||||
self,
|
self,
|
||||||
ctx: "RepoContext",
|
ctx: RepoContext,
|
||||||
runner: "CommandRunner",
|
runner: CommandRunner,
|
||||||
output: str,
|
output: str,
|
||||||
) -> List[int]:
|
) -> List[int]:
|
||||||
data = self.list_json(ctx, runner)
|
data = self.list_json(ctx, runner)
|
||||||
@@ -58,8 +58,8 @@ class NixProfileInspector:
|
|||||||
|
|
||||||
def find_indices_by_store_path(
|
def find_indices_by_store_path(
|
||||||
self,
|
self,
|
||||||
ctx: "RepoContext",
|
ctx: RepoContext,
|
||||||
runner: "CommandRunner",
|
runner: CommandRunner,
|
||||||
store_path: str,
|
store_path: str,
|
||||||
) -> List[int]:
|
) -> List[int]:
|
||||||
needle = (store_path or "").strip()
|
needle = (store_path or "").strip()
|
||||||
@@ -84,8 +84,8 @@ class NixProfileInspector:
|
|||||||
|
|
||||||
def find_remove_tokens_for_output(
|
def find_remove_tokens_for_output(
|
||||||
self,
|
self,
|
||||||
ctx: "RepoContext",
|
ctx: RepoContext,
|
||||||
runner: "CommandRunner",
|
runner: CommandRunner,
|
||||||
output: str,
|
output: str,
|
||||||
) -> List[str]:
|
) -> List[str]:
|
||||||
"""
|
"""
|
||||||
@@ -128,8 +128,8 @@ class NixProfileInspector:
|
|||||||
|
|
||||||
def find_remove_tokens_for_store_prefixes(
|
def find_remove_tokens_for_store_prefixes(
|
||||||
self,
|
self,
|
||||||
ctx: "RepoContext",
|
ctx: RepoContext,
|
||||||
runner: "CommandRunner",
|
runner: CommandRunner,
|
||||||
prefixes: List[str],
|
prefixes: List[str],
|
||||||
) -> List[str]:
|
) -> List[str]:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import re
|
import re
|
||||||
from typing import Any, Dict, Iterable, List, Optional
|
from collections.abc import Iterable
|
||||||
|
from typing import Any, Dict, List, Optional
|
||||||
|
|
||||||
from .models import NixProfileEntry
|
from .models import NixProfileEntry
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class NixProfileListReader:
|
|||||||
m = re.match(r"^(/nix/store/[0-9a-z]{32}-[^/ \t]+)", raw)
|
m = re.match(r"^(/nix/store/[0-9a-z]{32}-[^/ \t]+)", raw)
|
||||||
return m.group(1) if m else raw
|
return m.group(1) if m else raw
|
||||||
|
|
||||||
def entries(self, ctx: "RepoContext") -> List[Tuple[int, str]]:
|
def entries(self, ctx: RepoContext) -> List[Tuple[int, str]]:
|
||||||
res = self._runner.run(ctx, "nix profile list", allow_failure=True)
|
res = self._runner.run(ctx, "nix profile list", allow_failure=True)
|
||||||
if res.returncode != 0:
|
if res.returncode != 0:
|
||||||
return []
|
return []
|
||||||
@@ -49,7 +49,7 @@ class NixProfileListReader:
|
|||||||
return uniq
|
return uniq
|
||||||
|
|
||||||
def indices_matching_store_prefixes(
|
def indices_matching_store_prefixes(
|
||||||
self, ctx: "RepoContext", prefixes: List[str]
|
self, ctx: RepoContext, prefixes: List[str]
|
||||||
) -> List[int]:
|
) -> List[int]:
|
||||||
prefixes = [self._store_prefix(p) for p in prefixes if p]
|
prefixes = [self._store_prefix(p) for p in prefixes if p]
|
||||||
prefixes = [p for p in prefixes if p]
|
prefixes = [p for p in prefixes if p]
|
||||||
|
|||||||
@@ -2,13 +2,15 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
|
from collections.abc import Iterable
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Iterable, TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from .types import RunResult
|
from .types import RunResult
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from pkgmgr.actions.install.context import RepoContext
|
from pkgmgr.actions.install.context import RepoContext
|
||||||
|
|
||||||
from .runner import CommandRunner
|
from .runner import CommandRunner
|
||||||
|
|
||||||
|
|
||||||
@@ -31,8 +33,8 @@ class GitHubRateLimitRetry:
|
|||||||
|
|
||||||
def run_with_retry(
|
def run_with_retry(
|
||||||
self,
|
self,
|
||||||
ctx: "RepoContext",
|
ctx: RepoContext,
|
||||||
runner: "CommandRunner",
|
runner: CommandRunner,
|
||||||
install_cmd: str,
|
install_cmd: str,
|
||||||
) -> RunResult:
|
) -> RunResult:
|
||||||
quiet = bool(getattr(ctx, "quiet", False))
|
quiet = bool(getattr(ctx, "quiet", False))
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from .types import RunResult
|
from .types import RunResult
|
||||||
@@ -16,7 +15,7 @@ class CommandRunner:
|
|||||||
Supports preview mode and compact failure output logging.
|
Supports preview mode and compact failure output logging.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def run(self, ctx: "RepoContext", cmd: str, allow_failure: bool) -> RunResult:
|
def run(self, ctx: RepoContext, cmd: str, allow_failure: bool) -> RunResult:
|
||||||
repo_dir = getattr(ctx, "repo_dir", None) or getattr(ctx, "repo_path", None)
|
repo_dir = getattr(ctx, "repo_dir", None) or getattr(ctx, "repo_path", None)
|
||||||
preview = bool(getattr(ctx, "preview", False))
|
preview = bool(getattr(ctx, "preview", False))
|
||||||
quiet = bool(getattr(ctx, "quiet", False))
|
quiet = bool(getattr(ctx, "quiet", False))
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Installer for Debian/Ubuntu packages defined via debian/control.
|
Installer for Debian/Ubuntu packages defined via debian/control.
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Installer for RPM-based packages defined in *.spec files.
|
Installer for RPM-based packages defined in *.spec files.
|
||||||
@@ -202,9 +201,7 @@ class RpmSpecInstaller(BaseInstaller):
|
|||||||
|
|
||||||
if shutil.which("dnf") is not None:
|
if shutil.which("dnf") is not None:
|
||||||
cmd = f"sudo dnf builddep -y {spec_basename}"
|
cmd = f"sudo dnf builddep -y {spec_basename}"
|
||||||
elif shutil.which("yum-builddep") is not None:
|
elif shutil.which("yum-builddep") is not None or shutil.which("yum") is not None:
|
||||||
cmd = f"sudo yum-builddep -y {spec_basename}"
|
|
||||||
elif shutil.which("yum") is not None:
|
|
||||||
cmd = f"sudo yum-builddep -y {spec_basename}"
|
cmd = f"sudo yum-builddep -y {spec_basename}"
|
||||||
else:
|
else:
|
||||||
print(
|
print(
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ from __future__ import annotations
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from pkgmgr.actions.install.installers.base import BaseInstaller
|
|
||||||
from pkgmgr.actions.install.context import RepoContext
|
from pkgmgr.actions.install.context import RepoContext
|
||||||
|
from pkgmgr.actions.install.installers.base import BaseInstaller
|
||||||
from pkgmgr.core.command.run import run_command
|
from pkgmgr.core.command.run import run_command
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
CLI layer model for the pkgmgr installation pipeline.
|
CLI layer model for the pkgmgr installation pipeline.
|
||||||
|
|||||||
@@ -8,8 +8,9 @@ Installation pipeline orchestration for repositories.
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from collections.abc import Sequence
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Optional, Sequence, Set
|
from typing import Optional, Set
|
||||||
|
|
||||||
from pkgmgr.actions.install.context import RepoContext
|
from pkgmgr.actions.install.context import RepoContext
|
||||||
from pkgmgr.actions.install.installers.base import BaseInstaller
|
from pkgmgr.actions.install.installers.base import BaseInstaller
|
||||||
|
|||||||
@@ -9,19 +9,20 @@ Public API:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
from .types import Repository, MirrorMap
|
|
||||||
from .list_cmd import list_mirrors
|
|
||||||
from .diff_cmd import diff_mirrors
|
from .diff_cmd import diff_mirrors
|
||||||
|
from .list_cmd import list_mirrors
|
||||||
from .merge_cmd import merge_mirrors
|
from .merge_cmd import merge_mirrors
|
||||||
from .setup_cmd import setup_mirrors
|
from .setup_cmd import setup_mirrors
|
||||||
|
from .types import MirrorMap, Repository
|
||||||
from .visibility_cmd import set_mirror_visibility
|
from .visibility_cmd import set_mirror_visibility
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"Repository",
|
|
||||||
"MirrorMap",
|
"MirrorMap",
|
||||||
"list_mirrors",
|
"Repository",
|
||||||
"diff_mirrors",
|
"diff_mirrors",
|
||||||
|
"list_mirrors",
|
||||||
"merge_mirrors",
|
"merge_mirrors",
|
||||||
"setup_mirrors",
|
|
||||||
"set_mirror_visibility",
|
"set_mirror_visibility",
|
||||||
|
"setup_mirrors",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|||||||
import os
|
import os
|
||||||
from typing import Optional, Set
|
from typing import Optional, Set
|
||||||
|
|
||||||
from pkgmgr.core.git.errors import GitRunError
|
|
||||||
from pkgmgr.core.git.commands import (
|
from pkgmgr.core.git.commands import (
|
||||||
GitAddRemoteError,
|
GitAddRemoteError,
|
||||||
GitAddRemotePushUrlError,
|
GitAddRemotePushUrlError,
|
||||||
@@ -12,6 +11,7 @@ from pkgmgr.core.git.commands import (
|
|||||||
add_remote_push_url,
|
add_remote_push_url,
|
||||||
set_remote_url,
|
set_remote_url,
|
||||||
)
|
)
|
||||||
|
from pkgmgr.core.git.errors import GitRunError
|
||||||
from pkgmgr.core.git.queries import get_remote_push_urls, list_remotes
|
from pkgmgr.core.git.queries import get_remote_push_urls, list_remotes
|
||||||
|
|
||||||
from .types import MirrorMap, RepoMirrorContext, Repository
|
from .types import MirrorMap, RepoMirrorContext, Repository
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from typing import Dict, List, Tuple, Optional
|
from typing import Dict, List, Optional, Tuple
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
@@ -11,7 +11,6 @@ from .context import build_context
|
|||||||
from .io import write_mirrors_file
|
from .io import write_mirrors_file
|
||||||
from .types import MirrorMap, Repository
|
from .types import MirrorMap, Repository
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# Helpers
|
# Helpers
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# src/pkgmgr/actions/mirror/url_utils.py
|
# src/pkgmgr/actions/mirror/url_utils.py
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from urllib.parse import urlparse
|
|
||||||
from typing import Optional, Tuple
|
from typing import Optional, Tuple
|
||||||
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
|
|
||||||
def hostport_from_git_url(url: str) -> Tuple[str, Optional[str]]:
|
def hostport_from_git_url(url: str) -> Tuple[str, Optional[str]]:
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import os
|
import os
|
||||||
from pkgmgr.core.repository.identifier import get_repo_identifier
|
|
||||||
from pkgmgr.core.repository.dir import get_repo_dir
|
|
||||||
from pkgmgr.core.command.run import run_command
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from pkgmgr.core.command.run import run_command
|
||||||
|
from pkgmgr.core.repository.dir import get_repo_dir
|
||||||
|
from pkgmgr.core.repository.identifier import get_repo_identifier
|
||||||
|
|
||||||
|
|
||||||
def exec_proxy_command(
|
def exec_proxy_command(
|
||||||
proxy_prefix: str,
|
proxy_prefix: str,
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Backwards-compatible facade for the release file update helpers.
|
Backwards-compatible facade for the release file update helpers.
|
||||||
@@ -13,23 +12,23 @@ Keep this package stable so existing imports continue to work, e.g.:
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from .editor import _open_editor_for_changelog
|
|
||||||
from .pyproject import update_pyproject_version
|
|
||||||
from .flake import update_flake_version
|
|
||||||
from .pkgbuild import update_pkgbuild_version
|
|
||||||
from .rpm_spec import update_spec_version
|
|
||||||
from .changelog_md import update_changelog
|
from .changelog_md import update_changelog
|
||||||
from .debian import _get_debian_author, update_debian_changelog
|
from .debian import _get_debian_author, update_debian_changelog
|
||||||
|
from .editor import _open_editor_for_changelog
|
||||||
|
from .flake import update_flake_version
|
||||||
|
from .pkgbuild import update_pkgbuild_version
|
||||||
|
from .pyproject import update_pyproject_version
|
||||||
from .rpm_changelog import update_spec_changelog
|
from .rpm_changelog import update_spec_changelog
|
||||||
|
from .rpm_spec import update_spec_version
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
"_get_debian_author",
|
||||||
"_open_editor_for_changelog",
|
"_open_editor_for_changelog",
|
||||||
"update_pyproject_version",
|
"update_changelog",
|
||||||
|
"update_debian_changelog",
|
||||||
"update_flake_version",
|
"update_flake_version",
|
||||||
"update_pkgbuild_version",
|
"update_pkgbuild_version",
|
||||||
"update_spec_version",
|
"update_pyproject_version",
|
||||||
"update_changelog",
|
|
||||||
"_get_debian_author",
|
|
||||||
"update_debian_changelog",
|
|
||||||
"update_spec_changelog",
|
"update_spec_changelog",
|
||||||
|
"update_spec_version",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ from typing import Optional
|
|||||||
|
|
||||||
from pkgmgr.core.repository.paths import RepoPaths
|
from pkgmgr.core.repository.paths import RepoPaths
|
||||||
|
|
||||||
|
|
||||||
_DEBIAN_PACKAGE_RE = re.compile(r"^Package:\s*(\S+)\s*$", re.MULTILINE)
|
_DEBIAN_PACKAGE_RE = re.compile(r"^Package:\s*(\S+)\s*$", re.MULTILINE)
|
||||||
_PKGBUILD_NAME_RE = re.compile(r"^pkgname=([^\s#]+)\s*$", re.MULTILINE)
|
_PKGBUILD_NAME_RE = re.compile(r"^pkgname=([^\s#]+)\s*$", re.MULTILINE)
|
||||||
_RPM_NAME_RE = re.compile(r"^Name:\s*(\S+)\s*$", re.MULTILINE)
|
_RPM_NAME_RE = re.compile(r"^Name:\s*(\S+)\s*$", re.MULTILINE)
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Version discovery and bumping helpers for the release workflow.
|
Version discovery and bumping helpers for the release workflow.
|
||||||
@@ -10,10 +9,10 @@ from __future__ import annotations
|
|||||||
from pkgmgr.core.git.queries import get_tags
|
from pkgmgr.core.git.queries import get_tags
|
||||||
from pkgmgr.core.version.semver import (
|
from pkgmgr.core.version.semver import (
|
||||||
SemVer,
|
SemVer,
|
||||||
find_latest_version,
|
|
||||||
bump_major,
|
bump_major,
|
||||||
bump_minor,
|
bump_minor,
|
||||||
bump_patch,
|
bump_patch,
|
||||||
|
find_latest_version,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ from __future__ import annotations
|
|||||||
import os
|
import os
|
||||||
from typing import Any, Dict, List, Optional
|
from typing import Any, Dict, List, Optional
|
||||||
|
|
||||||
from pkgmgr.core.git.commands import clone as git_clone, GitCloneError
|
from pkgmgr.core.git.commands import GitCloneError
|
||||||
|
from pkgmgr.core.git.commands import clone as git_clone
|
||||||
from pkgmgr.core.repository.dir import get_repo_dir
|
from pkgmgr.core.repository.dir import get_repo_dir
|
||||||
from pkgmgr.core.repository.identifier import get_repo_identifier
|
from pkgmgr.core.repository.identifier import get_repo_identifier
|
||||||
from pkgmgr.core.repository.verify import verify_repository
|
from pkgmgr.core.repository.verify import verify_repository
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from typing import Dict, Any, Set
|
from typing import Any, Dict, Set
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ def _split_host_port(host: str) -> Tuple[str, str | None]:
|
|||||||
|
|
||||||
|
|
||||||
def _strip_git_suffix(name: str) -> str:
|
def _strip_git_suffix(name: str) -> str:
|
||||||
return name[:-4] if name.endswith(".git") else name
|
return name.removesuffix(".git")
|
||||||
|
|
||||||
|
|
||||||
def _ensure_valid_repo_name(name: str) -> None:
|
def _ensure_valid_repo_name(name: str) -> None:
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from typing import Dict, Any
|
from typing import Any, Dict
|
||||||
|
|
||||||
from .model import RepoParts
|
from .model import RepoParts
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from typing import Dict, Any
|
from typing import Any, Dict
|
||||||
|
|
||||||
from pkgmgr.core.git.queries import get_config_value
|
from pkgmgr.core.git.queries import get_config_value
|
||||||
|
|
||||||
from .parser import parse_identifier
|
|
||||||
from .planner import CreateRepoPlanner
|
|
||||||
from .config_writer import ConfigRepoWriter
|
from .config_writer import ConfigRepoWriter
|
||||||
from .templates import TemplateRenderer
|
|
||||||
from .git_bootstrap import GitBootstrapper
|
from .git_bootstrap import GitBootstrapper
|
||||||
from .mirrors import MirrorBootstrapper
|
from .mirrors import MirrorBootstrapper
|
||||||
|
from .parser import parse_identifier
|
||||||
|
from .planner import CreateRepoPlanner
|
||||||
|
from .templates import TemplateRenderer
|
||||||
|
|
||||||
|
|
||||||
class CreateRepoService:
|
class CreateRepoService:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, Any
|
from typing import Any, Dict
|
||||||
|
|
||||||
from pkgmgr.core.git.queries import get_repo_root
|
from pkgmgr.core.git.queries import get_repo_root
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import shutil
|
|
||||||
import os
|
import os
|
||||||
from pkgmgr.core.repository.identifier import get_repo_identifier
|
import shutil
|
||||||
|
|
||||||
from pkgmgr.core.repository.dir import get_repo_dir
|
from pkgmgr.core.repository.dir import get_repo_dir
|
||||||
|
from pkgmgr.core.repository.identifier import get_repo_identifier
|
||||||
|
|
||||||
|
|
||||||
def delete_repos(selected_repos, repositories_base_dir, all_repos, preview=False):
|
def delete_repos(selected_repos, repositories_base_dir, all_repos, preview=False):
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Pretty-print repository list with status, categories, tags and path.
|
Pretty-print repository list with status, categories, tags and path.
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ from concurrent.futures import ThreadPoolExecutor
|
|||||||
from typing import Any, Dict, List, Tuple
|
from typing import Any, Dict, List, Tuple
|
||||||
|
|
||||||
from pkgmgr.actions.repository._parallel import RepoRef, run_on_repos
|
from pkgmgr.actions.repository._parallel import RepoRef, run_on_repos
|
||||||
from pkgmgr.core.git.commands import pull_args, GitPullArgsError
|
from pkgmgr.core.git.commands import GitPullArgsError, pull_args
|
||||||
from pkgmgr.core.repository.identifier import get_repo_identifier
|
|
||||||
from pkgmgr.core.repository.dir import get_repo_dir
|
from pkgmgr.core.repository.dir import get_repo_dir
|
||||||
|
from pkgmgr.core.repository.identifier import get_repo_identifier
|
||||||
from pkgmgr.core.repository.verify import verify_repository
|
from pkgmgr.core.repository.verify import verify_repository
|
||||||
|
|
||||||
Repository = Dict[str, Any]
|
Repository = Dict[str, Any]
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from pkgmgr.actions.repository._parallel import (
|
|||||||
resolve_repos,
|
resolve_repos,
|
||||||
run_on_repos,
|
run_on_repos,
|
||||||
)
|
)
|
||||||
from pkgmgr.core.git.commands import push_args, GitPushArgsError
|
from pkgmgr.core.git.commands import GitPushArgsError, push_args
|
||||||
|
|
||||||
Repository = Dict[str, Any]
|
Repository = Dict[str, Any]
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import Any, Iterable, List, Tuple
|
from collections.abc import Iterable
|
||||||
|
from typing import Any, List, Tuple
|
||||||
|
|
||||||
from pkgmgr.actions.update.system_updater import SystemUpdater
|
from pkgmgr.actions.update.system_updater import SystemUpdater
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
@@ -37,7 +36,7 @@ class OSReleaseInfo:
|
|||||||
pretty_name: str = ""
|
pretty_name: str = ""
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def load() -> "OSReleaseInfo":
|
def load() -> OSReleaseInfo:
|
||||||
data = read_os_release()
|
data = read_os_release()
|
||||||
return OSReleaseInfo(
|
return OSReleaseInfo(
|
||||||
id=(data.get("ID") or "").lower(),
|
id=(data.get("ID") or "").lower(),
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import os
|
import os
|
||||||
@@ -6,8 +5,8 @@ import os
|
|||||||
from pkgmgr.core.config.load import load_config
|
from pkgmgr.core.config.load import load_config
|
||||||
|
|
||||||
from .context import CLIContext
|
from .context import CLIContext
|
||||||
from .parser import create_parser
|
|
||||||
from .dispatch import dispatch_command
|
from .dispatch import dispatch_command
|
||||||
|
from .parser import create_parser
|
||||||
|
|
||||||
__all__ = ["CLIContext", "create_parser", "dispatch_command", "main"]
|
__all__ = ["CLIContext", "create_parser", "dispatch_command", "main"]
|
||||||
|
|
||||||
|
|||||||
@@ -1,27 +1,27 @@
|
|||||||
from .archive import handle_archive
|
from .archive import handle_archive
|
||||||
from .code_scanning import handle_code_scanning
|
|
||||||
from .repos import handle_repos_command
|
|
||||||
from .config import handle_config
|
|
||||||
from .tools import handle_tools_command
|
|
||||||
from .release import handle_release
|
|
||||||
from .publish import handle_publish
|
|
||||||
from .version import handle_version
|
|
||||||
from .make import handle_make
|
|
||||||
from .changelog import handle_changelog
|
|
||||||
from .branch import handle_branch
|
from .branch import handle_branch
|
||||||
|
from .changelog import handle_changelog
|
||||||
|
from .code_scanning import handle_code_scanning
|
||||||
|
from .config import handle_config
|
||||||
|
from .make import handle_make
|
||||||
from .mirror import handle_mirror_command
|
from .mirror import handle_mirror_command
|
||||||
|
from .publish import handle_publish
|
||||||
|
from .release import handle_release
|
||||||
|
from .repos import handle_repos_command
|
||||||
|
from .tools import handle_tools_command
|
||||||
|
from .version import handle_version
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"handle_archive",
|
"handle_archive",
|
||||||
"handle_code_scanning",
|
|
||||||
"handle_repos_command",
|
|
||||||
"handle_config",
|
|
||||||
"handle_tools_command",
|
|
||||||
"handle_release",
|
|
||||||
"handle_publish",
|
|
||||||
"handle_version",
|
|
||||||
"handle_make",
|
|
||||||
"handle_changelog",
|
|
||||||
"handle_branch",
|
"handle_branch",
|
||||||
|
"handle_changelog",
|
||||||
|
"handle_code_scanning",
|
||||||
|
"handle_config",
|
||||||
|
"handle_make",
|
||||||
"handle_mirror_command",
|
"handle_mirror_command",
|
||||||
|
"handle_publish",
|
||||||
|
"handle_release",
|
||||||
|
"handle_repos_command",
|
||||||
|
"handle_tools_command",
|
||||||
|
"handle_version",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from pkgmgr.actions.branch import close_branch, drop_branch, open_branch
|
||||||
from pkgmgr.cli.context import CLIContext
|
from pkgmgr.cli.context import CLIContext
|
||||||
from pkgmgr.actions.branch import open_branch, close_branch, drop_branch
|
|
||||||
|
|
||||||
|
|
||||||
def handle_branch(args, ctx: CLIContext) -> None:
|
def handle_branch(args, ctx: CLIContext) -> None:
|
||||||
|
|||||||
@@ -4,13 +4,12 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
from typing import Any, Dict, List, Optional, Tuple
|
from typing import Any, Dict, List, Optional, Tuple
|
||||||
|
|
||||||
|
from pkgmgr.actions.changelog import generate_changelog
|
||||||
from pkgmgr.cli.context import CLIContext
|
from pkgmgr.cli.context import CLIContext
|
||||||
|
from pkgmgr.core.git.queries import get_tags
|
||||||
from pkgmgr.core.repository.dir import get_repo_dir
|
from pkgmgr.core.repository.dir import get_repo_dir
|
||||||
from pkgmgr.core.repository.identifier import get_repo_identifier
|
from pkgmgr.core.repository.identifier import get_repo_identifier
|
||||||
from pkgmgr.core.git.queries import get_tags
|
|
||||||
from pkgmgr.core.version.semver import extract_semver_from_tags
|
from pkgmgr.core.version.semver import extract_semver_from_tags
|
||||||
from pkgmgr.actions.changelog import generate_changelog
|
|
||||||
|
|
||||||
|
|
||||||
Repository = Dict[str, Any]
|
Repository = Dict[str, Any]
|
||||||
|
|
||||||
|
|||||||
@@ -5,20 +5,20 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
import shutil
|
import shutil
|
||||||
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Optional
|
from typing import Any, Dict, Optional
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from pkgmgr.cli.context import CLIContext
|
|
||||||
from pkgmgr.actions.config.init import config_init
|
|
||||||
from pkgmgr.actions.config.add import interactive_add
|
from pkgmgr.actions.config.add import interactive_add
|
||||||
from pkgmgr.core.repository.resolve import resolve_repos
|
from pkgmgr.actions.config.init import config_init
|
||||||
from pkgmgr.core.config.save import save_user_config
|
|
||||||
from pkgmgr.actions.config.show import show_config
|
from pkgmgr.actions.config.show import show_config
|
||||||
|
from pkgmgr.cli.context import CLIContext
|
||||||
from pkgmgr.core.command.run import run_command
|
from pkgmgr.core.command.run import run_command
|
||||||
|
from pkgmgr.core.config.save import save_user_config
|
||||||
|
from pkgmgr.core.repository.resolve import resolve_repos
|
||||||
|
|
||||||
|
|
||||||
def _load_user_config(user_config_path: str) -> Dict[str, Any]:
|
def _load_user_config(user_config_path: str) -> Dict[str, Any]:
|
||||||
|
|||||||
@@ -3,9 +3,8 @@ from __future__ import annotations
|
|||||||
import sys
|
import sys
|
||||||
from typing import Any, Dict, List
|
from typing import Any, Dict, List
|
||||||
|
|
||||||
from pkgmgr.cli.context import CLIContext
|
|
||||||
from pkgmgr.actions.proxy import exec_proxy_command
|
from pkgmgr.actions.proxy import exec_proxy_command
|
||||||
|
from pkgmgr.cli.context import CLIContext
|
||||||
|
|
||||||
Repository = Dict[str, Any]
|
Repository = Dict[str, Any]
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from typing import Any, Dict, List
|
from typing import Any, Dict, List
|
||||||
|
|
||||||
from pkgmgr.cli.context import CLIContext
|
|
||||||
from pkgmgr.actions.install import install_repos
|
from pkgmgr.actions.install import install_repos
|
||||||
|
from pkgmgr.actions.repository.create import create_repo
|
||||||
from pkgmgr.actions.repository.deinstall import deinstall_repos
|
from pkgmgr.actions.repository.deinstall import deinstall_repos
|
||||||
from pkgmgr.actions.repository.delete import delete_repos
|
from pkgmgr.actions.repository.delete import delete_repos
|
||||||
from pkgmgr.actions.repository.status import status_repos
|
|
||||||
from pkgmgr.actions.repository.list import list_repositories
|
from pkgmgr.actions.repository.list import list_repositories
|
||||||
from pkgmgr.actions.repository.create import create_repo
|
from pkgmgr.actions.repository.status import status_repos
|
||||||
|
from pkgmgr.cli.context import CLIContext
|
||||||
from pkgmgr.core.command.run import run_command
|
from pkgmgr.core.command.run import run_command
|
||||||
from pkgmgr.core.repository.dir import get_repo_dir
|
from pkgmgr.core.repository.dir import get_repo_dir
|
||||||
|
|
||||||
|
|||||||
@@ -5,22 +5,22 @@ import sys
|
|||||||
from typing import Any, Dict, List, Optional, Tuple
|
from typing import Any, Dict, List, Optional, Tuple
|
||||||
|
|
||||||
from pkgmgr.cli.context import CLIContext
|
from pkgmgr.cli.context import CLIContext
|
||||||
|
from pkgmgr.core.git.queries import get_tags
|
||||||
from pkgmgr.core.repository.dir import get_repo_dir
|
from pkgmgr.core.repository.dir import get_repo_dir
|
||||||
from pkgmgr.core.repository.identifier import get_repo_identifier
|
from pkgmgr.core.repository.identifier import get_repo_identifier
|
||||||
from pkgmgr.core.git.queries import get_tags
|
|
||||||
from pkgmgr.core.version.semver import SemVer, find_latest_version
|
|
||||||
from pkgmgr.core.version.installed import (
|
from pkgmgr.core.version.installed import (
|
||||||
get_installed_python_version,
|
|
||||||
get_installed_nix_profile_version,
|
get_installed_nix_profile_version,
|
||||||
|
get_installed_python_version,
|
||||||
)
|
)
|
||||||
|
from pkgmgr.core.version.semver import SemVer, find_latest_version
|
||||||
from pkgmgr.core.version.source import (
|
from pkgmgr.core.version.source import (
|
||||||
read_pyproject_version,
|
read_ansible_galaxy_version,
|
||||||
read_pyproject_project_name,
|
read_debian_changelog_version,
|
||||||
read_flake_version,
|
read_flake_version,
|
||||||
read_pkgbuild_version,
|
read_pkgbuild_version,
|
||||||
read_debian_changelog_version,
|
read_pyproject_project_name,
|
||||||
|
read_pyproject_version,
|
||||||
read_spec_version,
|
read_spec_version,
|
||||||
read_ansible_galaxy_version,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
Repository = Dict[str, Any]
|
Repository = Dict[str, Any]
|
||||||
|
|||||||
@@ -2,27 +2,26 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from typing import List, Dict, Any
|
from typing import Any, Dict, List
|
||||||
|
|
||||||
from pkgmgr.cli.context import CLIContext
|
|
||||||
from pkgmgr.cli.proxy import maybe_handle_proxy
|
|
||||||
from pkgmgr.core.repository.selected import get_selected_repos
|
|
||||||
from pkgmgr.core.repository.dir import get_repo_dir
|
|
||||||
|
|
||||||
from pkgmgr.cli.commands import (
|
from pkgmgr.cli.commands import (
|
||||||
handle_archive,
|
handle_archive,
|
||||||
|
handle_branch,
|
||||||
|
handle_changelog,
|
||||||
handle_code_scanning,
|
handle_code_scanning,
|
||||||
handle_repos_command,
|
|
||||||
handle_tools_command,
|
|
||||||
handle_release,
|
|
||||||
handle_publish,
|
|
||||||
handle_version,
|
|
||||||
handle_config,
|
handle_config,
|
||||||
handle_make,
|
handle_make,
|
||||||
handle_changelog,
|
|
||||||
handle_branch,
|
|
||||||
handle_mirror_command,
|
handle_mirror_command,
|
||||||
|
handle_publish,
|
||||||
|
handle_release,
|
||||||
|
handle_repos_command,
|
||||||
|
handle_tools_command,
|
||||||
|
handle_version,
|
||||||
)
|
)
|
||||||
|
from pkgmgr.cli.context import CLIContext
|
||||||
|
from pkgmgr.cli.proxy import maybe_handle_proxy
|
||||||
|
from pkgmgr.core.repository.dir import get_repo_dir
|
||||||
|
from pkgmgr.core.repository.selected import get_selected_repos
|
||||||
|
|
||||||
|
|
||||||
def _has_explicit_selection(args) -> bool:
|
def _has_explicit_selection(args) -> bool:
|
||||||
|
|||||||
@@ -74,4 +74,4 @@ def create_parser(description_text: str) -> argparse.ArgumentParser:
|
|||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["create_parser", "SortedSubParsersAction"]
|
__all__ = ["SortedSubParsersAction", "create_parser"]
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
from pkgmgr.cli.parser.common import (
|
from pkgmgr.cli.parser.common import (
|
||||||
add_install_update_arguments,
|
|
||||||
add_identifier_arguments,
|
add_identifier_arguments,
|
||||||
|
add_install_update_arguments,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +1,19 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from typing import Dict, List, Any
|
from typing import Any, Dict, List
|
||||||
|
|
||||||
from pkgmgr.cli.context import CLIContext
|
|
||||||
from pkgmgr.actions.repository.clone import clone_repos
|
|
||||||
from pkgmgr.actions.proxy import exec_proxy_command
|
from pkgmgr.actions.proxy import exec_proxy_command
|
||||||
|
from pkgmgr.actions.repository.clone import clone_repos
|
||||||
from pkgmgr.actions.repository.pull import pull_with_verification
|
from pkgmgr.actions.repository.pull import pull_with_verification
|
||||||
from pkgmgr.actions.repository.push import push_in_parallel
|
from pkgmgr.actions.repository.push import push_in_parallel
|
||||||
from pkgmgr.core.repository.selected import get_selected_repos
|
from pkgmgr.cli.context import CLIContext
|
||||||
from pkgmgr.core.repository.dir import get_repo_dir
|
from pkgmgr.core.repository.dir import get_repo_dir
|
||||||
|
from pkgmgr.core.repository.selected import get_selected_repos
|
||||||
|
|
||||||
PROXY_COMMANDS: Dict[str, List[str]] = {
|
PROXY_COMMANDS: Dict[str, List[str]] = {
|
||||||
"git": [
|
"git": [
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import os
|
|
||||||
import hashlib
|
import hashlib
|
||||||
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from pkgmgr.core.repository.identifier import get_repo_identifier
|
|
||||||
from pkgmgr.core.repository.dir import get_repo_dir
|
from pkgmgr.core.repository.dir import get_repo_dir
|
||||||
|
from pkgmgr.core.repository.identifier import get_repo_identifier
|
||||||
|
|
||||||
|
|
||||||
def create_ink(
|
def create_ink(
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
from typing import Optional, List, Dict, Any
|
from typing import Any, Dict, List, Optional
|
||||||
|
|
||||||
|
|
||||||
Repository = Dict[str, Any]
|
Repository = Dict[str, Any]
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import yaml
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
def save_user_config(user_config, USER_CONFIG_PATH: str):
|
def save_user_config(user_config, USER_CONFIG_PATH: str):
|
||||||
"""Save the user configuration to USER_CONFIG_PATH."""
|
"""Save the user configuration to USER_CONFIG_PATH."""
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ from .types import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"TokenResolver",
|
|
||||||
"ResolutionOptions",
|
|
||||||
"CredentialError",
|
"CredentialError",
|
||||||
"NoCredentialsError",
|
|
||||||
"KeyringUnavailableError",
|
"KeyringUnavailableError",
|
||||||
|
"NoCredentialsError",
|
||||||
|
"ResolutionOptions",
|
||||||
"TokenRequest",
|
"TokenRequest",
|
||||||
|
"TokenResolver",
|
||||||
"TokenResult",
|
"TokenResult",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
"""Credential providers used by TokenResolver."""
|
"""Credential providers used by TokenResolver."""
|
||||||
|
|
||||||
from .env import EnvTokenProvider
|
from .env import EnvTokenProvider
|
||||||
|
from .gh import GhTokenProvider
|
||||||
from .keyring import KeyringTokenProvider
|
from .keyring import KeyringTokenProvider
|
||||||
from .prompt import PromptTokenProvider
|
from .prompt import PromptTokenProvider
|
||||||
from .gh import GhTokenProvider
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"EnvTokenProvider",
|
"EnvTokenProvider",
|
||||||
|
"GhTokenProvider",
|
||||||
"KeyringTokenProvider",
|
"KeyringTokenProvider",
|
||||||
"PromptTokenProvider",
|
"PromptTokenProvider",
|
||||||
"GhTokenProvider",
|
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -20,14 +20,14 @@ def _import_keyring():
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
import keyring # type: ignore
|
import keyring # type: ignore
|
||||||
except Exception as exc: # noqa: BLE001
|
except Exception as exc:
|
||||||
raise KeyringUnavailableError("python-keyring is not installed.") from exc
|
raise KeyringUnavailableError("python-keyring is not installed.") from exc
|
||||||
|
|
||||||
# Some environments have keyring installed but no usable backend.
|
# Some environments have keyring installed but no usable backend.
|
||||||
# We do a lightweight "backend sanity check" by attempting to read the backend.
|
# We do a lightweight "backend sanity check" by attempting to read the backend.
|
||||||
try:
|
try:
|
||||||
_ = keyring.get_keyring()
|
_ = keyring.get_keyring()
|
||||||
except Exception as exc: # noqa: BLE001
|
except Exception as exc:
|
||||||
raise KeyringUnavailableError(
|
raise KeyringUnavailableError(
|
||||||
"python-keyring is installed but no usable keyring backend is configured."
|
"python-keyring is installed but no usable keyring backend is configured."
|
||||||
) from exc
|
) from exc
|
||||||
|
|||||||
@@ -59,18 +59,18 @@ class TokenResolver:
|
|||||||
print("[WARN] Keyring support is not available.", file=sys.stderr)
|
print("[WARN] Keyring support is not available.", file=sys.stderr)
|
||||||
print(f" {msg}", file=sys.stderr)
|
print(f" {msg}", file=sys.stderr)
|
||||||
print(" Tokens will NOT be persisted securely.", file=sys.stderr)
|
print(" Tokens will NOT be persisted securely.", file=sys.stderr)
|
||||||
print("", file=sys.stderr)
|
print(file=sys.stderr)
|
||||||
print(
|
print(
|
||||||
" To enable secure token storage, install python-keyring:",
|
" To enable secure token storage, install python-keyring:",
|
||||||
file=sys.stderr,
|
file=sys.stderr,
|
||||||
)
|
)
|
||||||
print(" pip install keyring", file=sys.stderr)
|
print(" pip install keyring", file=sys.stderr)
|
||||||
print("", file=sys.stderr)
|
print(file=sys.stderr)
|
||||||
print(" Or install via system packages:", file=sys.stderr)
|
print(" Or install via system packages:", file=sys.stderr)
|
||||||
print(" sudo apt install python3-keyring", file=sys.stderr)
|
print(" sudo apt install python3-keyring", file=sys.stderr)
|
||||||
print(" sudo pacman -S python-keyring", file=sys.stderr)
|
print(" sudo pacman -S python-keyring", file=sys.stderr)
|
||||||
print(" sudo dnf install python3-keyring", file=sys.stderr)
|
print(" sudo dnf install python3-keyring", file=sys.stderr)
|
||||||
print("", file=sys.stderr)
|
print(file=sys.stderr)
|
||||||
|
|
||||||
def _prompt_and_maybe_store(
|
def _prompt_and_maybe_store(
|
||||||
self,
|
self,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import urllib.request
|
|
||||||
import json
|
import json
|
||||||
|
import urllib.request
|
||||||
|
|
||||||
|
|
||||||
def validate_token(provider_kind: str, host: str, token: str) -> bool:
|
def validate_token(provider_kind: str, host: str, token: str) -> bool:
|
||||||
|
|||||||
@@ -26,50 +26,50 @@ from .tag_annotated import GitTagAnnotatedError, tag_annotated
|
|||||||
from .tag_force_annotated import GitTagForceAnnotatedError, tag_force_annotated
|
from .tag_force_annotated import GitTagForceAnnotatedError, tag_force_annotated
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
"GitAddAllError",
|
||||||
|
"GitAddError",
|
||||||
|
"GitAddRemoteError",
|
||||||
|
"GitAddRemotePushUrlError",
|
||||||
|
"GitBranchMoveError",
|
||||||
|
"GitCheckoutError",
|
||||||
|
"GitCloneError",
|
||||||
|
"GitCommitError",
|
||||||
|
"GitCreateBranchError",
|
||||||
|
"GitDeleteLocalBranchError",
|
||||||
|
"GitDeleteRemoteBranchError",
|
||||||
|
"GitFetchError",
|
||||||
|
"GitInitError",
|
||||||
|
"GitMergeError",
|
||||||
|
"GitPullArgsError",
|
||||||
|
"GitPullError",
|
||||||
|
"GitPullFfOnlyError",
|
||||||
|
"GitPushArgsError",
|
||||||
|
"GitPushError",
|
||||||
|
"GitPushUpstreamError",
|
||||||
|
"GitSetRemoteUrlError",
|
||||||
|
"GitTagAnnotatedError",
|
||||||
|
"GitTagForceAnnotatedError",
|
||||||
"add",
|
"add",
|
||||||
"add_all",
|
"add_all",
|
||||||
"fetch",
|
"add_remote",
|
||||||
|
"add_remote_push_url",
|
||||||
|
"branch_move",
|
||||||
"checkout",
|
"checkout",
|
||||||
|
"clone",
|
||||||
|
"commit",
|
||||||
|
"create_branch",
|
||||||
|
"delete_local_branch",
|
||||||
|
"delete_remote_branch",
|
||||||
|
"fetch",
|
||||||
|
"init",
|
||||||
|
"merge_no_ff",
|
||||||
"pull",
|
"pull",
|
||||||
"pull_args",
|
"pull_args",
|
||||||
"pull_ff_only",
|
"pull_ff_only",
|
||||||
"merge_no_ff",
|
|
||||||
"push",
|
"push",
|
||||||
"push_args",
|
"push_args",
|
||||||
"commit",
|
|
||||||
"delete_local_branch",
|
|
||||||
"delete_remote_branch",
|
|
||||||
"create_branch",
|
|
||||||
"push_upstream",
|
"push_upstream",
|
||||||
"add_remote",
|
|
||||||
"set_remote_url",
|
"set_remote_url",
|
||||||
"add_remote_push_url",
|
|
||||||
"tag_annotated",
|
"tag_annotated",
|
||||||
"tag_force_annotated",
|
"tag_force_annotated",
|
||||||
"clone",
|
|
||||||
"init",
|
|
||||||
"branch_move",
|
|
||||||
"GitAddError",
|
|
||||||
"GitAddAllError",
|
|
||||||
"GitFetchError",
|
|
||||||
"GitCheckoutError",
|
|
||||||
"GitPullError",
|
|
||||||
"GitPullArgsError",
|
|
||||||
"GitPullFfOnlyError",
|
|
||||||
"GitMergeError",
|
|
||||||
"GitPushError",
|
|
||||||
"GitPushArgsError",
|
|
||||||
"GitCommitError",
|
|
||||||
"GitDeleteLocalBranchError",
|
|
||||||
"GitDeleteRemoteBranchError",
|
|
||||||
"GitCreateBranchError",
|
|
||||||
"GitPushUpstreamError",
|
|
||||||
"GitAddRemoteError",
|
|
||||||
"GitSetRemoteUrlError",
|
|
||||||
"GitAddRemotePushUrlError",
|
|
||||||
"GitTagAnnotatedError",
|
|
||||||
"GitTagForceAnnotatedError",
|
|
||||||
"GitCloneError",
|
|
||||||
"GitInitError",
|
|
||||||
"GitBranchMoveError",
|
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import Iterable, List, Sequence, Union
|
from collections.abc import Iterable, Sequence
|
||||||
|
from typing import List, Union
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..errors import GitRunError, GitCommandError
|
from ..errors import GitCommandError, GitRunError
|
||||||
from ..run import run
|
from ..run import run
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user