• 
      
    Fish Trophy

    chipx86 got a fish trophy!

    Fish Trophy

    Add a Patcher class for handling the application of patches.

    Review Request #14041 — Created July 14, 2024 and submitted — Latest diff uploaded

    Information

    RBTools
    release-5.x

    Reviewers

    The new Patcher class is responsible for taking a list of patches and
    applying or reverting them, optionally committing them as well.

    Consumers of Patcher are expected to provide the list of patches to
    apply (each being a Patch object), the destination path (optionally),
    any information known about the repository, and flags to initiate a
    revert or squash of the patches.

    If the patches are to be committed, they're then expected to call
    prepare_for_commit(). Then, patch() can be called.

    Patcher.patch() is a generator, taking care to apply each patch in
    order and yielding a successful result for each or raising an exception.
    Consumers can use the generator nature of this tool to help with
    progress reporting.

    By default, this interfaces with the local patch tool, supporting both
    GNU Patch and Apple/BSD Patch. It takes care to examine output for both
    tools and convert them into suitable responses. Subclasses can override
    the methods to instead interface with SCM-specific patching tools, and
    to even take care to apply or commit multiple patches in one go instead
    of individually (which is needed for Mercurial).

    Follow-up changes will begin integrating Patcher into the SCMs and
    into rbt patch and rbt land.

    Unit tests pass.

    Commits

    Files