From b0380b561b48ec46b0000b52e816f38f680c06d1 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 4 Sep 2026 06:40:53 +0000 Subject: [PATCH 1/5] Add replay-patches command Introduces dfetch replay-patches, which stages the clean upstream source in the git index and applies the selected patches to the working tree, so any diff-aware editor shows git diff (working tree vs index) with exactly what the patches contribute. The command always restores the original working tree and index on exit, so no permanent changes are made. - New command: dfetch/commands/replay_patches.py, with --count/-n, --interactive/-i, and per-project name:N patch limits - Supports reviewing multiple projects together in one pass ("combined mode"), staging all of them before pausing, then restoring all of them afterwards with each project's own "restored" line clearly attributed - Interactive TUI (single- and multi-project) steps through the patch stack with the arrow keys, applying/reversing patches directly with no extra VCS fetch per step - GitSuperProject.add_path()/restore_staged()/restore_worktree() and GitLocalRepo equivalents give the command index/worktree control without disturbing the rest of the working tree - SVN superprojects are supported with a warning (no staging area; use svn diff to inspect changes) - Always restores from HEAD (git) or by re-fetching and reapplying (SVN) rather than trusting the reapplied worktree, since a fetch or patch step can introduce environment-dependent drift a content diff wouldn't catch - Skips projects with no patch file, uncommitted local changes, or an unsafe (missing or out-of-root) patch path, with a clear warning explaining why - Shared Command._iter_projects() helper (also adopted by update-patch) iterates selected projects, logs per-project errors, and re-raises if any failed - Threat model and changelog updated Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01A7miizBGMoLEXXZxuq6XUJ --- CHANGELOG.rst | 6 +- dfetch/__main__.py | 2 + dfetch/commands/command.py | 26 + dfetch/commands/replay_patches.py | 640 +++++++++++++++++++++++++ dfetch/commands/update_patch.py | 22 +- dfetch/project/gitsuperproject.py | 16 + dfetch/project/subproject.py | 10 + dfetch/vcs/git.py | 22 + features/replay-patches-in-git.feature | 151 ++++++ features/replay-patches-in-svn.feature | 73 +++ features/steps/git_steps.py | 19 +- features/steps/svn_steps.py | 15 +- security/__init__.py | 9 + security/tm_usage.py | 9 +- tests/test_replay_patches.py | 541 +++++++++++++++++++++ 15 files changed, 1539 insertions(+), 22 deletions(-) create mode 100644 dfetch/commands/replay_patches.py create mode 100644 features/replay-patches-in-git.feature create mode 100644 features/replay-patches-in-svn.feature create mode 100644 tests/test_replay_patches.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f5fd9f44a..e7ceab6a2 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,3 +1,8 @@ +Release 0.15.0 (unreleased) +============================== + +* Add ``replay-patches`` command to step through patch contributions interactively (#1290) + Release 0.14.4 (released 2026-08-28) ==================================== @@ -17,7 +22,6 @@ Release 0.14.2 (released 2026-06-21) Release 0.14.1 (released 2026-06-19) ==================================== - * Implement C-043: add ``pip-audit`` OSV gate to the release workflow * Add CRA Compliance: OSCAL 1.2.2 Component Definition * Fix ``dfetch import`` mangling the namespace of a generic VCS URL whose path contains ``.git`` (#1268) diff --git a/dfetch/__main__.py b/dfetch/__main__.py index 3ee7bd157..474b9b2fe 100644 --- a/dfetch/__main__.py +++ b/dfetch/__main__.py @@ -18,6 +18,7 @@ import dfetch.commands.import_ import dfetch.commands.init import dfetch.commands.remove +import dfetch.commands.replay_patches import dfetch.commands.report import dfetch.commands.update import dfetch.commands.update_patch @@ -56,6 +57,7 @@ def create_parser() -> argparse.ArgumentParser: dfetch.commands.remove.Remove.create_menu(subparsers) dfetch.commands.report.Report.create_menu(subparsers) dfetch.commands.update.Update.create_menu(subparsers) + dfetch.commands.replay_patches.ReplayPatches.create_menu(subparsers) dfetch.commands.update_patch.UpdatePatch.create_menu(subparsers) dfetch.commands.validate.Validate.create_menu(subparsers) diff --git a/dfetch/commands/command.py b/dfetch/commands/command.py index 53639e13e..9a442b2bf 100644 --- a/dfetch/commands/command.py +++ b/dfetch/commands/command.py @@ -5,8 +5,14 @@ import sys from abc import ABC, abstractmethod from argparse import ArgumentParser # pylint: disable=unused-import +from collections.abc import Callable from typing import TYPE_CHECKING, TypeVar +from dfetch.log import get_logger +from dfetch.manifest.project import ProjectEntry +from dfetch.project.superproject import SuperProject +from dfetch.util.util import in_directory + if TYPE_CHECKING and sys.version_info >= (3, 10): from typing import TypeAlias @@ -18,6 +24,8 @@ argparse._SubParsersAction # pyright: ignore[reportPrivateUsage] #pylint: disable=protected-access ) +_command_logger = get_logger(__name__) + def pascal_to_kebab(name: str) -> str: """Insert a dash before each uppercase letter (except the first) and lowercase everything.""" @@ -60,6 +68,24 @@ def __call__(self, args: argparse.Namespace) -> None: NotImplementedError: This is an abstract method that should be implemented by a subclass. """ + @staticmethod + def _iter_projects( + superproject: SuperProject, + project_names: list[str], + process: Callable[[ProjectEntry], None], + ) -> None: + """Iterate over selected projects, log per-project errors, re-raise if any failed.""" + had_errors = False + with in_directory(superproject.root_directory): + for project in superproject.manifest.selected_projects(project_names): + try: + process(project) + except RuntimeError as exc: + _command_logger.print_error_line(project.name, str(exc)) + had_errors = True + if had_errors: + raise RuntimeError() + @staticmethod def parser( subparsers: SubparserActionType, diff --git a/dfetch/commands/replay_patches.py b/dfetch/commands/replay_patches.py new file mode 100644 index 000000000..bc5731ac4 --- /dev/null +++ b/dfetch/commands/replay_patches.py @@ -0,0 +1,640 @@ +"""Replaying patches interactively. + +*Dfetch* allows you to keep local changes to external projects in the form of +patch files. The ``replay-patches`` command lets you inspect what each patch +contributes by staging the clean upstream source in the git index and +optionally stepping the working tree through each patch in turn. + +Because ``git diff`` always compares the working tree against the index, any +diff-aware editor will immediately show what the applied patches change +relative to the upstream source, with no manual setup needed. + +Run without arguments to replay all patches at once: + +.. code-block:: console + + $ dfetch replay-patches some-project + +Use ``--count`` to stop at a specific patch number, or ``--interactive`` to +step through the stack with the ← and → arrow keys. In either case the +command always restores the original working tree and index before it exits, +so no permanent changes are made. + +.. tabs:: + + .. tab:: Git + + .. scenario-include:: ../features/replay-patches-in-git.feature + + .. tab:: SVN + + .. scenario-include:: ../features/replay-patches-in-svn.feature +""" + +import argparse +import dataclasses +import logging +from collections.abc import Callable, Generator +from contextlib import contextmanager +from pathlib import Path + +import dfetch.commands.command +import dfetch.manifest.project +from dfetch.log import get_logger +from dfetch.project import create_sub_project, create_super_project +from dfetch.project.gitsuperproject import GitSuperProject +from dfetch.project.subproject import SubProject +from dfetch.project.superproject import NoVcsSuperProject, SuperProject +from dfetch.terminal import BOLD, DIM, RESET, Screen, is_tty, read_key +from dfetch.util.cmdline import SubprocessCommandError +from dfetch.util.util import in_directory +from dfetch.vcs.patch import Patch + +logger = get_logger(__name__) + + +@dataclasses.dataclass +class _ProjectState: + """Tracks the current patch position for one project during a combined review.""" + + name: str + local_path: str + patches: list[str] + current: int = 0 + + +def _parse_project_spec(spec: str) -> tuple[str, int | None]: + """Split 'name:N' into (name, N); a bare name returns (name, None).""" + if ":" not in spec: + return spec, None + name, _, tail = spec.rpartition(":") + try: + n = int(tail) + except ValueError as exc: + raise RuntimeError( + f"invalid project spec {spec!r}; expected name or name:N" + ) from exc + if n < 0: + raise RuntimeError(f"invalid project spec {spec!r}; patch count must be >= 0") + return name, n + + +def _validate_superproject(superproject: SuperProject) -> None: + """Validate that the superproject supports patch review, warning for SVN.""" + if isinstance(superproject, NoVcsSuperProject): + raise TypeError( + "The project containing the manifest is not under version control," + " reviewing patches is not supported" + ) + if not isinstance(superproject, GitSuperProject): + logger.warning( + "replay-patches has limited support in SVN superprojects" + " (no staging area, use `svn diff` to inspect changes)" + ) + + +def _check_count_conflicts( + count: int | None, per_project_counts: dict[str, int] +) -> None: + """Raise if both --count and a project:N suffix were supplied together.""" + if count is not None and per_project_counts: + raise RuntimeError("use either --count or project:N, not both") + + +def _effective_count( + count: int | None, + selected: list[dfetch.manifest.project.ProjectEntry], + per_project_counts: dict[str, int], +) -> int | None: + """Return the effective patch count for single-project mode.""" + if count is not None or not selected: + return count + return per_project_counts.get(selected[0].name) + + +class ReplayPatches(dfetch.commands.command.Command): + """Replay what patches contribute to a project. + + The ``replay-patches`` command stages the clean upstream source in the git + index and applies the selected patches to the working tree, so ``git diff`` + shows exactly what the patches change relative to upstream. Use + ``--interactive`` to step through the stack patch-by-patch with ← and →. + The command always restores the original state before it exits. + """ + + @staticmethod + def create_menu(subparsers: dfetch.commands.command.SubparserActionType) -> None: + """Add the menu for the replay-patches action.""" + parser = dfetch.commands.command.Command.parser(subparsers, ReplayPatches) + parser.add_argument( + "projects", + metavar="", + type=str, + nargs="*", + help="Specific project(s) to review; append :N to limit patches (e.g. proj:2)", + ) + group = parser.add_mutually_exclusive_group() + group.add_argument( + "--count", + "-n", + metavar="N", + type=int, + default=None, + help="Number of patches to apply, single project only (default: all)", + ) + group.add_argument( + "--interactive", + "-i", + action="store_true", + default=False, + help="Step through patches interactively with ← and →", + ) + + def __call__(self, args: argparse.Namespace) -> None: + """Perform the replay patches.""" + if args.count is not None and args.count < 0: + raise RuntimeError("--count must be >= 0") + + superproject = create_super_project() + _validate_superproject(superproject) + + if args.interactive and not is_tty(): + raise RuntimeError("--interactive requires an interactive terminal") + + project_names, per_project_counts = self._parse_project_args(args.projects) + _check_count_conflicts(args.count, per_project_counts) + if args.interactive and per_project_counts: + raise RuntimeError("project:N is not supported with --interactive") + + selected = list(superproject.manifest.selected_projects(project_names)) + if len(selected) >= 2: + with in_directory(superproject.root_directory): + _review_projects_combined( + superproject, + selected, + per_project_counts, + args.count, + args.interactive, + ) + else: + count = _effective_count(args.count, selected, per_project_counts) + self._iter_projects( + superproject, + project_names, + lambda project: self._review_project( + superproject, project, count, args.interactive + ), + ) + + @staticmethod + def _parse_project_args( + projects: list[str], + ) -> tuple[list[str], dict[str, int]]: + """Parse raw project arguments into names and per-project patch counts.""" + parsed = [_parse_project_spec(s) for s in projects] + project_names = [name for name, _ in parsed] + per_project_counts: dict[str, int] = { + name: n for name, n in parsed if n is not None + } + return project_names, per_project_counts + + def _review_project( + self, + superproject: SuperProject, + project: dfetch.manifest.project.ProjectEntry, + count: int | None, + interactive: bool, + ) -> None: + """Set up review state for a single project, then restore.""" + subproject = create_sub_project(project) + git_super = superproject if isinstance(superproject, GitSuperProject) else None + + def _ignored() -> list[str]: + return list(superproject.ignored_files(project.destination)) + + if not _can_review_project(superproject, subproject, project.name): + return + + saved_metadata = Path(subproject.metadata_path).read_bytes() + total_patches = len(list(subproject.patch)) + chosen_count = count if count is not None else -1 + effective = ( + total_patches if chosen_count == -1 else min(chosen_count, total_patches) + ) + diff_cmd = "`git diff`" if git_super is not None else "`svn diff`" + info_msg = ( + f"stage = upstream, working tree = {effective} patch(es) applied," + f" open your editor and run {diff_cmd} to inspect" + ) + try: + subproject.update( + force=True, + ignored_files_callback=_ignored, + patch_count=0, + eol_preferences_callback=superproject.eol_preferences, + ) + if git_super is not None: + git_super.add_path(subproject.local_path) + _apply_review(subproject, project.name, chosen_count, interactive, info_msg) + finally: + try: + _restore_project( + superproject, git_super, subproject, project.name, _ignored + ) + finally: + Path(subproject.metadata_path).write_bytes(saved_metadata) + + +def _is_safe_patch_path(patch: str) -> bool: + """Return False for a patch that ``SubProject._apply_patches`` would have skipped. + + Mirrors its checks (stays within the current directory, and exists) so + neither the interactive stepper nor the non-interactive replay can end up + out of sync with a patch that ``apply_patches`` silently skips: if it + skips a patch, the worktree it produces no longer matches what all + patches applied would restore, so the project must not be reviewed. + """ + cwd = Path.cwd() + patch_path = (cwd / patch).resolve() + try: + patch_path.relative_to(cwd) + except ValueError: + return False + return patch_path.exists() + + +def _can_review_project( + superproject: SuperProject, + subproject: SubProject, + project_name: str, +) -> bool: + """Return False and log a warning when the project cannot be reviewed.""" + if not subproject.patch: + logger.print_warning_line( + project_name, + f'skipped - there is no patch file, use "dfetch diff {project_name}"' + " to create one", + ) + return False + if not subproject.on_disk_version(): + logger.print_warning_line( + project_name, + f'skipped - the project was never fetched, use "dfetch update {project_name}"', + ) + return False + if superproject.has_local_changes_in_dir(subproject.local_path): + logger.print_warning_line( + project_name, + f"skipped - uncommitted changes in {subproject.local_path}", + ) + return False + if any(not _is_safe_patch_path(patch) for patch in subproject.patch): + logger.print_warning_line( + project_name, + "skipped - a patch is missing or outside the manifest root", + ) + return False + return True + + +def _apply_review( + subproject: SubProject, + project_name: str, + chosen_count: int, + interactive: bool, + info_msg: str, +) -> None: + """Run the review session, pausing for non-interactive inspection.""" + if interactive: + _step_tui(list(subproject.patch), subproject.local_path, project_name) + return + + subproject.apply_patches(chosen_count) + logger.print_info_line(project_name, info_msg) + if is_tty(): + input("Press Enter to restore...") + + +def _restore_project( + superproject: SuperProject, + git_super: GitSuperProject | None, + subproject: SubProject, + project_name: str, + ignored_callback: Callable[[], list[str]], +) -> None: + """Restore the project to its original state, from HEAD rather than the worktree. + + A worktree that patch application left in the "right" state isn't + trustworthy on its own: a fetch or patch step can introduce + environment-dependent drift (e.g. line-ending normalization) that a diff + of file contents wouldn't necessarily catch. Restoring from HEAD (git) or + re-fetching and re-applying (SVN) is the only way to be sure the + restored state matches what was there before review started. + """ + if git_super is not None: + git_super.restore_from_head(subproject.local_path) + else: + subproject.update( + force=True, + ignored_files_callback=ignored_callback, + patch_count=0, + eol_preferences_callback=superproject.eol_preferences, + ) + subproject.apply_patches() + logger.print_info_line(project_name, "restored") + + +# --------------------------------------------------------------------------- +# Combined multi-project path +# --------------------------------------------------------------------------- + +_StagedEntry = tuple[SubProject, _ProjectState, bytes, Callable[[], list[str]]] + + +def _collect_reviewable( + superproject: SuperProject, + selected: list[dfetch.manifest.project.ProjectEntry], +) -> list[tuple[dfetch.manifest.project.ProjectEntry, SubProject]]: + """Return (project, subproject) pairs that pass the can-review check.""" + result = [] + for project in selected: + subproject = create_sub_project(project) + if _can_review_project(superproject, subproject, project.name): + result.append((project, subproject)) + return result + + +def _stage_one( + superproject: SuperProject, + git_super: GitSuperProject | None, + project: dfetch.manifest.project.ProjectEntry, + subproject: SubProject, +) -> _StagedEntry: + """Fetch upstream into the worktree and stage it; return a restore tuple.""" + saved_metadata = Path(subproject.metadata_path).read_bytes() + + def _ignored() -> list[str]: + return list(superproject.ignored_files(project.destination)) + + staged_ok = False + try: + subproject.update( + force=True, + ignored_files_callback=_ignored, + patch_count=0, + eol_preferences_callback=superproject.eol_preferences, + ) + if git_super is not None: + git_super.add_path(subproject.local_path) + staged_ok = True + finally: + if not staged_ok: + try: + _restore_project( + superproject, git_super, subproject, project.name, _ignored + ) + finally: + Path(subproject.metadata_path).write_bytes(saved_metadata) + state = _ProjectState( + name=project.name, + local_path=subproject.local_path, + patches=list(subproject.patch), + ) + return subproject, state, saved_metadata, _ignored + + +def _run_combined_review( + staged: list[_StagedEntry], + git_super: GitSuperProject | None, + per_project_counts: dict[str, int], + interactive: bool, +) -> None: + """Apply patches and pause (non-interactive) or launch tree TUI (interactive).""" + if interactive: + _step_tui_multi([state for _, state, _, _ in staged]) + return + diff_cmd = "`git diff`" if git_super is not None else "`svn diff`" + for subproject, state, _, _ in staged: + count = per_project_counts.get(state.name, -1) + subproject.apply_patches(count) + state.current = ( + len(state.patches) if count == -1 else min(count, len(state.patches)) + ) + logger.print_info_line( + state.name, + f"stage = upstream, working tree = {state.current} patch(es) applied," + f" open your editor and run {diff_cmd} to inspect", + ) + if is_tty(): + input("Press Enter to restore...") + + +def _restore_one_combined( + superproject: SuperProject, + git_super: GitSuperProject | None, + entry: _StagedEntry, +) -> None: + """Restore a single staged project and write back its saved metadata.""" + subproject, state, saved_meta, ignored = entry + try: + _restore_project(superproject, git_super, subproject, state.name, ignored) + finally: + Path(subproject.metadata_path).write_bytes(saved_meta) + + +def _review_projects_combined( + superproject: SuperProject, + selected: list[dfetch.manifest.project.ProjectEntry], + per_project_counts: dict[str, int], + count: int | None, + interactive: bool, +) -> None: + """Fetch + stage all projects, pause for review, then restore all.""" + if count is not None: + raise RuntimeError( + "--count is for single-project use; use project:N syntax for per-project counts" + ) + git_super = superproject if isinstance(superproject, GitSuperProject) else None + reviewable = _collect_reviewable(superproject, selected) + if not reviewable: + return + staged: list[_StagedEntry] = [] + try: + for project, subproject in reviewable: + staged.append(_stage_one(superproject, git_super, project, subproject)) + _run_combined_review(staged, git_super, per_project_counts, interactive) + finally: + if staged: + # Re-announce each project name during restoration: the staging + # phase above already printed and consumed every project's name + # header, so without this every "restored" line below would run + # together under the last project header printed, with no way + # to tell which project each one belongs to. + logger.info("[bold]Restoring projects...[/bold]") + logger.reset_projects() + for entry in staged: + try: + _restore_one_combined(superproject, git_super, entry) + except (RuntimeError, SubprocessCommandError, OSError) as exc: + logger.print_error_line(entry[1].name, str(exc)) + + +# --------------------------------------------------------------------------- +# Single-project TUI +# --------------------------------------------------------------------------- + + +def _draw_tui_frame( + screen: Screen, + patches: list[str], + current: int, + total: int, + project_name: str, +) -> None: + """Render the current patch-stack state to the screen.""" + count_label = str(current) if current < total else "all" + lines: list[str] = [ + f" {DIM}← → step Enter restore and exit Ctrl-C abort{RESET}", + " " + "─" * 54, + f" {project_name} [{count_label}/{total} patches applied]", + ] + for idx, patch_name in enumerate(patches): + marker = f"{BOLD}[x]{RESET}" if idx < current else f"{DIM}[ ]{RESET}" + lines.append(f" {marker} {patch_name}") + screen.draw(lines) + + +@contextmanager +def _silent_patch_ng() -> Generator[None, None, None]: + """Suppress patch_ng info logs so they don't corrupt the TUI frame.""" + patch_logger = logging.getLogger("patch_ng") + prev = patch_logger.level + patch_logger.setLevel(logging.CRITICAL) + try: + yield + finally: + patch_logger.setLevel(prev) + + +def _apply_step( + key: str, + current: int, + total: int, + patches: list[str], + local_path: str, +) -> tuple[int, bool]: + """Handle one keypress; return (new_current, done).""" + if key == "LEFT" and current > 0: + patch = patches[current - 1] + if _is_safe_patch_path(patch): + with _silent_patch_ng(): + Patch.from_file(patch).reverse().apply(root=local_path) + else: + logger.warning(f'Skipping patch "{patch}": missing or outside {Path.cwd()}') + return current - 1, False + if key == "RIGHT" and current < total: + patch = patches[current] + if _is_safe_patch_path(patch): + with _silent_patch_ng(): + Patch.from_file(patch).apply(root=local_path) + else: + logger.warning(f'Skipping patch "{patch}": missing or outside {Path.cwd()}') + return current + 1, False + if key in ("ENTER", "ESC"): + return current, True + return current, False + + +def _step_tui(patches: list[str], local_path: str, project_name: str) -> None: + """Interactive patch-stack stepper using arrow keys. + + The git index is staged once (clean upstream) before this function is + called. Only the working tree is updated on each step so that + ``git diff`` always shows the contribution of the currently applied patches. + Patches are applied or reversed directly, with no VCS fetch per step. + """ + total = len(patches) + current = 0 + screen = Screen() + + while True: + _draw_tui_frame(screen, patches, current, total, project_name) + try: + key = read_key() + except KeyboardInterrupt: + screen.clear() + raise + try: + current, done = _apply_step(key, current, total, patches, local_path) + except (RuntimeError, OSError): + screen.clear() + raise + if done: + screen.clear() + return + + +# --------------------------------------------------------------------------- +# Multi-project TUI +# --------------------------------------------------------------------------- + + +def _draw_tui_tree( + screen: Screen, + states: list[_ProjectState], + focused: int, +) -> None: + """Render the multi-project patch-stack tree to the screen.""" + lines: list[str] = [ + f" {DIM}← → step ↑ ↓ switch project Enter restore and exit Ctrl-C abort{RESET}", + " " + "─" * 71, + ] + for idx, state in enumerate(states): + total = len(state.patches) + count_label = str(state.current) if state.current < total else "all" + prefix = ">" if idx == focused else " " + lines.append( + f" {prefix} {state.name} [{count_label}/{total} patches applied]" + ) + for pidx, patch_name in enumerate(state.patches): + marker = f"{BOLD}[x]{RESET}" if pidx < state.current else f"{DIM}[ ]{RESET}" + lines.append(f" {marker} {patch_name}") + screen.draw(lines) + + +def _handle_tui_multi_key( + key: str, + focused: int, + states: list[_ProjectState], +) -> tuple[int, bool]: + """Handle one keypress in the multi-project TUI; return (new_focused, done).""" + if key == "UP" and focused > 0: + return focused - 1, False + if key == "DOWN" and focused < len(states) - 1: + return focused + 1, False + state = states[focused] + state.current, done = _apply_step( + key, state.current, len(state.patches), state.patches, state.local_path + ) + return focused, done + + +def _step_tui_multi(states: list[_ProjectState]) -> None: + """Multi-project interactive TUI: ↑/↓ switch focus, ←/→ step patches.""" + focused = 0 + screen = Screen() + while True: + _draw_tui_tree(screen, states, focused) + try: + key = read_key() + except KeyboardInterrupt: + screen.clear() + raise + try: + focused, done = _handle_tui_multi_key(key, focused, states) + except (RuntimeError, OSError): + screen.clear() + raise + if done: + screen.clear() + return diff --git a/dfetch/commands/update_patch.py b/dfetch/commands/update_patch.py index 3d7a4bbf3..fdf78ee4e 100644 --- a/dfetch/commands/update_patch.py +++ b/dfetch/commands/update_patch.py @@ -41,10 +41,7 @@ from dfetch.project.gitsuperproject import GitSuperProject from dfetch.project.metadata import Metadata from dfetch.project.superproject import NoVcsSuperProject, RevisionRange, SuperProject -from dfetch.util.util import ( - check_no_path_traversal, - in_directory, -) +from dfetch.util.util import check_no_path_traversal logger = get_logger(__name__) @@ -75,8 +72,6 @@ def __call__(self, args: argparse.Namespace) -> None: """Perform the update patch.""" superproject = create_super_project() - had_errors: bool = False - if isinstance(superproject, NoVcsSuperProject): raise TypeError( "The project containing the manifest is not under version control," @@ -85,16 +80,11 @@ def __call__(self, args: argparse.Namespace) -> None: if not isinstance(superproject, GitSuperProject): logger.warning("Update patch is only fully supported in git superprojects!") - with in_directory(superproject.root_directory): - for project in superproject.manifest.selected_projects(args.projects): - try: - self._process_project(superproject, project) - except RuntimeError as exc: - logger.print_error_line(project.name, str(exc)) - had_errors = True - - if had_errors: - raise RuntimeError() + self._iter_projects( + superproject, + args.projects, + lambda project: self._process_project(superproject, project), + ) def _process_project( self, diff --git a/dfetch/project/gitsuperproject.py b/dfetch/project/gitsuperproject.py index 3d4343c1c..0a5da09f0 100644 --- a/dfetch/project/gitsuperproject.py +++ b/dfetch/project/gitsuperproject.py @@ -51,6 +51,22 @@ def has_local_changes_in_dir(self, path: str) -> bool: """Check if the superproject has local changes.""" return GitLocalRepo(path).any_changes_or_untracked() + def add_path(self, path: str) -> None: + """Stage the given path in the superproject's git index.""" + self._repo.add_path(path) + + def restore_staged(self, path: str) -> None: + """Unstage the given path in the superproject's git index.""" + self._repo.restore_staged(path) + + def restore_worktree(self, path: str) -> None: + """Restore working-tree files for path from the staged index.""" + self._repo.restore_worktree(path) + + def restore_from_head(self, path: str) -> None: + """Restore both working tree and index for path from HEAD.""" + self._repo.restore_from_head(path) + def get_username(self) -> str: """Get the username of the superproject VCS.""" username = self._repo.get_username() diff --git a/dfetch/project/subproject.py b/dfetch/project/subproject.py index cbfd7c4be..64a1dc600 100644 --- a/dfetch/project/subproject.py +++ b/dfetch/project/subproject.py @@ -87,6 +87,16 @@ def update_is_required(self, force: bool = False) -> Version | None: logger.debug(f"{self.__project.name} Current ({current}), Available ({wanted})") return wanted + def apply_patches(self, count: int = -1) -> None: + """Apply patches to the already-fetched working tree without fetching from remote. + + Args: + count: Number of patches to apply (-1 means all). + """ + if count < -1: + raise ValueError(f"count must be -1 (all) or >= 0, got {count}") + self._apply_patches(count) + def update( self, force: bool = False, diff --git a/dfetch/vcs/git.py b/dfetch/vcs/git.py index 12dd912d6..a2e42dce5 100644 --- a/dfetch/vcs/git.py +++ b/dfetch/vcs/git.py @@ -672,6 +672,28 @@ def any_changes_or_untracked(self) -> bool: .splitlines() ) + def add_path(self, path: str) -> None: + """Stage the given path in the git index.""" + with in_directory(self._path): + run_on_cmdline(logger, ["git", "add", "--", path]) + + def _git_restore(self, *flags: str, path: str) -> None: + """Run ``git restore`` with the given flags against a single pathspec.""" + with in_directory(self._path): + run_on_cmdline(logger, ["git", "restore", *flags, "--", path]) + + def restore_staged(self, path: str) -> None: + """Unstage the given path, restoring the index to HEAD.""" + self._git_restore("--staged", path=path) + + def restore_worktree(self, path: str) -> None: + """Restore working-tree files for path from the staged index.""" + self._git_restore(path=path) + + def restore_from_head(self, path: str) -> None: + """Restore both working tree and index for path from HEAD.""" + self._git_restore("--source=HEAD", "--staged", "--worktree", path=path) + def untracked_files_patch(self, ignore: Sequence[str] | None = None) -> Patch: """Create a diff for untracked files.""" with in_directory(self._path): diff --git a/features/replay-patches-in-git.feature b/features/replay-patches-in-git.feature new file mode 100644 index 000000000..08fcd2c88 --- /dev/null +++ b/features/replay-patches-in-git.feature @@ -0,0 +1,151 @@ +@replay-patches +Feature: Replay patches in git + + When working with external projects that have patch files, it is useful to + be able to inspect what a patch (or a set of patches) contributes to the + project without permanently modifying the working tree. *Dfetch* provides + the ``replay-patches`` command for this purpose. + + The command stages the clean upstream source in the git index and applies + the selected patches to the working tree. Running ``git diff`` inside the + project directory then shows exactly what the patches change relative to the + upstream source. When the user is done reviewing, the command restores the + original state: both the working tree and the git index are left clean. + + Background: + Given a git repository "SomeProject.git" + And the patch file 'MyProject/patches/SomeProject.patch' + """ + diff --git a/README.md b/README.md + index 32d9fad..62248b7 100644 + --- a/README.md + +++ b/README.md + @@ -1,1 +1,1 @@ + -Generated file for SomeProject.git + +Patched file for SomeProject.git + """ + And a fetched and committed MyProject with the manifest + """ + manifest: + version: 0.0 + projects: + - name: SomeProject + url: some-remote-server/SomeProject.git + patch: patches/SomeProject.patch + """ + + Scenario: All patches are set up for review and state is restored afterwards + When I run "dfetch replay-patches SomeProject" in MyProject + Then the output shows + """ + Dfetch (0.14.0) + SomeProject: + > Fetched master - f9b88b8259d9a7fb48327bf23beabe40c150d474 + > Applying patch "patches/SomeProject.patch" + successfully patched 1/1: b'README.md' + > stage = upstream, working tree = 1 patch(es) applied, open your editor and run `git diff` to inspect + > restored + """ + And the patched 'MyProject/SomeProject/README.md' is + """ + Patched file for SomeProject.git + """ + And the git superproject 'MyProject' reports no changes to 'SomeProject' + + Scenario: Only the first N patches are applied with --count + When I run "dfetch replay-patches --count 0 SomeProject" in MyProject + Then the output shows + """ + Dfetch (0.14.0) + SomeProject: + > Fetched master - f9b88b8259d9a7fb48327bf23beabe40c150d474 + > stage = upstream, working tree = 0 patch(es) applied, open your editor and run `git diff` to inspect + > restored + """ + And the patched 'MyProject/SomeProject/README.md' is + """ + Patched file for SomeProject.git + """ + And the git superproject 'MyProject' reports no changes to 'SomeProject' + + Scenario: A warning is shown when no patch is defined in the manifest + Given a fetched and committed MyProject with the manifest + """ + manifest: + version: 0.0 + projects: + - name: SomeProject + url: some-remote-server/SomeProject.git + """ + When I run "dfetch replay-patches SomeProject" in MyProject + Then the output shows + """ + Dfetch (0.14.0) + SomeProject: + > skipped - there is no patch file, use "dfetch diff SomeProject" to create one + """ + + Scenario: A warning is shown when the project has uncommitted local changes + Given "SomeProject/README.md" in MyProject is changed locally + When I run "dfetch replay-patches SomeProject" in MyProject + Then the output shows + """ + Dfetch (0.14.0) + SomeProject: + > skipped - uncommitted changes in SomeProject + """ + + Scenario: Two projects are staged together and both restored in combined mode + Given a git repository "OtherProject.git" + And the patch file 'MyProject/patches/OtherProject.patch' + """ + diff --git a/README.md b/README.md + index 32d9fad..62248b7 100644 + --- a/README.md + +++ b/README.md + @@ -1,1 +1,1 @@ + -Generated file for OtherProject.git + +Patched file for OtherProject.git + """ + And a fetched and committed MyProject with the manifest + """ + manifest: + version: 0.0 + projects: + - name: SomeProject + url: some-remote-server/SomeProject.git + patch: patches/SomeProject.patch + - name: OtherProject + url: some-remote-server/OtherProject.git + patch: patches/OtherProject.patch + """ + When I run "dfetch replay-patches" in MyProject + Then the output shows + """ + Dfetch (0.14.0) + SomeProject: + > Fetched master - f9b88b8259d9a7fb48327bf23beabe40c150d474 + OtherProject: + > Fetched master - f9b88b8259d9a7fb48327bf23beabe40c150d474 + > Applying patch "patches/SomeProject.patch" + successfully patched 1/1: b'README.md' + > stage = upstream, working tree = 1 patch(es) applied, open your editor and run `git diff` to inspect + > Applying patch "patches/OtherProject.patch" + successfully patched 1/1: b'README.md' + > stage = upstream, working tree = 1 patch(es) applied, open your editor and run `git diff` to inspect + Restoring projects... + SomeProject: + > restored + OtherProject: + > restored + """ + And the patched 'MyProject/SomeProject/README.md' is + """ + Patched file for SomeProject.git + """ + And the patched 'MyProject/OtherProject/README.md' is + """ + Patched file for OtherProject.git + """ + And the git superproject 'MyProject' reports no changes to 'SomeProject' + And the git superproject 'MyProject' reports no changes to 'OtherProject' diff --git a/features/replay-patches-in-svn.feature b/features/replay-patches-in-svn.feature new file mode 100644 index 000000000..c52df8501 --- /dev/null +++ b/features/replay-patches-in-svn.feature @@ -0,0 +1,73 @@ +@replay-patches +Feature: Replay patches in svn + + When working with external projects that have patch files inside an SVN + superproject, the ``replay-patches`` command lets the user inspect what + a patch contributes. Because SVN has no staging area, the command cannot + use the index trick available in Git; it simply sets the working copy to + the requested patch state and restores the original state afterwards. + + Background: + Given a svn-server "SomeProject" + And the patch file 'MySvnProject/patches/SomeProject.patch' + """ + Index: README.md + =================================================================== + --- README.md + +++ README.md + @@ -1,1 +1,1 @@ + -Generated file for SomeProject + +Patched file for SomeProject + """ + And a fetched and committed MySvnProject with the manifest + """ + manifest: + version: 0.0 + projects: + - name: SomeProject + url: some-remote-server/SomeProject + patch: patches/SomeProject.patch + vcs: svn + """ + + Scenario: All patches are set up for review and state is restored afterwards + When I run "dfetch replay-patches SomeProject" in MySvnProject + Then the output shows + """ + Dfetch (0.14.0) + replay-patches has limited support in SVN superprojects (no staging area, use `svn diff` to inspect changes) + SomeProject: + > Fetched trunk - 1 + > Applying patch "patches/SomeProject.patch" + successfully patched 1/1: b'README.md' + > stage = upstream, working tree = 1 patch(es) applied, open your editor and run `svn diff` to inspect + > Fetched trunk - 1 + > Applying patch "patches/SomeProject.patch" + successfully patched 1/1: b'README.md' + > restored + """ + And the patched 'MySvnProject/SomeProject/README.md' is + """ + Patched file for SomeProject + """ + And the svn superproject 'MySvnProject' reports no changes to 'SomeProject' + + Scenario: Only the first N patches are applied with --count + When I run "dfetch replay-patches --count 0 SomeProject" in MySvnProject + Then the output shows + """ + Dfetch (0.14.0) + replay-patches has limited support in SVN superprojects (no staging area, use `svn diff` to inspect changes) + SomeProject: + > Fetched trunk - 1 + > stage = upstream, working tree = 0 patch(es) applied, open your editor and run `svn diff` to inspect + > Fetched trunk - 1 + > Applying patch "patches/SomeProject.patch" + successfully patched 1/1: b'README.md' + > restored + """ + And the patched 'MySvnProject/SomeProject/README.md' is + """ + Patched file for SomeProject + """ + And the svn superproject 'MySvnProject' reports no changes to 'SomeProject' diff --git a/features/steps/git_steps.py b/features/steps/git_steps.py index c0ec9b8b6..4583916ed 100644 --- a/features/steps/git_steps.py +++ b/features/steps/git_steps.py @@ -1,13 +1,13 @@ """Steps for features tests.""" -# pylint: disable=function-redefined, missing-function-docstring, import-error, not-callable +# pylint: disable=function-redefined, missing-function-docstring, import-error, not-callable, no-name-in-module # pyright: reportRedeclaration=false, reportAttributeAccessIssue=false, reportCallIssue=false import os import pathlib import subprocess -from behave import given, then, when # pylint: disable=no-name-in-module +from behave import given, then, when from dfetch.util.util import in_directory from features.steps.generic_steps import ( @@ -309,3 +309,18 @@ def step_impl(context): generate_file(os.path.join(os.getcwd(), "002-diff.patch"), patch_file2) call_command(context, ["update"]) + + +@then("the git superproject '{superproject}' reports no changes to '{path}'") +def step_impl(_, superproject, path): + """Verify git superproject reports no changes to path. + + Args: + superproject: directory name of the git superproject. + path: path inside the superproject to check for changes. + """ + with in_directory(superproject): + result = subprocess.check_output( + ["git", "status", "--porcelain", "--", path], text=True + ) + assert result.strip() == "", f"Unexpected changes in {path!r}:\n{result}" diff --git a/features/steps/svn_steps.py b/features/steps/svn_steps.py index 5154b1055..1de05be73 100644 --- a/features/steps/svn_steps.py +++ b/features/steps/svn_steps.py @@ -7,7 +7,7 @@ import pathlib import subprocess -from behave import given # pylint: disable=no-name-in-module +from behave import given, then from dfetch.util.util import in_directory from features.steps.generic_steps import call_command, extend_file, generate_file @@ -205,3 +205,16 @@ def step_impl(context, name, ending): ) subprocess.check_call(["svn", "ci", "-m", '"Initial commit"']) create_tag("v1") + + +@then("the svn superproject '{superproject}' reports no changes to '{path}'") +def step_impl(_, superproject, path): + """Verify svn superproject reports no changes to path. + + Args: + superproject: directory name of the svn superproject. + path: path inside the superproject to check for changes. + """ + with in_directory(superproject): + result = subprocess.check_output(["svn", "status", path], text=True) + assert result.strip() == "", f"Unexpected changes in {path!r}:\n{result}" diff --git a/security/__init__.py b/security/__init__.py index e69de29bb..b4d45235f 100644 --- a/security/__init__.py +++ b/security/__init__.py @@ -0,0 +1,9 @@ +"""Security threat models and compliance tooling for dfetch.""" + +import os +import sys + +# Ensure the security package is importable when loaded by Sphinx directive +_repo_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if _repo_root not in sys.path: + sys.path.insert(0, _repo_root) diff --git a/security/tm_usage.py b/security/tm_usage.py index 0b019754c..f46e0054b 100644 --- a/security/tm_usage.py +++ b/security/tm_usage.py @@ -162,9 +162,14 @@ def _make_usage_processes(b_dev: Boundary) -> tuple[Process, Process]: dfetch_cli.classification = Classification.RESTRICTED dfetch_cli.description = ( "Python CLI entry point dispatching to: update, check, diff, add, remove, " - "update-patch, format-patch, freeze, import, init, report, validate, environment. " + "update-patch, format-patch, replay-patches, freeze, import, init, report, " + "validate, environment. " "Invokes Git and SVN as subprocesses (``shell=False``, list args). " - "Extracts archives with decompression-bomb limits and path-traversal checks." + "Extracts archives with decompression-bomb limits and path-traversal checks. " + "``replay-patches`` transiently stages the clean upstream in the git index " + "(``git add -- ``) and restores it on exit (``git restore --staged -- ``); " + "interruption before the finally block completes may leave the index temporarily " + "modified, which is visible to concurrent git operations in the same working tree." ) dfetch_cli.controls.validatesInput = True # StrictYAML + SAFE_STR regex dfetch_cli.controls.sanitizesInput = True # check_no_path_traversal realpath-based diff --git a/tests/test_replay_patches.py b/tests/test_replay_patches.py new file mode 100644 index 000000000..5eb95739b --- /dev/null +++ b/tests/test_replay_patches.py @@ -0,0 +1,541 @@ +"""Test the replay-patches command.""" + +# mypy: ignore-errors +# flake8: noqa + +import argparse +import tempfile +from pathlib import Path +from unittest.mock import ANY, Mock, patch + +import pytest + +from dfetch.commands.replay_patches import ReplayPatches +from dfetch.project.gitsuperproject import GitSuperProject +from dfetch.project.superproject import NoVcsSuperProject +from tests.manifest_mock import mock_manifest + +_PATCH_FILES = ["patches/first.patch", "patches/second.patch"] + + +def _make_args(projects=None, count=None, interactive=False): + args = argparse.Namespace( + projects=projects or [], + count=count, + interactive=interactive, + ) + return args + + +def _make_superproject(is_git=True, has_local_changes=False): + sp = Mock(spec=GitSuperProject) if is_git else Mock() + sp.manifest = mock_manifest([{"name": "my_project"}]) + sp.root_directory = Path("/tmp") + sp.ignored_files.return_value = [] + sp.eol_preferences = Mock(return_value={}) + sp.has_local_changes_in_dir.return_value = has_local_changes + return sp + + +def _make_subproject(patches=None, on_disk_version: str | None = "v1"): + sub = Mock() + sub.patch = patches if patches is not None else _PATCH_FILES + sub.local_path = "my_project" + sub.on_disk_version.return_value = on_disk_version + with tempfile.NamedTemporaryFile(delete=False, suffix=".yaml", mode="wb") as f: + f.write(b"dfetch:\n patch: patches/first.patch\n") + sub.metadata_path = f.name + return sub + + +# --------------------------------------------------------------------------- +# Git happy path +# --------------------------------------------------------------------------- + + +def test_review_all_patches_calls_update_add_path_update(): + """All patches are applied and the project is restored from HEAD for a git superproject.""" + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=True) + fake_sub = _make_subproject() + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch("dfetch.commands.command.in_directory"): + with patch( + "dfetch.commands.replay_patches.create_sub_project", + return_value=fake_sub, + ): + with patch("dfetch.commands.replay_patches.is_tty", return_value=False): + with patch( + "dfetch.commands.replay_patches._is_safe_patch_path", + return_value=True, + ): + cmd(_make_args()) + + fake_sub.update.assert_called_once_with( + force=True, + ignored_files_callback=ANY, + patch_count=0, + eol_preferences_callback=ANY, + ) + fake_super.add_path.assert_called_once_with("my_project") + fake_sub.apply_patches.assert_called_once_with(-1) + fake_super.restore_worktree.assert_not_called() + fake_super.restore_staged.assert_not_called() + fake_super.restore_from_head.assert_called_once_with("my_project") + + +def test_review_count_1_uses_patch_count_1(): + """--count 1 limits apply_patches to exactly one patch.""" + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=True) + fake_sub = _make_subproject() + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch("dfetch.commands.command.in_directory"): + with patch( + "dfetch.commands.replay_patches.create_sub_project", + return_value=fake_sub, + ): + with patch("dfetch.commands.replay_patches.is_tty", return_value=False): + with patch( + "dfetch.commands.replay_patches._is_safe_patch_path", + return_value=True, + ): + cmd(_make_args(count=1)) + + fake_sub.update.assert_called_once_with( + force=True, + ignored_files_callback=ANY, + patch_count=0, + eol_preferences_callback=ANY, + ) + fake_sub.apply_patches.assert_called_once_with(1) + fake_super.restore_from_head.assert_called_once_with("my_project") + fake_super.restore_worktree.assert_not_called() + fake_super.restore_staged.assert_not_called() + + +# --------------------------------------------------------------------------- +# SVN path (no add_path / restore_staged) +# --------------------------------------------------------------------------- + + +def test_svn_superproject_warns_and_skips_staging(): + """SVN superproject emits a warning, skips git staging, and re-fetches to restore.""" + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=False) # not GitSuperProject + fake_sub = _make_subproject() + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch("dfetch.commands.command.in_directory"): + with patch( + "dfetch.commands.replay_patches.create_sub_project", + return_value=fake_sub, + ): + with patch("dfetch.commands.replay_patches.is_tty", return_value=False): + with patch("dfetch.commands.replay_patches.logger") as mock_log: + with patch( + "dfetch.commands.replay_patches._is_safe_patch_path", + return_value=True, + ): + cmd(_make_args()) + + mock_log.warning.assert_called_once() + fake_super.add_path.assert_not_called() + fake_super.restore_staged.assert_not_called() + # Once to stage clean upstream for review, once to restore afterwards. + assert fake_sub.update.call_count == 2 + fake_sub.update.assert_called_with( + force=True, + ignored_files_callback=ANY, + patch_count=0, + eol_preferences_callback=ANY, + ) + fake_sub.apply_patches.assert_any_call(-1) + fake_sub.apply_patches.assert_any_call() + + +# --------------------------------------------------------------------------- +# Skip scenarios +# --------------------------------------------------------------------------- + + +def test_no_patches_logs_warning_and_skips(): + """Projects with no patches log a warning and skip update/staging.""" + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=True) + fake_sub = _make_subproject(patches=[]) + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch("dfetch.commands.command.in_directory"): + with patch( + "dfetch.commands.replay_patches.create_sub_project", + return_value=fake_sub, + ): + cmd(_make_args()) + + fake_sub.update.assert_not_called() + fake_super.add_path.assert_not_called() + + +def test_never_fetched_logs_warning_and_skips(): + """Projects that have never been fetched log a warning and are skipped.""" + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=True) + fake_sub = _make_subproject(on_disk_version=None) + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch("dfetch.commands.command.in_directory"): + with patch( + "dfetch.commands.replay_patches.create_sub_project", + return_value=fake_sub, + ): + cmd(_make_args()) + + fake_sub.update.assert_not_called() + fake_super.add_path.assert_not_called() + + +def test_local_changes_logs_warning_and_skips(): + """Projects with local working-tree changes log a warning and are skipped.""" + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=True, has_local_changes=True) + fake_sub = _make_subproject() + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch("dfetch.commands.command.in_directory"): + with patch( + "dfetch.commands.replay_patches.create_sub_project", + return_value=fake_sub, + ): + cmd(_make_args()) + + fake_sub.update.assert_not_called() + fake_super.add_path.assert_not_called() + + +def test_missing_patch_logs_warning_and_skips(): + """A project with a missing or out-of-root patch is skipped before staging. + + ``apply_patches`` silently skips such a patch rather than raising, so + reviewing the project anyway would understate how many patches actually + applied and could hand ``Patch.from_file`` a bad path in interactive mode. + """ + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=True) + + with tempfile.TemporaryDirectory() as tmpdir: + with patch("pathlib.Path.cwd", return_value=Path(tmpdir)): + fake_sub = _make_subproject(patches=["patches/missing.patch"]) + + with patch( + "dfetch.commands.replay_patches.create_super_project", + return_value=fake_super, + ): + with patch("dfetch.commands.command.in_directory"): + with patch( + "dfetch.commands.replay_patches.create_sub_project", + return_value=fake_sub, + ): + cmd(_make_args()) + + fake_sub.update.assert_not_called() + fake_super.add_path.assert_not_called() + + +# --------------------------------------------------------------------------- +# Error scenarios +# --------------------------------------------------------------------------- + + +def test_no_vcs_superproject_raises(): + """A superproject with no VCS raises TypeError.""" + cmd = ReplayPatches() + fake_super = Mock(spec=NoVcsSuperProject) + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with pytest.raises(TypeError): + cmd(_make_args()) + + +def test_interactive_without_tty_raises(): + """--interactive without a TTY raises RuntimeError.""" + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=True) + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch("dfetch.commands.replay_patches.is_tty", return_value=False): + with pytest.raises(RuntimeError, match="interactive"): + cmd(_make_args(interactive=True)) + + +def test_negative_count_raises(): + """--count with a negative value raises RuntimeError.""" + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=True) + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with pytest.raises(RuntimeError, match="--count must be >= 0"): + cmd(_make_args(count=-1)) + + +# --------------------------------------------------------------------------- +# project:N suffix (single project) +# --------------------------------------------------------------------------- + + +def test_single_project_suffix_becomes_count(): + """project:N suffix is parsed and forwarded as the patch count.""" + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=True) + fake_sub = _make_subproject() + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch("dfetch.commands.command.in_directory"): + with patch( + "dfetch.commands.replay_patches.create_sub_project", + return_value=fake_sub, + ): + with patch("dfetch.commands.replay_patches.is_tty", return_value=False): + with patch( + "dfetch.commands.replay_patches._is_safe_patch_path", + return_value=True, + ): + cmd(_make_args(projects=["my_project:2"])) + + fake_sub.apply_patches.assert_called_once_with(2) + + +def test_count_and_suffix_raises(): + """Combining --count and project:N suffix raises RuntimeError.""" + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=True) + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with pytest.raises(RuntimeError, match="not both"): + cmd(_make_args(projects=["my_project:2"], count=1)) + + +def test_negative_project_suffix_raises(): + """project:-N suffix raises RuntimeError with a clear message.""" + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=True) + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with pytest.raises(RuntimeError, match=">= 0"): + cmd(_make_args(projects=["my_project:-1"])) + + +def test_project_suffix_and_interactive_raises(): + """project:N combined with --interactive raises RuntimeError. + + The interactive TUI lets the patch count be picked once it launches, so + a project:N suffix would otherwise be silently ignored: _apply_review + only forwards chosen_count to the non-interactive apply_patches() call. + """ + cmd = ReplayPatches() + fake_super = _make_superproject(is_git=True) + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch("dfetch.commands.replay_patches.is_tty", return_value=True): + with pytest.raises(RuntimeError, match="project:N is not supported"): + cmd(_make_args(projects=["my_project:2"], interactive=True)) + + +# --------------------------------------------------------------------------- +# Combined multi-project path +# --------------------------------------------------------------------------- + + +def _make_multi_superproject(names): + sp = Mock(spec=GitSuperProject) + sp.manifest = mock_manifest([{"name": n} for n in names]) + sp.root_directory = Path("/tmp") + sp.ignored_files.return_value = [] + sp.eol_preferences = Mock(return_value={}) + sp.has_local_changes_in_dir.return_value = False + return sp + + +def _make_named_subproject(name, patches=None): + sub = Mock() + sub.patch = patches if patches is not None else [f"patches/{name}.patch"] + sub.local_path = name + sub.on_disk_version.return_value = "v1" + with tempfile.NamedTemporaryFile(delete=False, suffix=".yaml", mode="wb") as f: + f.write(b"dfetch:\n patch: patches/a.patch\n") + sub.metadata_path = f.name + return sub + + +def test_combined_two_projects_all_patches(): + """Combined mode applies all patches for each of two projects.""" + cmd = ReplayPatches() + fake_super = _make_multi_superproject(["proj_a", "proj_b"]) + sub_a = _make_named_subproject("proj_a") + sub_b = _make_named_subproject("proj_b") + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch( + "dfetch.commands.replay_patches.create_sub_project", + side_effect=[sub_a, sub_b], + ): + with patch("dfetch.commands.replay_patches.is_tty", return_value=False): + with patch("dfetch.commands.replay_patches.in_directory"): + with patch( + "dfetch.commands.replay_patches._is_safe_patch_path", + return_value=True, + ): + cmd(_make_args()) + + fake_super.add_path.assert_any_call("proj_a") + fake_super.add_path.assert_any_call("proj_b") + sub_a.apply_patches.assert_called_once_with(-1) + sub_b.apply_patches.assert_called_once_with(-1) + fake_super.restore_staged.assert_not_called() + fake_super.restore_from_head.assert_any_call("proj_a") + fake_super.restore_from_head.assert_any_call("proj_b") + + +def test_combined_per_project_counts(): + """Combined mode respects per-project patch counts specified with project:N.""" + cmd = ReplayPatches() + fake_super = _make_multi_superproject(["proj_a", "proj_b"]) + sub_a = _make_named_subproject("proj_a") + sub_b = _make_named_subproject("proj_b") + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch( + "dfetch.commands.replay_patches.create_sub_project", + side_effect=[sub_a, sub_b], + ): + with patch("dfetch.commands.replay_patches.is_tty", return_value=False): + with patch("dfetch.commands.replay_patches.in_directory"): + with patch( + "dfetch.commands.replay_patches._is_safe_patch_path", + return_value=True, + ): + cmd(_make_args(projects=["proj_a:0", "proj_b"])) + + sub_a.apply_patches.assert_called_once_with(0) + sub_b.apply_patches.assert_called_once_with(-1) + fake_super.restore_staged.assert_not_called() + fake_super.restore_from_head.assert_any_call("proj_a") + fake_super.restore_from_head.assert_any_call("proj_b") + + +def test_combined_count_flag_raises(): + """--count in combined multi-project mode raises RuntimeError.""" + cmd = ReplayPatches() + fake_super = _make_multi_superproject(["proj_a", "proj_b"]) + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch("dfetch.commands.replay_patches.in_directory"): + with pytest.raises(RuntimeError, match="single-project"): + cmd(_make_args(count=1)) + + +def test_combined_interactive_launches_tui(): + """Combined interactive mode launches the multi-project TUI.""" + cmd = ReplayPatches() + fake_super = _make_multi_superproject(["proj_a", "proj_b"]) + sub_a = _make_named_subproject("proj_a") + sub_b = _make_named_subproject("proj_b") + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch( + "dfetch.commands.replay_patches.create_sub_project", + side_effect=[sub_a, sub_b], + ): + with patch("dfetch.commands.replay_patches.is_tty", return_value=True): + with patch("dfetch.commands.replay_patches.in_directory"): + with patch( + "dfetch.commands.replay_patches._step_tui_multi" + ) as mock_tui: + with patch( + "dfetch.commands.replay_patches._is_safe_patch_path", + return_value=True, + ): + cmd(_make_args(interactive=True)) + + mock_tui.assert_called_once() + states = mock_tui.call_args[0][0] + assert [s.name for s in states] == ["proj_a", "proj_b"] + + +def test_stage_one_restores_worktree_on_add_path_failure(): + """A failure in add_path() after update() still restores the worktree, not just metadata.""" + from dfetch.commands.replay_patches import _stage_one + + fake_super = _make_multi_superproject(["proj_a"]) + sub_a = _make_named_subproject("proj_a") + project = fake_super.manifest.selected_projects(["proj_a"])[0] + fake_super.add_path.side_effect = RuntimeError("index lock") + + with pytest.raises(RuntimeError, match="index lock"): + _stage_one(fake_super, fake_super, project, sub_a) + + sub_a.update.assert_called_once() + fake_super.restore_from_head.assert_called_once_with("proj_a") + + +def test_is_safe_patch_path_rejects_missing_and_outside_root(): + """A missing patch, or one outside cwd, is rejected rather than handed to Patch.from_file.""" + from dfetch.commands.replay_patches import _is_safe_patch_path + + with tempfile.TemporaryDirectory() as tmpdir: + with patch("pathlib.Path.cwd", return_value=Path(tmpdir)): + (Path(tmpdir) / "patches").mkdir() + (Path(tmpdir) / "patches" / "real.patch").write_text("diff") + + assert _is_safe_patch_path("patches/real.patch") is True + assert _is_safe_patch_path("patches/missing.patch") is False + assert _is_safe_patch_path("../outside.patch") is False + + +def test_apply_step_skips_unsafe_patch_without_crashing(): + """RIGHT on a missing patch logs a warning, still advances, and does not raise.""" + from dfetch.commands.replay_patches import _apply_step + + with tempfile.TemporaryDirectory() as tmpdir: + with patch("pathlib.Path.cwd", return_value=Path(tmpdir)): + current, done = _apply_step( + "RIGHT", 0, 1, ["patches/missing.patch"], "some/local/path" + ) + + assert (current, done) == (1, False) From 94d46bd92850cbf3793be2422517ba639cdb1b9d Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 4 Sep 2026 06:41:45 +0000 Subject: [PATCH 2/5] Add replay-patches documentation and demo recordings Adds a "Replaying patches" section to the patching how-to, covering single- and multi-project review, --count, and --interactive, alongside recorded terminal casts/GIFs for both the single-project and interactive multi-project flows and the demo scripts that generate them. Generalizes interactive_helper.py (previously add -i only) to drive any interactive dfetch command, since the multi-project demo needs to script arrow-key navigation across two projects. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01A7miizBGMoLEXXZxuq6XUJ --- doc/asciicasts/replay-patches-multi.cast | 105 ++++++++++++++++++ doc/asciicasts/replay-patches-multi.gif | Bin 0 -> 66166 bytes doc/asciicasts/replay-patches.cast | 95 ++++++++++++++++ doc/asciicasts/replay-patches.gif | Bin 0 -> 185928 bytes doc/generate-casts/generate-casts.sh | 2 + doc/generate-casts/interactive_helper.py | 22 +++- doc/generate-casts/replay-patches-demo.sh | 58 ++++++++++ .../replay-patches-multi-demo.sh | 80 +++++++++++++ doc/howto/patching.rst | 91 +++++++++++++++ 9 files changed, 447 insertions(+), 6 deletions(-) create mode 100644 doc/asciicasts/replay-patches-multi.cast create mode 100644 doc/asciicasts/replay-patches-multi.gif create mode 100644 doc/asciicasts/replay-patches.cast create mode 100644 doc/asciicasts/replay-patches.gif create mode 100755 doc/generate-casts/replay-patches-demo.sh create mode 100755 doc/generate-casts/replay-patches-multi-demo.sh diff --git a/doc/asciicasts/replay-patches-multi.cast b/doc/asciicasts/replay-patches-multi.cast new file mode 100644 index 000000000..d68be90cf --- /dev/null +++ b/doc/asciicasts/replay-patches-multi.cast @@ -0,0 +1,105 @@ +{"version": 2, "width": 116, "height": 28, "timestamp": 1788372340, "env": {"SHELL": "/bin/bash", "TERM": "xterm-256color"}} +[5.676402, "o", "\u001b[H\u001b[2J\u001b[3J"] +[5.680506, "o", "$ "] +[6.683885, "o", "\u001b["] +[6.864418, "o", "1m"] +[6.954556, "o", "ca"] +[7.044897, "o", "t "] +[7.135079, "o", "dfe"] +[7.225297, "o", "tc"] +[7.315552, "o", "h."] +[7.405649, "o", "ya"] +[7.495993, "o", "ml"] +[7.586136, "o", "\u001b[0"] +[7.766537, "o", "m"] +[8.768247, "o", "\r\n"] +[8.771293, "o", "manifest:\r\n version: 0.0\r\n\r\n remotes:\r\n - name: github\r\n url-base: https://github.com/\r\n\r\n projects:\r\n - name: cpputest\r\n dst: cpputest/src/\r\n repo-path: cpputest/cpputest.git\r\n tag: v3.4\r\n patch: patches/cpputest.patch\r\n\r\n - name: jsmn\r\n repo-path: zserge/jsmn.git\r\n branch: master\r\n patch: patches/jsmn.patch\r\n\r\n"] +[8.778569, "o", "$ "] +[9.781848, "o", "\u001b"] +[9.962098, "o", "[1"] +[10.05231, "o", "md"] +[10.142522, "o", "fe"] +[10.232684, "o", "t"] +[10.322835, "o", "ch"] +[10.413099, "o", " r"] +[10.503233, "o", "ep"] +[10.593477, "o", "la"] +[10.683732, "o", "y"] +[10.864175, "o", "-p"] +[10.954305, "o", "at"] +[11.044564, "o", "ch"] +[11.134714, "o", "es"] +[11.224908, "o", " "] +[11.315138, "o", "--"] +[11.405251, "o", "in"] +[11.49552, "o", "te"] +[11.58576, "o", "ra"] +[11.766195, "o", "c"] +[11.856418, "o", "ti"] +[11.946549, "o", "ve"] +[12.036796, "o", " c"] +[12.126974, "o", "pp"] +[12.217133, "o", "u"] +[12.307419, "o", "te"] +[12.397667, "o", "st"] +[12.487867, "o", " j"] +[12.668393, "o", "sm"] +[12.758571, "o", "n"] +[12.848793, "o", "\u001b["] +[12.939012, "o", "0m"] +[13.940583, "o", "\r\n"] +[14.334835, "o", "\u001b[1;34mDfetch (0.14.4)\u001b[0m\r\r\n"] +[14.364443, "o", " \u001b[1;92mcpputest:\u001b[0m\r\r\n"] +[14.36451, "o", "\u001b[?25l"] +[14.445372, "o", "\u001b[32m⠋\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[14.525959, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[14.606559, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[14.687094, "o", "\r\u001b[2K\u001b[32m⠸\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[14.767851, "o", "\r\u001b[2K\u001b[32m⠼\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[14.848379, "o", "\r\u001b[2K\u001b[32m⠴\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[14.928968, "o", "\r\u001b[2K\u001b[32m⠦\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.009468, "o", "\r\u001b[2K\u001b[32m⠧\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.090039, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.170779, "o", "\r\u001b[2K\u001b[32m⠏\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.251783, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.332033, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.412721, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.493142, "o", "\r\u001b[2K\u001b[32m⠸\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.573871, "o", "\r\u001b[2K\u001b[32m⠼\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.654716, "o", "\r\u001b[2K\u001b[32m⠴\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.735346, "o", "\r\u001b[2K\u001b[32m⠦\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.816137, "o", "\r\u001b[2K\u001b[32m⠧\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.896855, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.906813, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m\r\r\n\u001b[?25h\r\u001b[1A\u001b[2K"] +[15.907177, "o", " \u001b[1;34m> Fetched v3.4\u001b[0m\r\r\n"] +[16.56548, "o", " \u001b[1;92mjsmn:\u001b[0m\r\r\n"] +[16.565877, "o", "\u001b[?25l"] +[16.64675, "o", "\u001b[32m⠋\u001b[0m \u001b[1;94m> Fetching master - 25647e692c7906b96ffd2b05ca54c097948e879c\u001b[0m"] +[16.727545, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;94m> Fetching master - 25647e692c7906b96ffd2b05ca54c097948e879c\u001b[0m"] +[16.808248, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;94m> Fetching master - 25647e692c7906b96ffd2b05ca54c097948e879c\u001b[0m"] +[16.888862, "o", "\r\u001b[2K\u001b[32m⠸\u001b[0m \u001b[1;94m> Fetching master - 25647e692c7906b96ffd2b05ca54c097948e879c\u001b[0m"] +[16.969341, "o", "\r\u001b[2K\u001b[32m⠼\u001b[0m \u001b[1;94m> Fetching master - 25647e692c7906b96ffd2b05ca54c097948e879c\u001b[0m"] +[17.050215, "o", "\r\u001b[2K\u001b[32m⠴\u001b[0m \u001b[1;94m> Fetching master - 25647e692c7906b96ffd2b05ca54c097948e879c\u001b[0m"] +[17.130797, "o", "\r\u001b[2K\u001b[32m⠦\u001b[0m \u001b[1;94m> Fetching master - 25647e692c7906b96ffd2b05ca54c097948e879c\u001b[0m"] +[17.211561, "o", "\r\u001b[2K\u001b[32m⠧\u001b[0m \u001b[1;94m> Fetching master - 25647e692c7906b96ffd2b05ca54c097948e879c\u001b[0m"] +[17.292218, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;94m> Fetching master - 25647e692c7906b96ffd2b05ca54c097948e879c\u001b[0m"] +[17.325221, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;94m> Fetching master - 25647e692c7906b96ffd2b05ca54c097948e879c\u001b[0m\r\r\n\u001b[?25h\r\u001b[1A\u001b[2K"] +[17.325842, "o", " \u001b[1;34m> Fetched master - 25647e692c7906b96ffd2b05ca54c097948e879c\u001b[0m\r\r\n"] +[17.345305, "o", " \u001b[2m← → step ↑ ↓ switch project Enter restore and exit Ctrl-C abort\u001b[0m\r\r\n ───────────────────────────────────────────────────────────────────────\r\r\n > cpputest [0/1 patches applied]\r\r\n \u001b[2m[ ]\u001b[0m patches/cpputest.patch\r\r\n jsmn [0/1 patches applied]\r\r\n \u001b[2m[ ]\u001b[0m patches/jsmn.patch\r\r\n"] +[18.308455, "o", "\u001b[6A\u001b[0J \u001b[2m← → step ↑ ↓ switch project Enter restore and exit Ctrl-C abort\u001b[0m\r\r\n ───────────────────────────────────────────────────────────────────────\r\r\n > cpputest [all/1 patches applied]\r\r\n \u001b[1m[x]\u001b[0m patches/cpputest.patch\r\r\n jsmn [0/1 patches applied]\r\r\n \u001b[2m[ ]\u001b[0m patches/jsmn.patch\r\r\n"] +[19.269549, "o", "\u001b[6A\u001b[0J \u001b[2m← → step ↑ ↓ switch project Enter restore and exit Ctrl-C abort\u001b[0m\r\r\n ───────────────────────────────────────────────────────────────────────\r\r\n cpputest [all/1 patches applied]\r\r\n \u001b[1m[x]\u001b[0m patches/cpputest.patch\r\r\n > jsmn [0/1 patches applied]\r\r\n \u001b[2m[ ]\u001b[0m patches/jsmn.patch\r\r\n"] +[20.231767, "o", "\u001b[6A\u001b[0J \u001b[2m← → step ↑ ↓ switch project Enter restore and exit Ctrl-C abort\u001b[0m\r\r\n ───────────────────────────────────────────────────────────────────────\r\r\n cpputest [all/1 patches applied]\r\r\n \u001b[1m[x]\u001b[0m patches/cpputest.patch\r\r\n > jsmn [all/1 patches applied]\r\r\n \u001b[1m[x]\u001b[0m patches/jsmn.patch\r\r\n"] +[21.182686, "o", "\u001b[6A\u001b[0J"] +[21.18336, "o", "\u001b[1mRestoring projects...\u001b[0m\r\r\n"] +[21.18845, "o", " \u001b[1;92mcpputest:\u001b[0m\r\r\n"] +[21.188667, "o", " \u001b[1;34m> restored\u001b[0m\r\r\n"] +[21.192092, "o", " \u001b[1;92mjsmn:\u001b[0m\r\r\n"] +[21.192311, "o", " \u001b[1;34m> restored\u001b[0m\r\r\n"] +[24.371198, "o", "$ "] +[24.372644, "o", "\u001b"] +[24.553085, "o", "[1"] +[24.643318, "o", "m\u001b"] +[24.733559, "o", "[0"] +[24.823733, "o", "m"] +[24.823967, "o", "\r\n"] +[24.827008, "o", "/home/user/dfetch/doc/generate-casts\r\n"] diff --git a/doc/asciicasts/replay-patches-multi.gif b/doc/asciicasts/replay-patches-multi.gif new file mode 100644 index 0000000000000000000000000000000000000000..d3ccedaa11a764abfe752f7005af9af02e9b3570 GIT binary patch literal 66166 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�U+mXDnJYzrwb^j3|wXjbfy9@0C93B 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 sML+7C^=+4SgO>cgmWL*1b!CzK@xYWB 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 Fetching v3.4\u001b[0m"] +[14.481658, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[14.562581, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[14.644215, "o", "\r\u001b[2K\u001b[32m⠸\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[14.724994, "o", "\r\u001b[2K\u001b[32m⠼\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[14.805958, "o", "\r\u001b[2K\u001b[32m⠴\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[14.886818, "o", "\r\u001b[2K\u001b[32m⠦\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[14.967834, "o", "\r\u001b[2K\u001b[32m⠧\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.048617, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.129569, "o", "\r\u001b[2K\u001b[32m⠏\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.210527, "o", "\r\u001b[2K\u001b[32m⠋\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.29112, "o", "\r\u001b[2K\u001b[32m⠙\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.371889, "o", "\r\u001b[2K\u001b[32m⠹\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.453229, "o", "\r\u001b[2K\u001b[32m⠸\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.5344, "o", "\r\u001b[2K\u001b[32m⠼\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.615274, "o", "\r\u001b[2K\u001b[32m⠴\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.696539, "o", "\r\u001b[2K\u001b[32m⠦\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.777303, "o", "\r\u001b[2K\u001b[32m⠧\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.858141, "o", "\r\u001b[2K\u001b[32m⠇\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m"] +[15.933095, "o", "\r\u001b[2K\u001b[32m⠏\u001b[0m \u001b[1;94m> Fetching v3.4\u001b[0m\r\n\u001b[?25h\r\u001b[1A\u001b[2K"] +[15.933771, "o", " \u001b[1;34m> Fetched v3.4\u001b[0m\r\n"] +[15.983354, "o", " \u001b[1;34m> Applying patch \"patches/cpputest.patch\"\u001b[0m\r\n"] +[15.986553, "o", " \u001b[34msuccessfully patched 1/1: \u001b[0m\u001b[34m \u001b[0m \r\n\u001b[34mb'README.md'\u001b[0m \r\n"] +[15.9872, "o", " \u001b[1;34m> stage = upstream, working tree = 1 patch(es) applied, open your editor and run `git diff` to inspect\u001b[0m\r\n"] +[15.993004, "o", " \u001b[1;34m> restored\u001b[0m\r\n"] +[19.096815, "o", "$ "] +[19.099071, "o", "\u001b["] +[19.279643, "o", "1m"] +[19.369876, "o", "\u001b["] +[19.460137, "o", "0m"] +[19.460592, "o", "\r\n"] +[19.466005, "o", "/home/user/dfetch/doc/generate-casts\r\n"] diff --git a/doc/asciicasts/replay-patches.gif b/doc/asciicasts/replay-patches.gif new file mode 100644 index 0000000000000000000000000000000000000000..a28a560d31d739bb14dfca30e42c5e889662819e GIT binary patch literal 185928 zcma%?Wl$Un+NB#BcXxLSL4r$gcXxMphcxc)?(XjHF2OxOkRS=J2}{1resgE;%+~UU zsxG?g>GN814v0&NadH_tLPUUr0RQ+ReTA13RZ$ieR1jrhWCDV{Jxuxw+T7BN(b?J( zK>7#)LH_m_!|$K|pXbrgu|GUqfxiaDmQS7|7iKlBM>cMEJtK$gNu(TxmwcOOxqu(N zl3BTnK6;wD|AmYI7dljM874!QI#qHF8!c73SaBOMZPmJ2a}SRcIeO6W7$sM^a@O*U z7(01%)A2KA_VoUx=M@=;hEqbr!XqrLtZi)d_yGo&mP=C8(lb20ynTG_Y#wW^#Tqa}l>;-|4ubzO!);BtP zTDp4c{3l|}IH8=Lo!?F&SL5My7LWHY1n#Ee`6B5|{%G#zZ%b9$oqmWsEoW;@)*C(1Jgpa7UEa^X5P92v zd>M+w{}{vDe)V-Kljjo>U&qbKVx@L(3}5Hn`DUm0D-wU#!{xzb=Eqq6?x)+cjm}TV zAA4RNZ%#LQV?Xx(`uXzw{Q8P)00KvnFz|;W3Nr|RV;nOGMB;}r3__EWFbu}h3o{JC zvl}xECGvwY3L}e=Fbb#22{VeIs~IzjWbA=4j$)aSFpg&54l|D7z8Eu(<^Kg^5+{Tt zX%a6+6mF6r#W-$~D8~-P)RA};_*$|666D8iy3f^ov4Foqw_vM51L%Ca~` zFT%1U!*0T|G{+Cls;nSJ%Bs91C&H?tqGrOXvZe>lx~gGD%DTE`JHooA<6^?Pw&xd| zP2B*Jv`zg8QKU`7#4F>ZP2&tdylvBhoV0E8vR?*VNRr7 z$G4hEyUvRqc>Aua8EO0OyX{E(o~MgR``%x_;2rwFk!2kEp@^d#2H@ULISe9wL~tBJ zlb3NE#?p^+9Ko}navUZ4gy1wr7Axa4PL&(wG(lH8on~d-x7>E3-M78IPrL84!O9_!;4BaNBg_CwghLPoLq4p0*Z@X_LokC) zKD<86AkKtC$cL(YMEkHof^QC?yl45ypJ0Ya;2gt57z$8h!-gp69K&U73ea<5hH0c6 zBUGviFl)nx8P=^FBX!OSuzO)fm?9jbOc)ArXTwH5R5(W4*c9ULz>IQEIL5eC6%u|A z8|D4x80&LZNc;*jCIIIY7sOCRiX1*BLgy48Wm7~>3_C6%<&=PuY~P=E6=}NI7RLR+X^ThELmAIcIL3m2mXJ&NxIkXB{w1~-uC|^1mvf;ea`>~fCmr)umAz#3NnB8zPArZQAvAd zX0oWLN>)1xnG{(jx2S<=EiYS&9cNfmj%$fp&t7~y3*QA>G z>yr77pwyJ~FB!RS8sU^uP}RWU%|9mbMCLlXRCooOwn?in*m zmrAig9)JWvPdMWUnp^=UguZhbl`j(LqjUtq}t z*~{Aq$%RGO%s&Lf$yU(J0x29|jjFB*1ys_OK}||QF~rKEf|HT^-Oz>Jf!i0`(>kO@^_O>L@Lx236ZjwR%KP`bQW)cU>j~h5{bywH-#vj= zo`#e`_giCnhBu8{z-D5>1qE=Lbodcbn2H{3I5mw)XgQ(e)m2*QP}mgGnhu)H2K;pf z@p-I=gUg33`s}vBt}zD>OcddvY?TCsMa4mM4DR6+krqU;9`U@1*a^`|Y>a>5ba~?> z_!srx2>*AueyeZ(XR^3{PnNA_jP?@k4!RnUNvGHiPO!u49DdTqa@5KS#XseAXb{4> z)+m41fGoU?T(B*YyJQx{-mRFb8epTbM_|=&1ip5o8b5&CoY#d<=qlNnS~lzSE|n z;Nt-U^ArdfA^J|M5D-pEAj2P-Hs=0?s_k^jGqdk^j}dVwy8Ho*bflQ>oJMFq1n`nZ z%64XQzHkPJnjT)k_@SSa*;!Gb{78h6AhUCDg_$xODVR$t%E7vWItC4b}D@)y0CDz$gq%Ds(6a1B%&1V zzfk^OrEWMwy}^kCNmbp>-8zrWhlJVV zn}sU7&YchJK616z2X|e5$bHwZAWJ|0pkVF5knjj=xyYDU$*{P@B$4Rkv~-4qjO-k& ztlWY^g#4n?oRYH2z1SBMQ=dg1(GGq@G5MpFj8ElYx zdTtqG0SE~Jz5xc;Hvrt(g#_z|IDi|NK-fAP7=i;^--bWh`}X5(z$1~Tek0(soqenJZkO2I}_=N1| z_cukXDRlDS+0-gviY;25VgRZZqpkY6i3F4K^HS9!%4QZnxJ)0 zv98(I7gbWIP07)M@b!0e!5_lBmNH5%@&Ylf&dS(xU4m-dKSM6Axu{nc99EpxblrVB zt?h%NKdT$UvOcRHqpCb>c%5QDJ!_m3qd#w2RI@&BUNx&cZ`pJ^J#XC&p}%N5NU^?X zKQ5`f=s0URz3BWgqCH@Er6gqEtx|_Q%l9q4WZFV~Z(=F;2FAHqy>=x0Jt7QLUS2O0 zH!w~dq8>6|Lx#^vJq73d{$zl`r|U8Rj224O!Xf0VKv=vG3CkGmW;=ya9#}@Pn9NsB zN)4tXlIyhw1e*_|7<0onh`weFA0(qJCla=k zTe$8_;nKBg-^tdTBCOH24h<@Fv5K-`62+SiSPVbv_T6Jw3L({|UxWr{9R66&4|gTf z#^NS1(6^QIeU{&msm0=A$*t_s{9%)OH^*uW8=zw+Zi{n6TlwiQZGmj5N{WL9H63Ur zfDZPn^pVE8SA*n%`^F^Dk4OEN z2C=?7%BfFdM>u8a)hsOyeK8Wvf*&nSy;9*uK?xu0Xp7A2-@M?kYVegi!okxwwy*9@BN=IRrg5!2>#86LDr}JD&d|lS# zjR$TLIz(nkQ7FhLr@L%6_2VIxYHedakYDvWvt zn9E3=A9ypd@RnddGL|g(V=(4oOwfCz94x&43Z$#hl$JVp=CY{(a6`cxbhh zUiqP}8xIbv@G!S+5}p8`b51bTKV&?5TS_^nF5Bc6Y)|$@H(qgmZZai?f@I~CvE_^2 zYmwAN?@nT6nVqY~OtKx<7Fa!bI0?z}7Sh*J9r9O2*^wPc-uaabA z=z9jj@j7)J;$AcFyjR*4#*W6ppDKcSaQHW5J27k9B)O)Yz~wNsS#4ylZOS$p`!m45 z-$uBKZV|T}VRf7>Pap=X=nObT?n=CPETwyFH>x9Uc_~eFIG?kxb#;at1~&N7YMLyN zcCMG7GaOj%d5p;ax=NevI^>vroLM1Bsswbyip&x$2ou7T?pS8q7}$JI>)DW!__@L+ z*Fwx%+Urx;&}j_qp^da%#Jc9&Zx%i2`Q3}g)l*(AA#38ONssHB4kH)p_KBbU-A+`z z-5n6=rRB%Q?#Fl3pHo*<9Xt>+kfpr=Rh7gns!4Yh)Qu1n7aE=_Sv5OT9s_c!WJ;e-aUvaLZCQ8Dl;w%OACgEKk zN(D0GXnv(Z;}mZ=!pBPUz)AFXQX!)>cVgZ5{|KpK&4RN&9H0qii5eHUed(7=;eB(j zP%au2ie~nB@5Jn?Dj>?FyPz0*np@pwnRm)h;?%K6x?xUhQ z4~L(=jr#Fx5Vg4*hB*3UI)T|ecsJkZw^8fS1XxdxQiQCC+QEGC_Taev$Ar!u@DufJ$7N^1F zJcyPbgX|B1c`y;$OA%xOQWs!6E@|GTNs(W$RBu}N#SfLbvGrWa_yGNj;#gSq%3BQ*osrvs$~yAvOzPgQp=t~*IG_LuCMGp z%VzcxL0aO0`$sBZ8gHM>$VA3)h{K(b%Hj#QzyxSiq*s9-6U`-|h1^1HrBbD2skDAk zheB(7U=EAt#AHKEOF)(gal2LK($qA`MS${kku3Q$BT z*Ar{?r@BhwZg<9}!O5N%TpadSS&QZ7aHhohgi#kDeFBsl3}t>y_;r||7aWwRlIR5y zD8-Sas){YDZi#Y2RWcHEJD7^6o;0!;fYX-(eUcK)5^#&{2|A8Xht#wRPi_iujrWX? zFio|R)c2RPVQGwuZ+8{)ca#cC+G9<|T1unSq%nMmxxevgfK9NP$EsG-bkqQQz=`SM z%4~xTd3#=sTg+o(V7F#w^GUD(EORGi$UcM)aiI>BrF9Ifc3VnhTSBn-GM?^2Xa`q( zIJH5ASd>4s-5n)PC%ca?cGzOGzO#$rtVd2&N{+opw9jiR@u#rRt5It@e|=md4<&^# z9DzIq0UM|%VCX}LR=S2mTwYgrxCAHe(`!LaTtv ztAHk>fKCdoA&}Ub#=L0^9GBEC`~ivbma}0D92O4ceFo>|YUFgQxph17tf5r5fPb$W zy(_lw0IrF1fL6YcfJ6nSK_PlodCan<(mJOq%Y2~%_E6LDvELjXW?fS zdQOue=RzSkO3MgN8B~{@xsuvN(RxaOA1H+nN~OxwXzJYHUMy6`Pl<_%A3vCAFIooF ztCzDCTv1-e_+NvzAnwSo$WuA^-sjK~54-{=Dvu?*wk@!NIQC8fL z?iz&twLJ{HvADe5hrK~{k_JvYs1?_JaX9AH1+1aHtiL>`Nm|fQBMT!S>$N1S)?4?1 zq!SsOqX%CN^}%#Kv{S#V)2dW4M(?~9 z3dGqZZB6HNeMi31KKleAL-ygfHcfhx`whRvQfcU!1Q0H5uOwkl&_<3{D5buh?m^to6ofq-7AR=t% z4Dtn)RsV||_&@DoYJfJ_zglen?g{z)2a7Gj_#|sVf;)%_REp1g`4;pD^aX;xd@zOu z=MFQ(p}T^D4E&+qH*P^{_~pKApr#WKdk^xU4nL3_rz~amOB^0bRxhL}qW$K%QWhJO zjsn0m03D>sNaw{CNhii06(38PL>tGOOf2@t7J4(=0Sw%4p#Q4Sn>qAHq(2IQ(?@+O zm^?-Z7Ot07UK!TBxX|6jiqaR)AoDV#?d-6kDdWut|HGpQVR${ zJfeUj*EX6>hR~NrYhmH~j$L9k_*@wSQs&4F+|b|AM*>BPpDdV=o0ng}*o@apHwK$I z#R@CkGM<=9mx-OVFu$1MUu<&qzhVD--Ms#*4M_{ZlvMHzby-!HVGRlt_a`BN@GjFo zlqhwhd<79kO_cOW`m3!+GS zikR>?hA8Z$*yz;1y7^Xr!~Ay#*Y7`Bj#~hP)RR1=yoMC`zLWKiwyp}OfB``!34~z$ zsZ?Av&fpw41qmf)v;bogCPs5%5K{#Dqs0)Qy^AY!6zy~zVI-`6%f!F$=eIKr$+-n4x3< z%;3E3@Ph!Q9y*viTLKFPdT>{_0BKh!BY>Y{7(R<&Xgnqzm48B7x=I#R4p%l`E(yn< znLztJ6LD|I82@2wytTqVdiQ^}M%*}{GHsf_>*g@Y-G6T^8J-y+oS)YZHw8lV5@be~ zGAx8xhJe|X3=7Ps;c&+F;fNLzdwz#WmqKp^=18x%dcr*tKbEHSm#vZUH?97CX#R^< z{|uG>3=Lc^i27kmfh!J-br;7>67)7SOq8F^z_e6Rd{(w=#s5`=TU(Fe2-&P@EkX@dLH<$wu!bBH>1?`g|6N4lN13r5cRZJpD zGDTb(QN~|M`~ODz2lLOe`v>XY^TfX-3_T)WFod(=AqVq<;ZRtF2gIo9xnbad0_Jaq zuk8F>5d%t#h;0?!WeC^C_7SrJTu3Y4`?(afAdo)qNLcwn4t9dzmhKgjr7kF`ZGAcNzMNA$h@_||8G`j0fbe=V-kpBsSnf%oTXaLnJlY1Uq^2t&RJSx0a$?t!?rBl7d@so-qG0=8ibXK@^R!X{!Q5u!pk4 znl9?MdwN_)5Gefno*E|Mk^H`=(VWVR3R&z>IzT(*-}jV>K|GQwnu5WLJ%;3M>7`;v z{iAknzjp@&*uUSs|J`+OTK%qFz<;hC;y_+LEo>bl#OU^B&oK)I2wX59zb*)r2@b)R-nXPkhB0&YxXFuekw2TBewp=XvC*N$ zZ}$81E66_}FeunWOWTEDl?k_a7p&b@@9RyLo%5N6iV#w;eZv@D}fP-z!|A(dmrU0U3R7K|s-C|Br=vq*7x;dVF7aMMnU}`miLEd zZ6T0qDw{8qP>w!ho5}l}i9K!zuZl#zWXWO9pTH$sp^~7G7(poAQnl8|L$|P>L9Z^? zy2;+M1$j$36ClV|AUxSxyVDCI>@c-TUNMMuJL>Z_OFPmHVypC9YUil?I+@05jV0P> z_;or@IFd+KOTj!CO}bKVx}*7Yh2L;8NA~}f6t!O;%@s=L%5`_#o~|}p@62>}-hc0P z_k)t}>3Y1j1?1!i)CnK~24ECk$9Vv-P3Sy- z6s?Cm7;u#_p%^*9YF;oumB-t<*rn-@q-8%jNJRdMnfP8t$dMQp5?q2j3V^U%7$S|N z+3$zDN?NZ|pvJ&elQIJN@E?~#i02rWpeLKP83&S4eLF5ME3sOakk&jf0=ezA59j!* z!O&!6VUY}HKX^!%Rs2qhu;aGLqf@YSx#&xpH;Onr@mzmuX9*^vU7 zF(Kx{NC*Uh$`VkA2B@Y(2Y$H?e2){5!-q9a)%tK)SqtYhb43^Ea)I-uH{DIsBp4fx zl_V4z2_`=Q$~mIH`&rHAau~T-m@{p@m-B$VN5j3U+MYMiFD>S}_a_3UbrX_Vo5 z>cfi7^)%;E)%6VT{n_=b0Q9??InJsTVMr!5@BU^t$6dyG1@Y>Hd0rCV14t7_TRO0&Q5v+k`KB^ALAxnOo{PMG(ntNh|9_1vP3}F#MWeD!L zd13HcyKD_1&wO9jNJw4-Z^^7`0=VUL$jRTsxe8{l417aOl{2xe zE>Fkz%lnoJKi7WHcC>wtF_4DXx>pg2PqL3@ld&JmX(U-)k5e_N_v2Y6v;VsUQak5) z#Y*|}-R3EZ?DuX~Td@5lb*s*A!|Gx0f_Rj+`?G5U)2P3<%hi@dE`OZlT>s(z{q>a@ zfa1TZigGDf=>b^*N(sZRM^v4#F`O58MWFr&UuOqjBfRT>#leG;f35&P$cI@$<9m(= zIfe=?{FqzmyY+n^fSX3LtF}UWVhFG$kV%BDXX{6O`Vkrq76zusSpl6buQ+l&|4wQE z?8p($>nuV?FC~cB($tW1-KUegB51-E zY2%7mt$Q2VGp*%Thb=(I^7E-}F$b-xtozJFFjH-%q`aAy$=1wPdhMfRiiC5JnZo_( z;Eoky(ZUp375}9AJogHQ`|FY|Dd`sOeFGH|cv2Gj-dlxgo z5<+dJzpvkY(-7hJ50oAgv5eTdO};gL;;37_Im-|)jhS9QPwCBF?;+hGFFYqzHpL3q znzgp#)J(^ORy)+&OcCo?;6S7cOZ0E9xU%>kK)b! zC_EL$emSm@v}|L;a+zg@*2eO-2*aS$1F^?-Yz$*d z!@nd&=T_R!>#H*@Ev?h%cHYk$yGX5Vqlj2enLH*cJgptm z->Y6ivzIK=C8X7C1N3KzufM!|YAz$P-5>i1KI7nRFZv$x{rzecSbquI%ihG}K6OgM z4=3y)EF5GmC#W8WnAEv_nxob+bvc3r@}UD69}mo=k*kaiv3%dTb_vxx5WA z3a|v17^`CQ!o^1=GKiiU&1NZjrePc^4B?(8sKG-#8ka!rEa4 zMWBn}E0WOP-QGR;4p;Z@FZjTq4fzu0_B@#~<)MNc8qu2sp6PaL`h%^+1H48sCgJ&C zg9~*oj@-RZTKym_h!InKwnKTlg!!(H5E*yf9={s=6!-Jx@ULzV`Kb=V(*W;IHJe@3 zrRW1K?16Vs8fzK*H>&&ZyZg^`*yFeP<+O@FHVHbnc-@53Mu?CdB=CBw@k)H4ST-_~ zx}lpa4EQC^rF)6^zAcCl#iQ+3<{JwcPCw|1LjYsf1Lhj6u*LEy=wrgH&gT%9F$jAcV5FIzP#m7?YN+2sCSV*vF%OBt>mIj?`yWgJ|OV zRzS~jWtdNHUceq?Rb;PJq$Xg&QFO)Y2BlvI9wAsjdYh)Do~F|AgO*YRmuNnY5LKjc z)%l(&#z(^`W*+nBTWa?3k*LW*yoK`9A$MB=FJ9{h{5Za>Vu`COJ@6CoTyTpyC(H>W zbUNyY!`1+5_e6afBn((#sTFtnJ;#%_`1pMeTqhC8Mq0ikA$Ts>jZ|Z(@>dfms5n5O zSG^Gp&lOp*d2&mt+a6dF(87U}D+Nv5IZ46+sSH)*k!?{ma^eGEUsz1CoF8xLqb)jZ z$RK<}zz6vQGrpw+93jpFRk~R8$Y90rEf}n4vqU4#7;ei%TpBdf_LS_T4}F12xx>~* z;{o>Qan+vX9Jnb4-R<7D!jB*uZIJhD5soqP;X61Nm3 z*IUZWY%sMbg1^TB^`Ou&HkiL?yjOjQ^|>=S4+zX)jnZAFm<6w6cQ8eKlO_LDuNL!4v`M{n-P;3=CVzCX7Y}{i) zZTP@kjEo#$aqN-VVUcHbiDB(xA4N)Z2!o+NUw}}dZ|)I#5)T}7z!PqV7R)FdYAQUX z2-V%q6{+wR6;IX(SuSau zP(55yp|l9-`DTrQRkdec4TEKxzm}@pUPW`OrAg~i$Z6sMsgw!n-|baBl~PRRSip)cG)4h3nBNiQnTD_aPd?F6jLl4ug3gZ4gFBPmtigUS#DRQ5)H=8 zu*3{<(x%VKn3W1Rl2IiO(I5z=H!oHDM3*c_S?!ByNRwGVd{^E?9yD4ERy?6$HJnrR zEjCx3R8GvCwNfR^Irn;ii{e%tBhpmF`u#80iY~7v#*J6&fT#R~=3sX<#juY2ik32+ zV>gvaQy>I0UWQtUTah78Ak|x!+%_rShwyelWQ+stD_i77Tg2&F4WwG#GF!bmTYWZK z{hnJv_-z3^Z9&>?A^3I~VK%OnNS`|3>Rj8f65HY)-9QN;`b@P1VQN`Vz_e4a>{BqT z!<0CB7U7E8lvBvuNwD|JZCr63C3GE65S@h^ga&EwU;*ViYS9|fjUlN_Qf-~d*5%K5 zbm|BBEP44_kcYB3q1HBgEPQe8=2!eJR*6B}A{oaNGcT|{3M;#b(xRLa`!x*NTT znm1tb&3V371ez@5NO_Z9lqb41HX(id8k_r|QJcA|xC|90(`%9;aMd zG1fL1$e;5SBa6b|HHKZTCb_NN;ntz?p+E4_K7_2pfcMw#8s?Fqk=Cr)@M`$(T!*RC zCn`fEo`ooRCa?hW(R-X)xqURuC|Lf$uYhZ?&|?_hx?*);D3l??AVqL|Wm`ecMptj;lt$XN#Spzw8wpnh0#p8-X9z(5J?Cs4@j-qBUA&7g{gxk*7kr5QB*utXd=2NbiTkURZ)$e(x-BogCp)wU3b#Ayd7tm5o|ZAFtN5 zUD2Da$QqHVd)YTfKxNt zY+dr~kg+{&Y164~Q>M;oQ9T_g7KhV5%FHOvF)+*bqQBkhN4+9>0Y){ zSn*b9@$_8{%U+G>UX9vXjrqA6N4S>2x0a;422fFYPeR6Ez4q;}Lm-YKi+sxYplOZ^ zSUkDbd$1<5yOJZko=6WYjb868icVpt3~GrcQm9-o@tSqA_ewC6Xv4X5i>ZIN(XyD} z;y@0rD|j^Syl>*e^$?xi_knad7abQLcC=umT6x+MdWMy1uCX7QTUc*!f*c$-88kgX zm4sYM$S=ypzn&!|DYz%)@;tcSm#`r`z)CfDY?XB);4!hH*5+4Pab`#j4QxQDi zteiWad&%QFwcTnzj!rGzg1C^oLWG6m7q)`tups9hZ$uWl5_raS2IEJ;%=rS={Dt{) zE74?!X)dZ10+J{v&k;5i@M|4YW0QeV`c@aQ7ChC~EN8MbrT9+u@G54{Atw^Bx$of3 z36>@CYahHhlc3-^i$(J{xm-79kB ztNL@Y4@?M|lhGV0Qx)*9-1}|Mp(sTbkXs#riU5 zbReFUV!#Rx)C{;-dalb4kIQ``QK4w!g>Lew4`bqBRVu-y*SvnfAe||ao#(O%qHg4a z_GucA{usq|`sQJ~nwA{G>(g0L%D{?DfwBmJM|xWEU!8<;7xlvM&^o;1zcwM(O1ct! zP2{H03ioYpduI{2yWSR`%$yhen@`r$WnvR<$2P)*qZlVwLvwn*vuE$&RJ8z zec8T7`ucD&_a0Z{{sp=AX-5MXv<}py(;PoTFpT{*7{V~^E80N*(~QIRa@pS)@%U`; zxr$H!JSOJLOpJ{3-K*F`&(5kvhE74UdVNir5*1+Q<9R4$1cP?}%dpmC$EWF0G0ow| z;hLbc>(=d!P^WhekMARA`aWhP$|)+G33Q1V+>ETj%%ZXTgzMaPt_(+ z`&~N6$AT$p zw>TJxN-dAJGvc++{C0{sVct1}-%dQ|0(k)iaKI#_M=R5B0-wK2FmqNU2*TZ|74)RNr4qDZlcs~!k#T}p~79PR;_NM=6! z2f-iuIx+xCEn=UtZmI{z26fd2eBkfM6#9S$M96Gv1jh$SVqyh~3&;wx2@l~TPvb|U zj*d?#_OpvG%!;vOELUr7Xm9Fl>2B-o=i zbNDirkZOlyqv@fx>s0%lUxaPI?GFkz34P@1GD?znLP3gxcVStm;*6a)N;rhZ1kC*#1yd{%6yY>;!mOqk z^)kPPc&~e|^0J)!cKAhXXWo^*T*(UnyUAoA{bkVk0iQAI1r{@I+ zUx$nb^3iss8l&s*W$GKUXLpg$0-#%wEwiicl-;MegHgs+blWwO!1BzfaoF37&*mb zF95S-v07o;F%92__U^$rP8iG6Bte?}(IiP(&C@hR+wIXb%{ax=EW^6x(Jae(+0#77 z`|i;^FA&Siq978=5+n$B1p=tud&>jO<+Ro0ty{HhxKTsM!jv6^H_mTogf{PdON%b6FT)S-&4=*`ZQf#k`C;=xfICFl>y@N0 zu6lO0FSwn$3=OxM52c8HoX=4heeQF}{^j_-hSv31?}Gp$V6Kb+gvJee37DcT?S@>W zd;mw4WtbyzkxjVR43RuA13ol)mTg_bs@xyA@3vB9KYq3qfAKo|ln!Q1q5`c8bs#9f z|9A-41>E4vS#;me7E+t|DyiWFV_3?;Yz2u+SZ3KHbeZqG{5W9*btVFy^RPPvSHF9w z0JdR}U^+U#^nH3&Huz42)3vcRiIslMC#f1R! z>OPGR_N`oz^ooboBH#pVK^d6y3w6~I+j9EDtLJf}prC*-emZ zaRdoT6hl%t^U=UOTFFx8Fu8rUpr<{=s6ho$^Q-z$63`tO3qPD(e~_W*{}4mlmh*Dc z8Ce{NYk^M)0MF5wSXr1C19Z%VhEo8cvsNQIAg@pZqXdyuXat3k7NUPe?r)WFifoUg zMi)|;qCqh65o6ee^qrd2E-JUm%FM+nn1CTXTZ~DzAbS)7b@7c;V|sk!5$a`fo`^KV zC1UK+uZ@Y`eNte*eaGxlU1f^2JTjk6yjmJJkW@XXI@6^A$3f#@1T z3M49mp+hPLlxwoL?wJ#MyY{ix=N@L=O0>a_HA;KW>U_5Eek&FGKOw!RpY^a3_WF1o$U?cpcTc&`{(!77U^%CQCCgc%|^smWVV zyg$~xcH5W3>RFRAh}_H{5_ZqVYasu$>iJ7L8+x0fQKs$DFUFZeCR3*E(vjeojA8MS zCT_x{VcR=WY`JCAW&64QhT)X~Y5Q>wx|AUp82dX3<{wL84=o-&6Q3oY+dw7AC2$OJ z2Vt26nnmwLz?>sJ`k{NtgF+9!9BoBl2!3B44Wz%+%+^ef6uhFQz9be?x1HMR_yM*h ztgdqLARgpz*?y!#s~|96&+~d#(aQdRD7y=`I@WYu)G%;&cXxMpcXxMpm*DR1?iSqL z9fEt%pdn}=gfI?sX0GnJx_kHD=N~-RSMOV+E{eLJOQyGnS)i>EL6Z|ZVt~;IQ%}xo zKP&L-n4+JcHrD~3aIErxw;tOl953HylBj78ty|w2S@3yJeE9yUx_FRc)oAgOg|>W!qqI&txE7oVjw<>)8~yY(s>m#CV+|L}BU9TdnB2Wcv!Az-rMrxhSVm+KUqKsjgZ`&dRvF!U`qJm*jUTCyObfUA-tmJh(NyTWAAGY}~y1;y{bWPGhtY;7q6geYbkDSm7a0 zYiYV}X(=Scl-%ShO}r{}vsAxbPSlmIn>I@hb@; zY&ae`-H3L0h+FGm6r&I_=K~1|5(t94Fi}_Xh(a!yHF2GewqRo@0iij#=GpKlHm8kT zm`&J#5O^&+c4&oi@T(1Esu-JdFS`%El-rC1p?{tM zJeiz2ncQBPyjhw29hrhFnZj3@B6!(ieAyCkW?;O2tH27|Iw`AVX%l}<5o~R-nphKM zQr_3$mI{B+)o9!)mufoJa^`IYRj~U0?1FU|{3lx3HuuOD=?9l~0GS5d28fK(>TB~3DvH#2aBmu<_=t0y;Y9@W7PIEQIk zFP7~A&!gRv6Udzf>7AM15hYT`|MVI>EY`$ftT49&y5io1DLpq`H|MZe1Hv9AD?QG4 z5k|%f(FPVGgvPMM&$D4545T&2zbL@*8W-nIipz8Oo(e&@nKn3oE7r%ft$jZ zjWrY$*rIe5w=EqL|WLb+`&TQIm^#xx;GJ=ejmG!Krq3DFbP+n)b~~5av{5dpicGv5Q*GB!c1`qK*lYkh=Rl>AtY^te*P=JYRYeT|9^o5oE`mr$V z9?FTk!i--MYpU@EKRb2|Hcg|BloyWXx`C2|7c;$@MzEG3F$m476&SBWPfUl}twpNJ zrP!FS|8KqI7~X zQTdC$I$pQRL#Huar-?wXnL)2bK(AFnugyTO-9fJ-K(8}iuPa~AUK?JbRIj%lx5r?r z_p4s^re5TO-p~ooAc21O$+nxofT1bNlMhvO9A1`hVfjV(heMl~a#lw9tcT9oo~+3p4TB24WarJDwtOrqV+?7z$dnO0^zaQixNytG zR$@QcwQvKqbN$9Cw9PhyEs5<-4_w!&_@>Kot*?bVjT!;;NNC#KLaJRt42gkk#Hmuv?Ah0ft^wna`oC-v6+L&Yg@jw+@cY;Utyi}%CN?Hw@bTjO7Wo`yYKA?x&4KuO^k}k z4hgC=dJK+yXGF-{O{op_PA*|j$YKQ$O(D1Hux%miIf$Ix`CU`t0(wK4-f-EM2UrBn z-G4|a(+^=O8p->l0XZS@5U#VhF}o2J_c)@DmHLlb(@o7)4$DT`WxZ)j^&}M2VpaBQ z*!RW^Qo(%18z!hHmU1oR6w~B`(YXwf&HS-B9gk)$FsTsrRri*E31E?F9;o*ZNoT1G zNz;Js9jtO-REV0L?IRFknhx!2i5wzlU|}d?!gFQ}8(97d zIMhTr5ZvaF3}>Ma86YD&azW&=-gDP&M z>Tl&l(@{wI8F=D>l{ijcJa0uK^CijC&_WXs;lCS!4ktB~RpAN$VsJs-a6uh(;RtO} zUjTP3keNJg+nj(2-GpA#AMVR&*Djdd=4jW6ncb0K*Ikj-)nL~S~Jc zt54NcT;CN1y20huuDkJu{LB@qoa|D;*CoUGvNp|v5ySl>PUc^GZmgV(Z=e=t;rAyB zTY}dH)|6W=)F+bCvdSt>b6=4l1k;W-xZFD-=LO2*K#7Jsy;l^E5x>>_u=*l6D@3P+ z_LcSUvKA;;ZlY|kUq92s$Z+MlCU%4A^oogpH&1%68M%;BI(w;(bVOj*W#C(&_+LB+eJbzL&$dh$Gn3s@synzyOY1njX!Id`{sm1=Ff@>ETnD{Mx>w3)|x^(~2WRq`Cm~ zC&ENmA}tq~i*KhDE6}vFLE~MwaSclbT6jWt&bIhVv1jQS4m3(`2EtqS^;$EK+NXIF zL5)(}Th5qgydvSXtVDcAnr=cLBl=(6M2Or)ncT&M+{KmLC5+r9o!q59xJxIx%M`lH zesl-Q4Y!1@qH{zNyR{A z^WbRRL>4v0>bxN5{7=snl&vQ&hAJynKWsTa;t$n?S>DSJ>eiEu`JY#X%Y#>6 zyqmS;TC`Mqg??6Oy{zc_5qE6tj}rDy7oH`)p{czQ$_8dj-Ge@Y&s9H*p#miWwm`WCQWT1SjJA2} zRDt=gp===D=uscOM24NiP@Y9@y7d9^I|F|$XhUO!49%&6XW@< zP*8VU6=;Tda0-6>eE;)J$hc^q*rfP?q(lX0cA{i`P>GP-0JK!5e8oV?+_dtP%DU=| z+NS!PhPHYpZ{h+|iLfrMc5-ws)l%A#*6HInCg;W*W|yX07T4xGR=1XWHuu&Cc8|74 z4$t=QoL(JIT;83}+&*1DcznBGc>Q{Q^7;3^@(1+&5(w;n6Z|j$6dDWy0HILnt#62j z!(g#k?ayvVMx#)vRO_s7Nyp=Gxm>T#ZpkK-NTpKfZSKgY(`dDt?a%KhX0uqWmg;Qo zDd+Qez3#5g@2M7xL?cldY#*qX%49QH9WEYdR;pAhRqJgZY1is>J6ykBJko76noguJ z*nOwpYPDT&cDVe`u+!;!x>RrX#JJb%`*ip9@`-7`iENLZW)OA|7DN!9+0y>~t0ARi zuxg)K355jW)RxXkdRVs9d0j}b>bfJygTb2M{G#BIXcOdUi^_2i?HS9lj@Z$u)}LaI zLKP!HYx;aMIjUpngO|uncoY%WJ{<3Fw`~Rm`T53gDf>3#w15wKuRh`<%l;EB z0V{rFx3%^it^I-DUn@OTtcr($?u4z8+72Ad5mQi$ERrDb@jTk22=D(?BMMJ29Z?L85#f!Ch=zCo2&JKoDuUz_Hrba$<3UUIek@HO^ zsG+7SVu&^iVcFZ9j#;+3z(&ccHh~1C=seiUSw$eWFf|Tg-UOC|CR`jMU&=^_fN-=P zR9DgE)nwI>j}KWx)duQPf9%K139XYj)2*s$FIltmUMhdOs@tZ;r7qa-=DEg>R)w;& z#3+ibwh!h!t<210r3Eh@p^zaVi}j_08elnQW`Mpw%--sIf~;~x{f@geG}M_f?hJ!U zJwD}pZ-U9-EWwy3I+Ev#Gu+rk3Fi`@1PkqugI=RdS(nfd-cQpEf3b|iRuA4>ed|n{0HBj)9z&z_`WD-sRMQ-W z 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
GQD`0=&!-XcNu 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%0DqqBcnibnO!9p6WMUb4(TGN9gt0JM4K9iCh2991% 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 WzymJuffKyo20u8$6P}_F0028#^dye} literal 0 HcmV?d00001 diff --git a/doc/generate-casts/generate-casts.sh b/doc/generate-casts/generate-casts.sh index 5ec894f44..0ceb7ca59 100755 --- a/doc/generate-casts/generate-casts.sh +++ b/doc/generate-casts/generate-casts.sh @@ -28,6 +28,8 @@ asciinema rec --overwrite -c "./report-sbom-demo.sh" ../asciicasts/sbom.cast asciinema rec --overwrite -c "./freeze-demo.sh" ../asciicasts/freeze.cast asciinema rec --overwrite -c "./diff-demo.sh" ../asciicasts/diff.cast asciinema rec --overwrite -c "./update-patch-demo.sh" ../asciicasts/update-patch.cast +asciinema rec --overwrite -c "./replay-patches-demo.sh" ../asciicasts/replay-patches.cast +asciinema rec --overwrite -c "./replay-patches-multi-demo.sh" ../asciicasts/replay-patches-multi.cast asciinema rec --overwrite -c "./format-patch-demo.sh" ../asciicasts/format-patch.cast rm -rf update diff --git a/doc/generate-casts/interactive_helper.py b/doc/generate-casts/interactive_helper.py index 1dd7c8fac..81d65f05e 100755 --- a/doc/generate-casts/interactive_helper.py +++ b/doc/generate-casts/interactive_helper.py @@ -19,9 +19,10 @@ - ``WAIT ""`` (optional) waits for ```` to appear in the child's output before sending; omit it to send right after the previous line's delay (e.g. repeated Down-presses while stepping through a tree). -- ```` is ``ENTER``, ``DOWN``, or ``SPACE`` (resolved to their - terminal escape sequences), or a quoted literal sent as-is, with ``\\r``/ - ``\\n``/``\\t`` recognised (e.g. ``"y\\r"``). +- ```` is ``ENTER``, ``UP``, ``DOWN``, ``LEFT``, ``RIGHT``, or + ``SPACE`` (resolved to their terminal escape sequences), or a quoted + literal sent as-is, with ``\\r``/``\\n``/``\\t`` recognised (e.g. + ``"y\\r"``). - ``DELAY `` is how long to pause -- draining and mirroring output the whole time -- before sending, to simulate human timing. - ``REPEAT `` (optional, default 1) repeats the line *count* times; @@ -51,7 +52,10 @@ _KEY_ALIASES = { "ENTER": "\r", + "UP": "\x1b[A", "DOWN": "\x1b[B", + "RIGHT": "\x1b[C", + "LEFT": "\x1b[D", "SPACE": " ", } @@ -112,7 +116,9 @@ def _parse_line(tokens: list[str], lineno: int) -> list[Keystroke]: if pos < len(tokens): if tokens[pos] != "REPEAT": raise ValueError("expected REPEAT") - repeat = int(tokens[pos + 1]) + repeat, pos = int(tokens[pos + 1]), pos + 2 + if pos != len(tokens): + raise ValueError("unexpected trailing tokens") except (IndexError, ValueError) as exc: raise ValueError(f"line {lineno}: malformed keystroke: {tokens!r}") from exc @@ -212,7 +218,11 @@ def _drive(child: pexpect.spawn, keystrokes: list[Keystroke]) -> None: ) dfetch_child.logfile_read = sys.stdout - _drive(dfetch_child, script_keystrokes) - dfetch_child.expect(pexpect.EOF) + try: + _drive(dfetch_child, script_keystrokes) + dfetch_child.expect(pexpect.EOF) + finally: + if dfetch_child.isalive(): + dfetch_child.terminate(force=True) dfetch_child.close() sys.exit(dfetch_child.exitstatus or 0) diff --git a/doc/generate-casts/replay-patches-demo.sh b/doc/generate-casts/replay-patches-demo.sh new file mode 100755 index 000000000..801630883 --- /dev/null +++ b/doc/generate-casts/replay-patches-demo.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$DIR/demo-magic/demo-magic.sh" + +PROMPT_TIMEOUT=1 + +WORKDIR="$(mktemp -d "$DIR/review-patch.XXXXXX")" +trap 'popd 2>/dev/null; rm -rf "$WORKDIR"' EXIT +pushd "$WORKDIR" || { echo 'pushd failed' >&2; exit 1; } + +git init +cp -r "$DIR/update"/* . +git add . +git commit -m "Initial commit" + +sed -i 's/github/gitlab/g' cpputest/src/README.md +dfetch diff cpputest +mkdir -p patches +mv cpputest.patch patches/cpputest.patch + +cat > dfetch.yaml <<'EOF' +manifest: + version: 0.0 + + remotes: + - name: github + url-base: https://github.com/ + + projects: + - name: cpputest + dst: cpputest/src/ + repo-path: cpputest/cpputest.git + tag: v3.4 + patch: patches/cpputest.patch + +EOF + +dfetch update -f cpputest +git add . +git commit -m 'Fix vcs host' + +clear +# Run the command +pe "cat dfetch.yaml" +pe "cat patches/cpputest.patch" +# Show the command a user would actually type; feed it empty stdin behind +# the scenes so recording doesn't block on "Press Enter to restore..." +p "dfetch replay-patches cpputest" +echo '' | dfetch replay-patches cpputest +status=$? + +PROMPT_TIMEOUT=3 +wait + +pei "" + +exit "$status" diff --git a/doc/generate-casts/replay-patches-multi-demo.sh b/doc/generate-casts/replay-patches-multi-demo.sh new file mode 100755 index 000000000..f98114e1a --- /dev/null +++ b/doc/generate-casts/replay-patches-multi-demo.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +# Demo of `dfetch replay-patches --interactive` across multiple projects. +# +# Drives the real multi-project tree TUI (Up/Down switch project, Left/Right +# step patches) through interactive_helper.py so the recording needs no +# human input. + +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$DIR/demo-magic/demo-magic.sh" + +PROMPT_TIMEOUT=1 + +WORKDIR="$(mktemp -d "$DIR/replay-patches-multi.XXXXXX")" +trap 'popd 2>/dev/null; rm -rf "$WORKDIR"' EXIT +pushd "$WORKDIR" || { echo 'pushd failed' >&2; exit 1; } + +git init +cp -r "$DIR/update"/* . +git add . +git commit -m "Initial commit" + +sed -i 's/github/gitlab/g' cpputest/src/README.md +dfetch diff cpputest +sed -i 's/github/gitlab/g' jsmn/README.md +dfetch diff jsmn +mkdir -p patches +mv cpputest.patch patches/cpputest.patch +mv jsmn.patch patches/jsmn.patch + +cat > dfetch.yaml <<'EOF' +manifest: + version: 0.0 + + remotes: + - name: github + url-base: https://github.com/ + + projects: + - name: cpputest + dst: cpputest/src/ + repo-path: cpputest/cpputest.git + tag: v3.4 + patch: patches/cpputest.patch + + - name: jsmn + repo-path: zserge/jsmn.git + branch: master + patch: patches/jsmn.patch + +EOF + +dfetch update -f cpputest jsmn +git add . +git commit -m 'Fix vcs host' + +clear +# Run the command +pe "cat dfetch.yaml" + +# Step cpputest's one patch, switch focus to jsmn, step its one patch, then +# finish -- see doc/asciicasts/replay-patches-multi.cast for what this +# looks like. +KEYSTROKES=$(cat <<'KEYSTROKES' +WAIT "Ctrl-C abort" SEND RIGHT DELAY 0.9 +WAIT "\[all/1 patches applied\]" SEND DOWN DELAY 0.9 +WAIT "> jsmn" SEND RIGHT DELAY 0.9 +WAIT "\[all/1 patches applied\]" SEND ENTER DELAY 0.9 +KEYSTROKES +) + +p "dfetch replay-patches --interactive cpputest jsmn" +echo "$KEYSTROKES" | python3 "$DIR/interactive_helper.py" replay-patches --interactive cpputest jsmn +status=$? + +PROMPT_TIMEOUT=3 +wait + +pei "" + +exit "$status" diff --git a/doc/howto/patching.rst b/doc/howto/patching.rst index 508336cef..795f3d425 100644 --- a/doc/howto/patching.rst +++ b/doc/howto/patching.rst @@ -276,6 +276,97 @@ files, then use ``dfetch update-patch`` to record the resolved state: $ dfetch update-patch some-project $ svn commit some-project.patch -m "patches: update some-project.patch for v1.3.0" +.. _patching-review: + +Replaying patches +----------------- + +When you want to understand what a patch (or a set of patches) actually +contributes to a vendored project, run: + +.. code-block:: console + + $ dfetch replay-patches some-project + +For a Git superproject, *dfetch* puts the clean upstream source in the git +index and applies the patches to the working tree. You can now see exactly +what the patches change using any diff tool you prefer, for example: + +.. code-block:: console + + $ git diff some-project/ + +Or open the project in VS Code and browse the **Changes** view in the Source +Control panel. (The **Staged Changes** view shows something different and +unrelated to your patches; use **Changes**.) + +For an SVN superproject there's no staging area, so *dfetch* applies the +patches straight to the working tree and points you at ``svn diff`` instead. + +When you are done, press **Enter** and *dfetch* restores everything to its +original state. + +**Replaying a specific number of patches** + +Use ``--count`` to stop at a particular patch in the stack (single-project only). +For example, to see only what the first patch contributes, with the rest still +un-applied: + +.. code-block:: console + + $ dfetch replay-patches --count 1 some-project + +**Replaying multiple projects at once** + +When you call ``replay-patches`` with two or more project names (or with no +names to select all), *dfetch* stages all eligible selected projects together +and presents a single pause. Projects that have no patches or can't be safely +replayed are skipped with a warning. You can limit the patches applied to a +specific project with the ``name:N`` shorthand: + +.. code-block:: console + + $ dfetch replay-patches # all projects, all patches + $ dfetch replay-patches proj-a proj-b # two named projects + $ dfetch replay-patches proj-a:0 proj-b proj-c:1 # 0 / all / 1 patches + +**Stepping through the stack interactively** + +Use ``--interactive`` (or ``-i``) to step through the patch stack one patch at +a time using the ← and → arrow keys. As you step, the working tree is updated +so your editor always reflects the current position in the stack: + +.. code-block:: console + + $ dfetch replay-patches --interactive some-project + +With multiple projects, use ↑ and ↓ to switch focus between project stacks while +← and → continue to step that project's patches: + +.. code-block:: console + + $ dfetch replay-patches --interactive proj-a proj-b + +Press **Enter** to finish and restore the original state. Here's what +stepping through two projects interactively looks like: + +.. asciinema:: ../asciicasts/replay-patches-multi.cast + +And here's the plain, non-interactive command from the very first example +on this page: + +.. asciinema:: ../asciicasts/replay-patches.cast + +.. tabs:: + + .. tab:: Git + + .. scenario-include:: ../features/replay-patches-in-git.feature + + .. tab:: SVN + + .. scenario-include:: ../features/replay-patches-in-svn.feature + .. _patching-upstream: Contributing the patch upstream From 2aead50907ff42a91109ab83786c02cdadab1810 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 4 Sep 2026 06:42:40 +0000 Subject: [PATCH 3/5] Wire replay-patches into the CI smoke-test run Adds a plain dfetch replay-patches line to the cygwin and OS/Python matrix jobs, alongside the other smoke-test commands: a step fails when the command exits non-zero, nothing more. Functional correctness (that replay-patches actually restores a clean working tree) is covered by tests/test_replay_patches.py and the replay-patches BDD scenarios, not this workflow. Also forces .github/workflows/*.yml(.yaml) to always check out with LF: Windows runners otherwise check them out with CRLF (per the platform's core.autocrlf default), and GitHub Actions embeds a run: block's raw bytes verbatim into the generated shell script, which Cygwin's bash (unlike Git Bash) rejects on a CRLF-terminated line. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01A7miizBGMoLEXXZxuq6XUJ --- .gitattributes | 7 +++++++ .github/workflows/run.yml | 2 ++ 2 files changed, 9 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..514cf4463 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,7 @@ +# Keep workflow files LF-terminated regardless of the checkout platform's +# core.autocrlf setting. Windows runners otherwise check these out with +# CRLF, and GitHub Actions embeds a `run:` block's raw bytes verbatim into +# the generated shell script -- Cygwin's bash (unlike Git Bash) rejects a +# CRLF-terminated line like "set +e\r" with "invalid option". +.github/workflows/*.yml text eol=lf +.github/workflows/*.yaml text eol=lf diff --git a/.github/workflows/run.yml b/.github/workflows/run.yml index 458e68a2e..23f48b33b 100644 --- a/.github/workflows/run.yml +++ b/.github/workflows/run.yml @@ -66,6 +66,7 @@ jobs: - run: dfetch update - run: dfetch update - run: dfetch update-patch + - run: dfetch replay-patches - run: dfetch format-patch - run: dfetch report -t sbom - run: dfetch remove test-repo @@ -211,6 +212,7 @@ jobs: - run: dfetch update - run: dfetch update - run: dfetch update-patch + - run: dfetch replay-patches - run: dfetch format-patch - run: dfetch report -t sbom - run: dfetch remove test-repo From 552d571228cd2e7e549bcf55f50dc1d7b9539730 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 4 Sep 2026 07:35:50 +0000 Subject: [PATCH 4/5] Don't hide replay-patches restoration failures Combined mode's final restore loop caught RuntimeError/ SubprocessCommandError/OSError per project, logged it, and moved on -- the command never re-raised, so it reported success (exit 0) even when a project's worktree or Git index failed to restore. Every restore call site also unconditionally rewrote the saved metadata in its finally block regardless of whether the restore actually succeeded, so metadata could claim a clean restore while the worktree was still mid-replay. Fix: only rewrite metadata once _restore_project() has actually succeeded, consistently in _review_project(), _stage_one()'s failure path, and _restore_one_combined(). In combined mode, still attempt to restore every staged project (a failure on one no longer skips the rest), but raise after the loop if any of them failed, so the exit code reflects reality. Also fixes doc/generate-casts/interactive_helper.py's cast-recording helper: on cleanup it went straight to terminate(force=True) (SIGKILL), which can't be caught and so skips dfetch's own restore-on-exit handling entirely. Try a graceful terminate() first (SIGHUP/SIGCONT/ SIGINT, which dfetch's finally blocks can act on) and only escalate to force=True if the child is still alive afterwards. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01A7miizBGMoLEXXZxuq6XUJ --- dfetch/commands/replay_patches.py | 46 +++++++++++++-------- doc/generate-casts/interactive_helper.py | 8 +++- tests/test_replay_patches.py | 52 ++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 18 deletions(-) diff --git a/dfetch/commands/replay_patches.py b/dfetch/commands/replay_patches.py index bc5731ac4..11c6d02ac 100644 --- a/dfetch/commands/replay_patches.py +++ b/dfetch/commands/replay_patches.py @@ -237,12 +237,14 @@ def _ignored() -> list[str]: git_super.add_path(subproject.local_path) _apply_review(subproject, project.name, chosen_count, interactive, info_msg) finally: - try: - _restore_project( - superproject, git_super, subproject, project.name, _ignored - ) - finally: - Path(subproject.metadata_path).write_bytes(saved_metadata) + # Only rewrite the metadata once the restore itself has actually + # succeeded: if restoration fails, leaving stale metadata would + # claim the project is back to its original state when the + # worktree or index may still be in replay state. + _restore_project( + superproject, git_super, subproject, project.name, _ignored + ) + Path(subproject.metadata_path).write_bytes(saved_metadata) def _is_safe_patch_path(patch: str) -> bool: @@ -389,12 +391,12 @@ def _ignored() -> list[str]: staged_ok = True finally: if not staged_ok: - try: - _restore_project( - superproject, git_super, subproject, project.name, _ignored - ) - finally: - Path(subproject.metadata_path).write_bytes(saved_metadata) + # Only rewrite the metadata once the restore itself has actually + # succeeded; see _review_project's identical reasoning. + _restore_project( + superproject, git_super, subproject, project.name, _ignored + ) + Path(subproject.metadata_path).write_bytes(saved_metadata) state = _ProjectState( name=project.name, local_path=subproject.local_path, @@ -434,12 +436,14 @@ def _restore_one_combined( git_super: GitSuperProject | None, entry: _StagedEntry, ) -> None: - """Restore a single staged project and write back its saved metadata.""" + """Restore a single staged project and write back its saved metadata. + + Metadata is only rewritten once the restore itself has actually + succeeded; see _review_project's identical reasoning. + """ subproject, state, saved_meta, ignored = entry - try: - _restore_project(superproject, git_super, subproject, state.name, ignored) - finally: - Path(subproject.metadata_path).write_bytes(saved_meta) + _restore_project(superproject, git_super, subproject, state.name, ignored) + Path(subproject.metadata_path).write_bytes(saved_meta) def _review_projects_combined( @@ -472,11 +476,19 @@ def _review_projects_combined( # to tell which project each one belongs to. logger.info("[bold]Restoring projects...[/bold]") logger.reset_projects() + had_errors = False for entry in staged: try: _restore_one_combined(superproject, git_super, entry) except (RuntimeError, SubprocessCommandError, OSError) as exc: logger.print_error_line(entry[1].name, str(exc)) + had_errors = True + if had_errors: + # Every staged project was still given a chance to restore above; + # only now, once that pass is complete, report the failure so the + # command doesn't exit 0 while a project's worktree or index is + # still in replay state. + raise RuntimeError("failed to restore one or more projects") # --------------------------------------------------------------------------- diff --git a/doc/generate-casts/interactive_helper.py b/doc/generate-casts/interactive_helper.py index 81d65f05e..aa02cb827 100755 --- a/doc/generate-casts/interactive_helper.py +++ b/doc/generate-casts/interactive_helper.py @@ -223,6 +223,12 @@ def _drive(child: pexpect.spawn, keystrokes: list[Keystroke]) -> None: dfetch_child.expect(pexpect.EOF) finally: if dfetch_child.isalive(): - dfetch_child.terminate(force=True) + # Try a graceful termination (SIGHUP/SIGCONT/SIGINT) first so + # dfetch's own restore-on-exit cleanup gets a chance to run; + # SIGKILL (force=True) can't be caught, so it would skip that + # cleanup entirely. Only escalate if it's still alive after. + dfetch_child.terminate() + if dfetch_child.isalive(): + dfetch_child.terminate(force=True) dfetch_child.close() sys.exit(dfetch_child.exitstatus or 0) diff --git a/tests/test_replay_patches.py b/tests/test_replay_patches.py index 5eb95739b..ff5b74bc2 100644 --- a/tests/test_replay_patches.py +++ b/tests/test_replay_patches.py @@ -514,6 +514,58 @@ def test_stage_one_restores_worktree_on_add_path_failure(): fake_super.restore_from_head.assert_called_once_with("proj_a") +def test_restore_one_combined_skips_metadata_write_on_restore_failure(): + """Metadata is left untouched (not falsely marked clean) when the restore itself fails.""" + from dfetch.commands.replay_patches import _ProjectState, _restore_one_combined + + fake_super = _make_multi_superproject(["proj_a"]) + sub_a = _make_named_subproject("proj_a") + fake_super.restore_from_head.side_effect = RuntimeError("boom") + staged_bytes = b"staged-state" + Path(sub_a.metadata_path).write_bytes(staged_bytes) + entry = ( + sub_a, + _ProjectState(name="proj_a", local_path="proj_a", patches=sub_a.patch), + b"original-state", + list, + ) + + with pytest.raises(RuntimeError, match="boom"): + _restore_one_combined(fake_super, fake_super, entry) + + assert Path(sub_a.metadata_path).read_bytes() == staged_bytes + + +def test_combined_restore_failure_raises_but_still_restores_every_project(): + """A restore failure for one project doesn't stop restoration of the others, and is reported.""" + cmd = ReplayPatches() + fake_super = _make_multi_superproject(["proj_a", "proj_b"]) + sub_a = _make_named_subproject("proj_a") + sub_b = _make_named_subproject("proj_b") + fake_super.restore_from_head.side_effect = lambda path: ( + (_ for _ in ()).throw(RuntimeError("boom")) if path == "proj_a" else None + ) + + with patch( + "dfetch.commands.replay_patches.create_super_project", return_value=fake_super + ): + with patch( + "dfetch.commands.replay_patches.create_sub_project", + side_effect=[sub_a, sub_b], + ): + with patch("dfetch.commands.replay_patches.is_tty", return_value=False): + with patch("dfetch.commands.replay_patches.in_directory"): + with patch( + "dfetch.commands.replay_patches._is_safe_patch_path", + return_value=True, + ): + with pytest.raises(RuntimeError): + cmd(_make_args()) + + fake_super.restore_from_head.assert_any_call("proj_a") + fake_super.restore_from_head.assert_any_call("proj_b") + + def test_is_safe_patch_path_rejects_missing_and_outside_root(): """A missing patch, or one outside cwd, is rejected rather than handed to Patch.from_file.""" from dfetch.commands.replay_patches import _is_safe_patch_path From a96c9eab7818982b2fa704dbeed985a0f1de6d23 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 4 Sep 2026 07:46:08 +0000 Subject: [PATCH 5/5] Wait longer for interactive_helper's graceful termination before SIGKILL pexpect's own terminate() only waits its short delayafterterminate (0.1s) between each escalation signal before returning, which may not be enough time for replay-patches' git-restore cleanup to finish. Poll isalive() for a few seconds after the graceful attempt before falling back to terminate(force=True), so dfetch's own restore-on-exit cleanup gets a real chance to complete first. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01A7miizBGMoLEXXZxuq6XUJ --- doc/generate-casts/interactive_helper.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/generate-casts/interactive_helper.py b/doc/generate-casts/interactive_helper.py index aa02cb827..953e827fb 100755 --- a/doc/generate-casts/interactive_helper.py +++ b/doc/generate-casts/interactive_helper.py @@ -49,6 +49,7 @@ import pexpect _PUMP_SLICE = 0.02 # granularity for draining/mirroring output while paused +_TERMINATE_GRACE = 5.0 # seconds to wait for graceful termination to take effect _KEY_ALIASES = { "ENTER": "\r", @@ -226,8 +227,14 @@ def _drive(child: pexpect.spawn, keystrokes: list[Keystroke]) -> None: # Try a graceful termination (SIGHUP/SIGCONT/SIGINT) first so # dfetch's own restore-on-exit cleanup gets a chance to run; # SIGKILL (force=True) can't be caught, so it would skip that - # cleanup entirely. Only escalate if it's still alive after. + # cleanup entirely. pexpect's own terminate() only waits its + # short delayafterterminate (0.1s) between signals, which may + # not be enough for replay-patches' git-restore cleanup, so + # poll a while longer before escalating to force=True. dfetch_child.terminate() + terminate_deadline = time.monotonic() + _TERMINATE_GRACE + while dfetch_child.isalive() and time.monotonic() < terminate_deadline: + time.sleep(0.1) if dfetch_child.isalive(): dfetch_child.terminate(force=True) dfetch_child.close()