refactor(hermes_cli): second pass on the 15 small modules — compact bodies, drop redundant locals/blanks, tighten module docs
This commit is contained in:
+13
-27
@@ -1,8 +1,7 @@
|
||||
"""Stale git lock-file and aborted-fetch pack-debris recovery for update/check paths.
|
||||
|
||||
A crashed or killed ``git fetch`` can leave ``.git/shallow.lock`` behind (every later fetch then
|
||||
fails with "Unable to create '.../shallow.lock': File exists") and ``tmp_pack_*`` files under
|
||||
``.git/objects/pack`` that git itself never cleans up.
|
||||
A killed ``git fetch`` can leave ``.git/shallow.lock`` behind (every later fetch fails with "Unable to
|
||||
create '.../shallow.lock': File exists") and ``tmp_pack_*`` files git itself never cleans up.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -16,18 +15,15 @@ from typing import Callable, Iterable, List, Optional
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Files younger than this are presumed live (a fetch may be in flight) and are never removed. git
|
||||
# lock files live for seconds and a healthy fetch completes in minutes; 10 minutes is abandoned by
|
||||
# any reasonable standard.
|
||||
# Files younger than this are presumed live (a fetch may be in flight) and are never removed. Lock
|
||||
# files live for seconds and a healthy fetch completes in minutes; 10 minutes is abandoned.
|
||||
STALE_LOCK_MIN_AGE_SECONDS = 10 * 60
|
||||
STALE_TMP_PACK_MIN_AGE_SECONDS = STALE_LOCK_MIN_AGE_SECONDS
|
||||
|
||||
# ``shallow.lock`` is the one observed in the wild; the others are the same class of failure
|
||||
# (interrupted git operation). Locks held by a live git process are protected by the process guard.
|
||||
LOCK_NAMES = ("shallow.lock", "index.lock", "HEAD.lock", "MERGE_HEAD.lock")
|
||||
|
||||
# Temp-file prefixes git writes into .git/objects/pack during a transfer and renames away on
|
||||
# success. Anything left with these names after a fetch died is garbage by definition.
|
||||
# success; anything left with these names after a fetch died is garbage by definition.
|
||||
_TMP_PACK_PREFIXES = ("tmp_pack_", "tmp_idx_", "tmp_rev_", "tmp_mtimes_")
|
||||
|
||||
|
||||
@@ -51,13 +47,8 @@ def _git_proc_running() -> bool:
|
||||
|
||||
|
||||
def _sweep_stale(
|
||||
directory: Path,
|
||||
candidates: Callable[[], Iterable[Path]],
|
||||
*,
|
||||
min_age_seconds: Optional[int],
|
||||
default_age: int,
|
||||
skip_msg: str,
|
||||
log_removed: Callable[[Path, int], None],
|
||||
directory: Path, candidates: Callable[[], Iterable[Path]], *, min_age_seconds: Optional[int], default_age: int,
|
||||
skip_msg: str, log_removed: Callable[[Path, int], None],
|
||||
) -> List[str]:
|
||||
"""Shared guard + age-floor sweep. Never raises; skips anything it cannot stat/unlink."""
|
||||
if not directory.is_dir():
|
||||
@@ -89,10 +80,8 @@ def clear_stale_git_locks(repo_root: Path, *, min_age_seconds: Optional[int] = N
|
||||
"""
|
||||
git_dir = Path(repo_root) / ".git"
|
||||
return _sweep_stale(
|
||||
git_dir,
|
||||
lambda: [git_dir / name for name in LOCK_NAMES],
|
||||
min_age_seconds=min_age_seconds,
|
||||
default_age=STALE_LOCK_MIN_AGE_SECONDS,
|
||||
git_dir, lambda: [git_dir / name for name in LOCK_NAMES],
|
||||
min_age_seconds=min_age_seconds, default_age=STALE_LOCK_MIN_AGE_SECONDS,
|
||||
skip_msg="git process running; skipping stale-lock sweep",
|
||||
log_removed=lambda p, _size: logger.info("Removed stale git lock %s", p),
|
||||
)
|
||||
@@ -107,16 +96,13 @@ def clear_stale_tmp_packs(repo_root: Path, *, min_age_seconds: Optional[int] = N
|
||||
|
||||
def _candidates():
|
||||
try:
|
||||
entries = list(pack_dir.iterdir())
|
||||
return [e for e in pack_dir.iterdir() if e.name.startswith(_TMP_PACK_PREFIXES)]
|
||||
except OSError:
|
||||
return []
|
||||
return [e for e in entries if e.name.startswith(_TMP_PACK_PREFIXES)]
|
||||
|
||||
return []
|
||||
return _sweep_stale(
|
||||
pack_dir,
|
||||
_candidates,
|
||||
min_age_seconds=min_age_seconds,
|
||||
default_age=STALE_TMP_PACK_MIN_AGE_SECONDS,
|
||||
pack_dir, _candidates,
|
||||
min_age_seconds=min_age_seconds, default_age=STALE_TMP_PACK_MIN_AGE_SECONDS,
|
||||
skip_msg="git process running; skipping tmp-pack sweep",
|
||||
log_removed=lambda p, size: logger.info("Removed aborted-fetch pack debris %s (%d bytes)", p, size),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user