Files

2.4 KiB

Data Model: Replace Command with Multi-Pattern Support

Entities

ReplaceRequest

  • Description: Captures all inputs driving a replace operation.
  • Fields:
    • workingDir (string, required): Absolute path where traversal begins.
    • patterns ([]string, min length 2): Ordered list of literal substrings to replace.
    • replacement (string, required): Literal value substituting each pattern.
    • includeDirectories (bool): Whether directories participate in replacement.
    • recursive (bool): Traverse subdirectories depth-first.
    • includeHidden (bool): Include hidden files during traversal.
    • extensions ([]string): Optional extension filters inherited from scope flags.
    • dryRun (bool): Preview mode flag; true during preview, false when applying changes.
  • Validations:
    • patterns MUST be deduplicated case-sensitively before execution.
    • replacement MAY be empty, but command must warn the user during preview.
    • workingDir MUST exist and be readable before traversal.

ReplaceSummary

  • Description: Aggregates preview/apply outcomes for reporting and ledger entries.
  • Fields:
    • totalFiles (int): Count of files/directories affected.
    • patternMatches (map[string]int): Total substitutions per pattern.
    • conflicts ([]ConflictDetail): Detected filename collisions with rationale.
    • ledgerEntryID (string, optional): Identifier once committed to .renamer ledger.

ConflictDetail

  • Description: Describes a file that could not be renamed due to collision or validation failure.
  • Fields:
    • originalPath (string)
    • proposedPath (string)
    • reason (string): Human-readable description (e.g., "target already exists").

Relationships

  • ReplaceRequest produces a stream of candidate rename operations via traversal utilities.
  • ReplaceSummary aggregates results from executing the request and is persisted inside ledger entries.
  • ConflictDetail records subset of ReplaceSummary when collisions block application.

State Transitions

  1. Parsing: CLI args parsed into ReplaceRequest; validations run immediately.
  2. Preview: Traversal + replacement simulation produce ReplaceSummary with proposed paths.
  3. Confirm: Upon user confirmation (or --yes), operations apply atomically; ledger entry written.
  4. Undo: Ledger reverse operation reads ReplaceSummary data to restore originals.