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

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.

Summary ID
Add a Patcher class for handling the application of patches.
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`.
01e6e01543afe4fb5ce8d17b129b8202338e6da4
Description From Last Updated

'rbtools.api.resource.Resource' imported but unused Column: 1 Error code: F401

reviewbotreviewbot

'rbtools.utils.filesystem.make_tempfile' imported but unused Column: 1 Error code: F401

reviewbotreviewbot

'rbtools.utils.filesystem.make_tempfile' imported but unused Column: 1 Error code: F401

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot

undefined name 'make_tempdir' Column: 23 Error code: F821

reviewbotreviewbot
Checks run (1 failed, 1 succeeded)
flake8 failed.
JSHint passed.

flake8

chipx86
Review request changed
Change Summary:

Removed unused imports.

Commits:
Summary ID
Add a Patcher class for handling the application of patches.
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`.
0e7015b5503d8d57917cd2356c492395452e0ca1
Add a Patcher class for handling the application of patches.
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`.
b3848722303ff5757511497660d9d1530fa25e14

Checks run (1 failed, 1 succeeded)

flake8 failed.
JSHint passed.

flake8

chipx86
david
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to release-5.x (6cf52b6)