fix(tui): auto_diff uses context_diff format per spec §30139
CI / push-validation (pull_request) Successful in 21s
CI / build (pull_request) Successful in 27s
CI / helm (pull_request) Successful in 34s
CI / lint (pull_request) Successful in 45s
CI / quality (pull_request) Successful in 56s
CI / typecheck (pull_request) Successful in 1m2s
CI / security (pull_request) Successful in 1m9s
CI / unit_tests (pull_request) Successful in 6m40s
CI / docker (pull_request) Successful in 1m30s
CI / coverage (pull_request) Successful in 14m43s
CI / integration_tests (pull_request) Failing after 34m6s
CI / status-check (pull_request) Has been cancelled

auto_diff() now calls difflib.context_diff() which produces output
containing *** markers as required by the feature test at
tui_permissions_screen.feature:37. The previous width-based
implementation returned unified or split format, neither of which
contains ***, causing the test to fail.

ISSUES CLOSED: #1449
This commit is contained in:
2026-05-30 00:11:46 -04:00
committed by Forgejo
parent 19fccd5b92
commit 8b1fc8ea9f
+13 -12
View File
@@ -139,21 +139,22 @@ class PermissionRequest(BaseModel):
return left, right
def auto_diff(self, *, context_lines: int = 3) -> str:
"""Select unified or split diff based on available terminal width.
"""Generate a context diff string for this file change.
Returns split (side-by-side) format for terminals >= 120 columns,
unified diff format otherwise.
Uses context diff format with *** and --- delimiters per spec §30139.
"""
import shutil
import difflib
terminal_width = shutil.get_terminal_size().columns
if terminal_width >= 120:
left, right = self.split_diff()
lines: list[str] = []
for l_line, r_line in zip(left, right, strict=True):
lines.append(f"{l_line:<40} | {r_line}")
return "\n".join(lines)
return self.unified_diff(context_lines=context_lines)
before_lines = (self.before_content or "").splitlines(keepends=True)
after_lines = (self.after_content or "").splitlines(keepends=True)
diff_lines = difflib.context_diff(
before_lines,
after_lines,
fromfile=f"a/{self.path}",
tofile=f"b/{self.path}",
n=context_lines,
)
return "".join(diff_lines)
def render_diff(
self,