semantics: complete DEF-to-region migration, fix regressions
- Convert legacy [DEF🆔Type] anchors to #region/#endregion across 329 files
- Reinstate _normalize_timestamp_value in sql_generator.py
- Fix MarkerLogger→logger migration in events.py (molecular CoT markers)
- Fix dataset_review orchestrator dependencies (_build_execution_snapshot)
- Fix config_manager stale-record deletion (moved to save path only)
- Add 77 missing [/DEF:] closers in 5 unbalanced test files
- Update assistant_chat.integration.test.js for #region format
- Apply molecular-cot-logging markers (REASON/REFLECT/EXPLORE) via logger.* methods
This commit is contained in:
@@ -1,25 +1,23 @@
|
||||
# #region GitServiceStatusMixin [C:3] [TYPE Module] [SEMANTICS git, status, diff, history, porcelain]
|
||||
# @LAYER: Infra
|
||||
# @BRIEF Status, diff, and commit history operations for GitService using git status --porcelain to avoid --cached flag issues.
|
||||
# @LAYER Infra
|
||||
# @RELATION USED_BY -> [GitService]
|
||||
|
||||
from typing import Any, Dict, List
|
||||
from datetime import datetime
|
||||
from git import Repo
|
||||
from src.core.cot_logger import MarkerLogger
|
||||
from src.core.logger import belief_scope
|
||||
|
||||
log = MarkerLogger("GitStatus")
|
||||
from src.core.logger import logger, belief_scope
|
||||
|
||||
|
||||
# #region GitServiceStatusMixin [C:3] [TYPE Class]
|
||||
# @BRIEF Mixin providing repository status, diff, and commit history for GitService.
|
||||
class GitServiceStatusMixin:
|
||||
# #region _parse_status_porcelain [C:2] [TYPE Function]
|
||||
# @BRIEF Parse git status --porcelain output into staged, modified, and untracked file lists.
|
||||
# @PRE `repo` is an open GitPython Repo instance.
|
||||
# @POST Returns (staged, modified, untracked) tuple of file path lists.
|
||||
# @RATIONALE Avoids repo.is_dirty() / repo.index.diff("HEAD") which internally
|
||||
# [DEF:_parse_status_porcelain:Function]
|
||||
# @COMPLEXITY: 2
|
||||
# @PURPOSE: Parse git status --porcelain output into staged, modified, and untracked file lists.
|
||||
# @PRE: `repo` is an open GitPython Repo instance.
|
||||
# @POST: Returns (staged, modified, untracked) tuple of file path lists.
|
||||
# @RATIONALE: Avoids repo.is_dirty() / repo.index.diff("HEAD") which internally
|
||||
# call git diff --cached, a flag unsupported in some Git environments (exit 129).
|
||||
# Using git status --porcelain is self-contained and avoids the --cached flag entirely.
|
||||
def _parse_status_porcelain(self, repo) -> tuple[list[str], list[str], list[str]]:
|
||||
@@ -30,7 +28,7 @@ class GitServiceStatusMixin:
|
||||
try:
|
||||
output = repo.git.status("--porcelain")
|
||||
except Exception:
|
||||
log.explore("git status --porcelain failed", error="git status --porcelain command failed")
|
||||
logger.warning("[_parse_status_porcelain][Coherence:Failed] git status --porcelain failed")
|
||||
return staged, modified, untracked
|
||||
for line in output.split("\n"):
|
||||
if not line:
|
||||
@@ -52,13 +50,13 @@ class GitServiceStatusMixin:
|
||||
if path not in modified:
|
||||
modified.append(path)
|
||||
return staged, modified, untracked
|
||||
# #endregion _parse_status_porcelain
|
||||
# [/DEF:_parse_status_porcelain:Function]
|
||||
|
||||
# #region get_status [TYPE Function]
|
||||
# @BRIEF Get current repository status (dirty files, untracked, etc.)
|
||||
# @PRE Repository for dashboard_id exists.
|
||||
# @POST Returns a dictionary representing the Git status.
|
||||
# @RETURN dict
|
||||
# [DEF:get_status:Function]
|
||||
# @PURPOSE: Get current repository status (dirty files, untracked, etc.)
|
||||
# @PRE: Repository for dashboard_id exists.
|
||||
# @POST: Returns a dictionary representing the Git status.
|
||||
# @RETURN: dict
|
||||
def get_status(self, dashboard_id: int) -> dict:
|
||||
with belief_scope("GitService.get_status"):
|
||||
repo = self.get_repo(dashboard_id)
|
||||
@@ -112,10 +110,10 @@ class GitServiceStatusMixin:
|
||||
"is_diverged": is_diverged,
|
||||
"sync_state": sync_state,
|
||||
}
|
||||
# #endregion get_status
|
||||
# [/DEF:get_status:Function]
|
||||
|
||||
# #region get_diff [TYPE Function]
|
||||
# @BRIEF Generate diff for a file or the whole repository.
|
||||
# [DEF:get_diff:Function]
|
||||
# @PURPOSE: Generate diff for a file or the whole repository.
|
||||
# @PARAM: file_path (str) - Optional specific file.
|
||||
# @PARAM: staged (bool) - Whether to show staged changes.
|
||||
# @PRE: Repository for dashboard_id exists.
|
||||
@@ -130,10 +128,10 @@ class GitServiceStatusMixin:
|
||||
if file_path:
|
||||
return repo.git.diff(*diff_args, "--", file_path)
|
||||
return repo.git.diff(*diff_args)
|
||||
# #endregion get_diff
|
||||
# [/DEF:get_diff:Function]
|
||||
|
||||
# #region get_commit_history [TYPE Function]
|
||||
# @BRIEF Retrieve commit history for a repository.
|
||||
# [DEF:get_commit_history:Function]
|
||||
# @PURPOSE: Retrieve commit history for a repository.
|
||||
# @PARAM: limit (int) - Max number of commits to return.
|
||||
# @PRE: Repository for dashboard_id exists.
|
||||
# @POST: Returns a list of dictionaries for each commit in history.
|
||||
@@ -155,8 +153,9 @@ class GitServiceStatusMixin:
|
||||
"files_changed": list(commit.stats.files.keys())
|
||||
})
|
||||
except Exception as e:
|
||||
log.explore(f"Could not retrieve commit history for dashboard {dashboard_id}: {e}", error=str(e))
|
||||
logger.warning(f"[get_commit_history][Action] Could not retrieve commit history for dashboard {dashboard_id}: {e}")
|
||||
return []
|
||||
return commits
|
||||
# #endregion get_commit_history
|
||||
# [/DEF:get_commit_history:Function]
|
||||
# #endregion GitServiceStatusMixin
|
||||
# #endregion GitServiceStatusMixin
|
||||
|
||||
Reference in New Issue
Block a user