Merge lp:~jelmer/brz/move-patch-tree into lp:brz

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: 7859
Merged at revision: 7862
Proposed branch: lp:~jelmer/brz/move-patch-tree
Merge into: lp:brz
Diff against target: 93 lines (+21/-19)
5 files modified
breezy/builtins.py (+1/-2)
breezy/git/commands.py (+1/-1)
breezy/mutabletree.py (+1/-0)
breezy/patch.py (+5/-16)
breezy/workingtree.py (+13/-0)
To merge this branch: bzr merge lp:~jelmer/brz/move-patch-tree
Reviewer Review Type Date Requested Status
Jelmer Vernooij Approve
Review via email: mp+445416@code.launchpad.net

Commit message

Move patch_tree to breezy.workingtree

Description of the change

Move patch_tree to breezy.workingtree

To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) :
review: Approve
Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :

Attempt to merge into lp:brz failed due to conflicts:

text conflict in breezy/patch.py

Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :
Download full text (68.1 KiB)

The attempt to merge lp:~jelmer/brz/move-patch-tree into lp:brz failed. Command exited with 2.
Below is the output from the failed tests.

... OUTPUT TRIMMED ...

    |
193 | DateTime::from_utc(NaiveDateTime::from_timestamp(t + offset, 0), Utc),
    | ^^^^^^^^^^^^^^

warning: use of deprecated associated function `chrono::TimeZone::timestamp`: use `timestamp_opt()` instead
   --> crates/osutils/src/time.rs:198:31
    |
198 | let local = Local.timestamp(t, 0);
    | ^^^^^^^^^

warning: use of deprecated associated function `chrono::TimeZone::timestamp`: use `timestamp_opt()` instead
   --> crates/osutils/src/time.rs:287:27
    |
287 | let system_time = Utc.timestamp(when as i64, 0);
    | ^^^^^^^^^

warning: unused import: `std::io::Write`
 --> crates/osutils/src/lib.rs:5:5
  |
5 | use std::io::Write;
  | ^^^^^^^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

       Fresh xmltree v0.10.3
       Fresh serde v1.0.164
       Fresh bendy v0.3.3
       Fresh unicode-linebreak v0.1.4
       Fresh fancy-regex v0.11.0
warning: `breezy-osutils` (lib) generated 8 warnings
       Fresh locale_config v0.3.0
       Fresh ghost v0.1.9
       Fresh unicode-width v0.1.10
       Fresh unsafe-libyaml v0.2.8
       Fresh itoa v1.0.6
       Fresh ryu v1.0.13
       Fresh smawk v0.3.1
       Fresh serde_yaml v0.9.21
       Fresh inventory v0.3.6
       Fresh textwrap v0.16.0
       Fresh gettext-rs v0.7.0
       Fresh url v2.4.0
     Running `rustc --crate-name pyo3_build_config --edition=2018 /root/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.19.0/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --crate-type lib --emit=dep-info,metadata,link -C embed-bitcode=no -C debuginfo=2 --cfg 'feature="default"' --cfg 'feature="resolve-config"' -C metadata=d796b8a916fce9da -C extra-filename=-d796b8a916fce9da --out-dir /tmp/tarmac/branch.jacfft5x/target/debug/deps -L dependency=/tmp/tarmac/branch.jacfft5x/target/debug/deps --extern once_cell=/tmp/tarmac/branch.jacfft5x/target/debug/deps/libonce_cell-d348e9705f2805f5.rmeta --extern target_lexicon=/tmp/tarmac/branch.jacfft5x/target/debug/deps/libtarget_lexicon-55c9aa1933b3b500.rmeta --cap-lints allow`
   Compiling pyo3-ffi v0.19.0
   Compiling pyo3 v0.19.0
     Running `rustc --crate-name build_script_build --edition=2018 /root/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.19.0/build.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C debuginfo=2 --cfg 'feature="default"' -C metadata=d0e5aca243a32e7c -C extra-filename=-d0e5aca243a32e7c --out-dir /tmp/tarmac/branch.jacfft5x/target/debug/build/pyo3-ffi-d0e5aca243a32e7c -L dependency=/tmp/tarmac/branch.jacfft5x/target/debug/deps --extern pyo3_build_config=/tmp/tarmac/branch.jacfft5x/target/debug/deps/libpyo3_build_config-d796b8a916fce9da.rlib --cap-lints allow`
     Running `rustc --crate-name build_script_build --edition=2018 /root/.cargo/registry/src/githu...

Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :
Download full text (127.9 KiB)

The attempt to merge lp:~jelmer/brz/move-patch-tree into lp:brz failed. Command exited with 2.
Below is the output from the failed tests.

... OUTPUT TRIMMED ...

lib/python3.11/site-packages/sphinx/testing/fixtures.py:148:5: D415 [*] First line should end with a period, question mark, or exclamation point
lib/python3.11/site-packages/sphinx/testing/fixtures.py:156:5: D200 [*] One-line docstring should fit on one line
lib/python3.11/site-packages/sphinx/testing/fixtures.py:156:5: D212 [*] Multi-line docstring summary should start at the first line
lib/python3.11/site-packages/sphinx/testing/fixtures.py:156:5: D415 [*] First line should end with a period, question mark, or exclamation point
lib/python3.11/site-packages/sphinx/testing/fixtures.py:163:46: ANN401 Dynamically typed expressions (typing.Any) are disallowed in `monkeypatch`
lib/python3.11/site-packages/sphinx/testing/fixtures.py:164:5: D212 [*] Multi-line docstring summary should start at the first line
lib/python3.11/site-packages/sphinx/testing/fixtures.py:202:5: D212 [*] Multi-line docstring summary should start at the first line
lib/python3.11/site-packages/sphinx/testing/fixtures.py:218:41: ANN401 Dynamically typed expressions (typing.Any) are disallowed in `tmpdir_factory`
lib/python3.11/site-packages/sphinx/testing/fixtures.py:219:5: D200 [*] One-line docstring should fit on one line
lib/python3.11/site-packages/sphinx/testing/fixtures.py:219:5: D212 [*] Multi-line docstring summary should start at the first line
lib/python3.11/site-packages/sphinx/testing/fixtures.py:228:5: D212 [*] Multi-line docstring summary should start at the first line
lib/python3.11/site-packages/sphinx/testing/fixtures.py:237:5: D212 [*] Multi-line docstring summary should start at the first line
lib/python3.11/site-packages/sphinx/testing/path.py:15:5: D415 [*] First line should end with a period, question mark, or exclamation point
lib/python3.11/site-packages/sphinx/testing/path.py:26:5: D200 [*] One-line docstring should fit on one line
lib/python3.11/site-packages/sphinx/testing/path.py:26:5: D212 [*] Multi-line docstring summary should start at the first line
lib/python3.11/site-packages/sphinx/testing/path.py:32:9: D200 [*] One-line docstring should fit on one line
lib/python3.11/site-packages/sphinx/testing/path.py:32:9: D212 [*] Multi-line docstring summary should start at the first line
lib/python3.11/site-packages/sphinx/testing/path.py:41:9: D200 [*] One-line docstring should fit on one line
lib/python3.11/site-packages/sphinx/testing/path.py:41:9: D212 [*] Multi-line docstring summary should start at the first line
lib/python3.11/site-packages/sphinx/testing/path.py:47:9: D200 [*] One-line docstring should fit on one line
lib/python3.11/site-packages/sphinx/testing/path.py:47:9: D212 [*] Multi-line docstring summary should start at the first line
lib/python3.11/site-packages/sphinx/testing/path.py:53:9: D200 [*] One-line docstring should fit on one line
lib/python3.11/site-packages/sphinx/testing/path.py:53:9: D212 [*] Multi-line docstring summary should start at the first line
lib/python3.11/site-packages/sphinx/testing/path.py:59:9: D200 [*] One-line docstring should fit on one lin...

Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :
Download full text (68.7 KiB)

The attempt to merge lp:~jelmer/brz/move-patch-tree into lp:brz failed. Command exited with 2.
Below is the output from the failed tests.

... OUTPUT TRIMMED ...

warning: use of deprecated associated function `chrono::TimeZone::timestamp`: use `timestamp_opt()` instead
   --> crates/osutils/src/time.rs:287:27
    |
287 | let system_time = Utc.timestamp(when as i64, 0);
    | ^^^^^^^^^

warning: unused import: `std::io::Write`
 --> crates/osutils/src/lib.rs:5:5
  |
5 | use std::io::Write;
  | ^^^^^^^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

       Fresh gettext-sys v0.21.3
       Fresh unicode-linebreak v0.1.4
       Fresh bendy v0.3.3
       Fresh fancy-regex v0.11.0
warning: `breezy-osutils` (lib) generated 8 warnings
       Fresh locale_config v0.3.0
       Fresh ghost v0.1.9
       Fresh ryu v1.0.13
       Fresh unsafe-libyaml v0.2.8
       Fresh smawk v0.3.1
       Fresh itoa v1.0.6
       Fresh unicode-width v0.1.10
       Fresh gettext-rs v0.7.0
       Fresh textwrap v0.16.0
       Fresh serde_yaml v0.9.21
       Fresh inventory v0.3.6
       Fresh url v2.4.0
     Running `rustc --crate-name pyo3_build_config --edition=2018 /root/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-build-config-0.19.0/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --crate-type lib --emit=dep-info,metadata,link -C embed-bitcode=no -C debuginfo=2 --cfg 'feature="default"' --cfg 'feature="resolve-config"' -C metadata=e4182876ce57c3e6 -C extra-filename=-e4182876ce57c3e6 --out-dir /tmp/tarmac/branch.q8iwixak/target/debug/deps -L dependency=/tmp/tarmac/branch.q8iwixak/target/debug/deps --extern once_cell=/tmp/tarmac/branch.q8iwixak/target/debug/deps/libonce_cell-9b2190a5074f4803.rmeta --extern target_lexicon=/tmp/tarmac/branch.q8iwixak/target/debug/deps/libtarget_lexicon-2c089ed86a6bc2c5.rmeta --cap-lints allow`
   Compiling pyo3-ffi v0.19.0
   Compiling pyo3 v0.19.0
     Running `rustc --crate-name build_script_build --edition=2018 /root/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-ffi-0.19.0/build.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C debuginfo=2 --cfg 'feature="default"' -C metadata=6a3f3d3443730b82 -C extra-filename=-6a3f3d3443730b82 --out-dir /tmp/tarmac/branch.q8iwixak/target/debug/build/pyo3-ffi-6a3f3d3443730b82 -L dependency=/tmp/tarmac/branch.q8iwixak/target/debug/deps --extern pyo3_build_config=/tmp/tarmac/branch.q8iwixak/target/debug/deps/libpyo3_build_config-e4182876ce57c3e6.rlib --cap-lints allow`
     Running `rustc --crate-name build_script_build --edition=2018 /root/.cargo/registry/src/github.com-1ecc6299db9ec823/pyo3-0.19.0/build.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C debuginfo=2 --cfg 'feature="default"' --cfg 'feature="indoc"' --cfg 'feature="macros"' --cfg 'feature="pyo3-macros"' --cfg 'feature="unindent"' -C metadata=6fdb407c233124c4 -C extra-filename=-6fdb407c233124c4 --out-dir /tmp/tarmac/branch.q8iwixak/target/debug/build/p...

Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :
Download full text (61.9 KiB)

The attempt to merge lp:~jelmer/brz/move-patch-tree into lp:brz failed. Command exited with 2.
Below is the output from the failed tests.

... OUTPUT TRIMMED ...

  --> crates/bazaar/src/groupcompress/delta.rs:23:7
   |
23 | const HASH_LIMIT: usize = 64;
   | ^^^^^^^^^^

warning: constant `RABIN_SHIFT` is never used
  --> crates/bazaar/src/groupcompress/delta.rs:25:7
   |
25 | const RABIN_SHIFT: usize = 23;
   | ^^^^^^^^^^^

warning: constant `RABIN_WINDOW` is never used
  --> crates/bazaar/src/groupcompress/delta.rs:26:7
   |
26 | const RABIN_WINDOW: usize = 16;
   | ^^^^^^^^^^^^

warning: constant `EXTRA_NULLS` is never used
  --> crates/bazaar/src/groupcompress/delta.rs:31:7
   |
31 | const EXTRA_NULLS: usize = 4;
   | ^^^^^^^^^^^

warning: constant `T` is never used
  --> crates/bazaar/src/groupcompress/delta.rs:33:7
   |
33 | const T: &[u32; 256] = &[
   | ^

warning: constant `U` is never used
  --> crates/bazaar/src/groupcompress/delta.rs:68:7
   |
68 | const U: &[u32; 256] = &[
   | ^

warning: struct `SourceInfo` is never constructed
   --> crates/bazaar/src/groupcompress/delta.rs:103:8
    |
103 | struct SourceInfo {
    | ^^^^^^^^^^

warning: constant `DELTA_SIZE_MIN` is never used
   --> crates/bazaar/src/groupcompress/delta.rs:118:7
    |
118 | const DELTA_SIZE_MIN: u64 = 3;
    | ^^^^^^^^^^^^^^

warning: function `get_delta_hdr_size` is never used
   --> crates/bazaar/src/groupcompress/delta.rs:120:4
    |
120 | fn get_delta_hdr_size(datap: &mut &[u8], top: &[u8]) -> u64 {
    | ^^^^^^^^^^^^^^^^^^

warning: function `get_text` is never used
   --> crates/bazaar/src/groupcompress/delta.rs:141:4
    |
141 | fn get_text(buff: &mut [u8; 128], ptr: &[u8]) {
    | ^^^^^^^^

warning: function `rabin_hash` is never used
   --> crates/bazaar/src/groupcompress/delta.rs:171:4
    |
171 | fn rabin_hash(data: &[u8]) -> u32 {
    | ^^^^^^^^^^

warning: function `surrogate_escape` is never used
   --> crates/bazaar/src/xml_serializer.rs:112:4
    |
112 | fn surrogate_escape(b: u8) -> Vec<u8> {
    | ^^^^^^^^^^^^^^^^

   Compiling breezy v3.4.0 (/tmp/tarmac/branch.4vivi4_9)
     Running `rustc --crate-name breezy --edition=2021 src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --crate-type lib --emit=dep-info,metadata,link -C embed-bitcode=no -C debuginfo=2 --cfg 'feature="default"' --cfg 'feature="i18n"' --cfg 'feature="pyo3"' -C metadata=b39b46c443c3c8fe -C extra-filename=-b39b46c443c3c8fe --out-dir /tmp/tarmac/branch.4vivi4_9/target/debug/deps -C incremental=/tmp/tarmac/branch.4vivi4_9/target/debug/incremental -L dependency=/tmp/tarmac/branch.4vivi4_9/target/debug/deps --extern bazaar=/tmp/tarmac/branch.4vivi4_9/target/debug/deps/libbazaar-1fefae61ee6f8624.rmeta --extern breezy_osutils=/tmp/tarmac/branch.4vivi4_9/target/debug/deps/libbreezy_osutils-ebb0018ed41faddf.rmeta --extern chrono=/tmp/tarmac/branch.4vivi4_9/target/debug/deps/libchrono-2778c20b46bee07d.rmeta --extern gettextrs=/tmp/tarmac/branch.4vivi4_9/target/debug/deps/libgettextrs-1515a37d4b6d5c21.rmeta --extern inventory=/tmp/tarmac/branch.4vivi4_9/target/debug/deps/libinventor...

Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :
Download full text (9.7 KiB)

The attempt to merge lp:~jelmer/brz/move-patch-tree into lp:brz failed. Command exited with -15.
Below is the output from the failed tests.

Collecting setuptools-gettext
  Downloading setuptools_gettext-0.1.3-py3-none-any.whl (10 kB)
Requirement already satisfied: setuptools>=46.1 in ./lib/python3.11/site-packages (from setuptools-gettext) (67.8.0)
Installing collected packages: setuptools-gettext
Successfully installed setuptools-gettext-0.1.3
Obtaining file:///tmp/tarmac/branch.xmiktcfz
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Checking if build backend supports build_editable: started
  Checking if build backend supports build_editable: finished with status 'done'
  Getting requirements to build editable: started
  Getting requirements to build editable: finished with status 'done'
  Installing backend dependencies: started
  Installing backend dependencies: finished with status 'done'
  Preparing editable metadata (pyproject.toml): started
  Preparing editable metadata (pyproject.toml): finished with status 'done'
Requirement already satisfied: configobj in /usr/lib/python3/dist-packages (from breezy==3.4.0.dev0) (5.0.8)
Requirement already satisfied: fastbencode in /usr/lib/python3/dist-packages (from breezy==3.4.0.dev0) (0.2)
Requirement already satisfied: patiencediff in /usr/lib/python3/dist-packages (from breezy==3.4.0.dev0) (0.2.13)
Requirement already satisfied: merge3 in /usr/lib/python3/dist-packages (from breezy==3.4.0.dev0) (0.0.8)
Collecting dulwich>=0.21.3 (from breezy==3.4.0.dev0)
  Downloading dulwich-0.21.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (511 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 511.8/511.8 kB 8.0 MB/s eta 0:00:00
Requirement already satisfied: urllib3>=1.24.1 in /usr/lib/python3/dist-packages (from breezy==3.4.0.dev0) (1.26.12)
Requirement already satisfied: pyyaml in /usr/lib/python3/dist-packages (from breezy==3.4.0.dev0) (6.0)
Collecting testtools>=0.9.5 (from breezy==3.4.0.dev0)
  Downloading testtools-2.6.0-py3-none-any.whl (182 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 182.2/182.2 kB 6.8 MB/s eta 0:00:00
Collecting testscenarios (from breezy==3.4.0.dev0)
  Downloading testscenarios-0.5.0-py2.py3-none-any.whl (21 kB)
Collecting python-subunit (from breezy==3.4.0.dev0)
  Downloading python_subunit-1.4.2-py3-none-any.whl (106 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 106.8/106.8 kB 8.2 MB/s eta 0:00:00
Requirement already satisfied: flake8 in /usr/lib/python3/dist-packages (from breezy==3.4.0.dev0) (5.0.4)
Collecting cython>=0.29 (from breezy==3.4.0.dev0)
  Using cached Cython-0.29.35-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.9 MB)
Collecting ruff (from breezy==3.4.0.dev0)
  Downloading ruff-0.0.275-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.4/5.4 MB 10.9 MB/s eta 0:00:00
Collecting docutils (from breezy==3.4.0.dev0)
  Downloading docutils-0.20.1-py3-none-any.whl (572 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 572.7/572.7 kB 9.8 MB/s eta 0:00:00
Requirement already satisfied: setuptools i...

Read more...

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'breezy/builtins.py'
2--- breezy/builtins.py 2023-06-24 13:01:43 +0000
3+++ breezy/builtins.py 2023-06-28 12:51:16 +0000
4@@ -7095,8 +7095,7 @@
5 Option('silent', help='Suppress chatter.')]
6
7 def run(self, filename=None, strip=None, silent=False):
8- from .patch import patch_tree
9- from .workingtree import WorkingTree
10+ from .workingtree import WorkingTree, patch_tree
11 wt = WorkingTree.open_containing('.')[0]
12 if strip is None:
13 strip = 1
14
15=== modified file 'breezy/git/commands.py'
16--- breezy/git/commands.py 2023-06-24 13:01:43 +0000
17+++ breezy/git/commands.py 2023-06-28 12:51:16 +0000
18@@ -228,7 +228,7 @@
19 """
20 from dulwich.patch import git_am_patch_split
21
22- from ..patch import patch_tree
23+ from ..workingtree import patch_tree
24 (c, diff, version) = git_am_patch_split(f)
25 # FIXME: Cope with git-specific bits in patch
26 # FIXME: Add new files to working tree
27
28=== modified file 'breezy/mutabletree.py'
29--- breezy/mutabletree.py 2023-06-24 13:01:43 +0000
30+++ breezy/mutabletree.py 2023-06-28 12:51:16 +0000
31@@ -359,3 +359,4 @@
32 def __init__(self, mutable_tree):
33 """Create the parameters for the post_commit hook."""
34 self.mutable_tree = mutable_tree
35+
36
37=== modified file 'breezy/patch.py'
38--- breezy/patch.py 2023-06-24 13:01:43 +0000
39+++ breezy/patch.py 2023-06-28 12:51:16 +0000
40@@ -17,7 +17,11 @@
41
42 """Diff and patch functionality."""
43
44-from ._patch_rs import ( # noqa: F401
45+__all__ = ['PatchFailed', 'PatchInvokeError', 'diff3',
46+ 'format_patch_date', 'iter_patched_from_hunks', 'parse_patch_date',
47+ 'patch', 'run_patch']
48+
49+from ._patch_rs import (
50 PatchFailed,
51 PatchInvokeError,
52 diff3,
53@@ -27,18 +31,3 @@
54 patch,
55 run_patch,
56 )
57-
58-
59-def patch_tree(tree, patches, strip=0, reverse=False, dry_run=False,
60- quiet=False, out=None):
61- """Apply a patch to a tree.
62-
63- Args:
64- tree: A MutableTree object
65- patches: list of patches as bytes
66- strip: Strip X segments of paths
67- reverse: Apply reversal of patch
68- dry_run: Dry run
69- """
70- return run_patch(tree.basedir, patches=patches, strip=strip,
71- reverse=reverse, dry_run=dry_run, quiet=quiet, out=out)
72
73=== modified file 'breezy/workingtree.py'
74--- breezy/workingtree.py 2023-06-24 13:01:43 +0000
75+++ breezy/workingtree.py 2023-06-28 12:51:16 +0000
76@@ -1263,4 +1263,17 @@
77 return self._matchingcontroldir
78
79
80+def patch_tree(tree: WorkingTree, patches, strip: int = 0, reverse: bool = False, dry_run: bool = False,
81+ quiet: bool = False, out=None):
82+ """Apply a patch to a tree.
83
84+ Args:
85+ tree: A MutableTree object
86+ patches: list of patches as bytes
87+ strip: Strip X segments of paths
88+ reverse: Apply reversal of patch
89+ dry_run: Dry run
90+ """
91+ from .patch import run_patch
92+ return run_patch(tree.basedir, patches=patches, strip=strip,
93+ reverse=reverse, dry_run=dry_run, quiet=quiet, out=out)

Subscribers

People subscribed via source and target branches