ebranch - Man Page

Cross-branch porting: build order, branch requests, update checks, Bodhi karma

Synopsis

ebranch [-h|--help] [-V|--version] <subcommands>

Description

Cross-branch porting: build order, branch requests, update checks, Bodhi karma

Options

-h,  --help

Print help

-V,  --version

Print version

Commands

ebranch check-crate

ebranch check-crate [-b|--branch] [-r|--repo] [-t|--transitive] [--exclude-dev] [--include-optional] [--exclude-unmet] [--exclude] [--copr] [--dot] [--json] [--koji] [--toml] [--refresh] [-v|--verbose] [-j|--jobs] [-h|--help] <NAME> [VERSION]

Analyze a crates.io crate's dependencies

-b, --branch <BRANCH>

Target branch (e.g. epel9, rawhide)

-r, --repo <REPO>

Repository class for the branch (fedrq -r)

-t, --transitive

Expand missing deps transitively

--exclude-dev

Exclude dev dependencies from transitive expansion

--include-optional

Include optional dependencies in transitive expansion

--exclude-unmet

Exclude unmet-version dependencies (packaged, but too old for the requirement) from transitive expansion. They are included by default: omitting them silently under-reports what needs (re)building.

--exclude <CRATE,...>

Exclude crates from transitive expansion

--copr

Generate a shell script for Copr batch builds.

The script accepts the Copr repo as its first argument, followed by any extra flags to pass to copr build-package.

--dot

Output dependency graph in Graphviz DOT format

--json

Machine-readable JSON output

--koji

Output build-order as a Koji chain build string

--toml <PATH>

Write analysis to a TOML file

--refresh

Clear fedrq + libdnf5 repo metadata caches before querying

-v, --verbose

Print progress to stderr

-j, --jobs <JOBS>

Parallel fedrq queries (0 = CPUs)

-h, --help

Print help (see a summary with '-h')

<NAME>

Crate name on crates.io

[VERSION]

Crate version (default: latest)

ebranch check-pkg-reviews

ebranch check-pkg-reviews [--bugzilla-url] [--api-key] [--dry-run] [-v|--verbose] [-h|--help] <TOML>

Find and link Bugzilla package review requests

--bugzilla-url <BUGZILLA_URL> [default: https://bugzilla.redhat.com]

Bugzilla base URL

--api-key <API_KEY>

Bugzilla API key (or set BUGZILLA_API_KEY env var)
May also be specified with the BUGZILLA_API_KEY environment variable.

--dry-run

Show changes without applying them

-v, --verbose

Print progress to stderr

-h, --help

Print help

<TOML>

Path to TOML analysis file from check-crate --toml

ebranch check-update

ebranch check-update [-b|--branch] [-r|--repo] [--testing-branch] [--koji-profile] [--json] [--detailed] [-v|--verbose] [--refresh] [-j|--jobs] [--give-karma] [--comment] [-y|--yes] [--submit] [--notes] [--notes-file] [--type] [--severity] [--bug] [--stable-karma] [--unstable-karma] [--disable-autokarma] [-h|--help] <INPUT>

Check if an update would break reverse dependencies

-b, --branch <BRANCH>

Branch to check against (e.g. epel9).

Auto-detected from the input: the Bodhi release for an update alias, or the name of a Fedora side tag (f43-build-side-* uses f43). EPEL side tags are not inferred: pass a base branch plus the EPEL repo, e.g. -b al9 -r @epel (epel9) or -b c10s -r @epel (epel10).

-r, --repo <REPO>

Repository class for the branch (fedrq -r).

Defaults to the branch's stable base repos, which is the correct comparison baseline. Override only for special cases, e.g. -r @epel for EPEL side tags (paired with a base branch like -b al9).

--testing-branch <TESTING_BRANCH>

Override branch for the new-provides queries: @testing for Bodhi updates, and the chroot selection for COPR input (epel9 → epel-9-*).

Auto-detected for EPEL side tags (e.g. epel9-build-side-* uses epel9). Otherwise defaults to --branch.

--koji-profile <KOJI_PROFILE>

Koji CLI profile (e.g. cbs for CentOS)

--json

Machine-readable JSON output

--detailed

Show full lists (every package, Provide, and reverse dep) instead of counts plus the actionable problems.

-v, --verbose

Print progress to stderr

--refresh

Clear fedrq + libdnf5 repo metadata caches before querying

-j, --jobs <JOBS>

Parallel fedrq queries (0 = CPUs)

--give-karma

Cast karma on the Bodhi update. The check result suggests the value (+1 when no issues are found, -1 when reverse deps break or the updated packages have unsatisfied deps, 0 when the analysis was incomplete); you are prompted with that suggestion as the default. Requires a Bodhi update alias or URL as input. Reuses the bodhi CLI's login session, starting an interactive login first if there is none.

Listed bugs get per-bug feedback: update-request bugs ("<pkg>-<version> is available") are auto-voted +1 when the update delivers at least the requested version and -1 otherwise; for other bugs you are prompted. The full plan is shown for confirmation before posting.

--comment <COMMENT>

Reviewer notes added as a section near the top of the posted report (with --give-karma, or the review comment --submit posts after creating the update). Prompted for interactively when omitted; --yes skips the prompt.

-y, --yes

Skip vote/submit confirmations; non-update bugs get 0

--submit

Submit the side tag as a Bodhi update once the check passes: creates the update from the tag (the API behind `bodhi updates new --from-tag`) after showing the plan — packages, type, bugs, karma thresholds, notes — for confirmation, so an accidentally missing package is caught before anything is published. Requires a Koji side tag as input and update notes via --notes or --notes-file. Reuses the bodhi CLI's login session, starting an interactive login first if there is none.

After submitting, the check report is posted on the new update as a review comment with per-bug feedback (whether each listed bug is addressed by the delivered versions) — the --give-karma flow; Bodhi zeroes the submitter's own overall karma, but per-bug feedback still counts.

When the check does NOT pass cleanly you can curate the findings (keep/explain/remove) like --give-karma; if findings are kept you are asked whether to submit anyway (default no). Non-interactive runs and --yes never submit a failing update.

--notes <NOTES>

Update notes/description (inline)

--notes-file <PATH>

Read the update notes from a file

--type <TYPE> [default: bugfix]

Type: bugfix, enhancement, security, newpackage

--severity <LEVEL>

Update severity: unspecified (default), low, medium, high, or urgent. Bodhi requires a real severity for --type security.

--bug <ID>

Bug ID(s) to associate and close (repeated or CSV)

--stable-karma <N> [default: 3]

Karma needed to push stable (default 3)

--unstable-karma <N> [default: -3]

Negative karma that unpushes (default -3)

--disable-autokarma

Don't auto-push at the karma thresholds

-h, --help

Print help (see a summary with '-h')

<INPUT>

The update to check, one of: - a Koji side tag (f45-build-side-143123) - a Bodhi update alias or URL
 (FEDORA-EPEL-2026-f9eaa11e18) - a COPR project: owner/project spec
 (@rust/uutils-and-nushell) or its URL. COPR
 input requires -b, and --testing-branch when
 -b is a base branch like al9 (it picks the
 COPR chroot, e.g. epel9 → epel-9-*).

ebranch config

ebranch config [-h|--help]

Set up Bugzilla API key and other settings

-h, --help

Print help

ebranch escalate

ebranch escalate [--bugzilla-url] [--api-key] [--fas] [--sig] [--base-branch] [--dry-run] [-v|--verbose] [-h|--help] <TOML> <BRANCH>

Escalate (needinfo) stale branch requests in a report

--bugzilla-url <BUGZILLA_URL> [default: https://bugzilla.redhat.com]

Bugzilla base URL

--api-key <API_KEY>

Bugzilla API key (defaults to BUGZILLA_API_KEY env var or the key from `ebranch config`)
May also be specified with the BUGZILLA_API_KEY environment variable.

--fas <FAS>

FAS of the reporter, if willing to co-maintain

--sig <SIG>

Packaging SIG to offer as co-maintainer (requires --fas)

--base-branch <BRANCH>

Base-distro branch behind the EPEL branch, checked before filing: a package present in the base distro is skipped (EPEL must not replace it; the request would be CANTFIX).

Inferred from the branch: epel10 uses c10s, epel9 uses al9. Pass this to override the mapping or to enable the check for branches it can't infer (e.g. epel8).

--dry-run

Show what would happen without contacting Bugzilla

-v, --verbose

Print progress to stderr

-h, --help

Print help (see a summary with '-h')

<TOML>

check-crate report TOML with recorded branch requests

<BRANCH>

EPEL branch to request (e.g. epel9, epel10)

ebranch file-request

ebranch file-request [--bugzilla-url] [--api-key] [--fas] [--sig] [--base-branch] [--dry-run] [-v|--verbose] [--blocked] [--dependson] [--toml] [-h|--help] <PACKAGE> <BRANCH>

File a branch request for one package

--bugzilla-url <BUGZILLA_URL> [default: https://bugzilla.redhat.com]

Bugzilla base URL

--api-key <API_KEY>

Bugzilla API key (defaults to BUGZILLA_API_KEY env var or the key from `ebranch config`)
May also be specified with the BUGZILLA_API_KEY environment variable.

--fas <FAS>

FAS of the reporter, if willing to co-maintain

--sig <SIG>

Packaging SIG to offer as co-maintainer (requires --fas)

--base-branch <BRANCH>

Base-distro branch behind the EPEL branch, checked before filing: a package present in the base distro is skipped (EPEL must not replace it; the request would be CANTFIX).

Inferred from the branch: epel10 uses c10s, epel9 uses al9. Pass this to override the mapping or to enable the check for branches it can't infer (e.g. epel8).

--dry-run

Show what would happen without contacting Bugzilla

-v, --verbose

Print progress to stderr

--blocked <BLOCKED>

CSV of bugs/aliases this request blocks

--dependson <DEPENDSON>

CSV of bugs/aliases this request depends on

--toml <TOML>

check-crate report TOML to record the new bug ID in

-h, --help

Print help (see a summary with '-h')

<PACKAGE>

Source package to request a branch for

<BRANCH>

EPEL branch to request (e.g. epel9, epel10)

ebranch file-requests

ebranch file-requests [--bugzilla-url] [--api-key] [--fas] [--sig] [--base-branch] [--dry-run] [-v|--verbose] [--blocked] [-h|--help] <TOML> <BRANCH>

File branch requests for all missing packages in a report

--bugzilla-url <BUGZILLA_URL> [default: https://bugzilla.redhat.com]

Bugzilla base URL

--api-key <API_KEY>

Bugzilla API key (defaults to BUGZILLA_API_KEY env var or the key from `ebranch config`)
May also be specified with the BUGZILLA_API_KEY environment variable.

--fas <FAS>

FAS of the reporter, if willing to co-maintain

--sig <SIG>

Packaging SIG to offer as co-maintainer (requires --fas)

--base-branch <BRANCH>

Base-distro branch behind the EPEL branch, checked before filing: a package present in the base distro is skipped (EPEL must not replace it; the request would be CANTFIX).

Inferred from the branch: epel10 uses c10s, epel9 uses al9. Pass this to override the mapping or to enable the check for branches it can't infer (e.g. epel8).

--dry-run

Show what would happen without contacting Bugzilla

-v, --verbose

Print progress to stderr

--blocked <BLOCKED>

CSV of bugs/aliases each filed request blocks

-h, --help

Print help (see a summary with '-h')

<TOML>

check-crate report TOML listing the missing packages

<BRANCH>

EPEL branch to request (e.g. epel9, epel10)

ebranch find-cycles

ebranch find-cycles [-s|--source] [--source-repo] [-t|--target] [--target-repo] [--json] [--report] [--koji] [--copr] [--check-install] [--exclude] [--exclude-install] [--override] [--base-branch] [--no-auto-exclude-install] [--max-depth] [-v|--verbose] [-j|--jobs] [--refresh] [-h|--help] [PACKAGES]

Detect dependency cycles in the build graph

-s, --source <SOURCE>

Branch to take packages from (e.g. rawhide)

--source-repo <REPO>

Repository class for the source branch (fedrq -r)

-t, --target <TARGET>

Branch to port packages to (e.g. epel10)

--target-repo <REPO>

Repository class for the target branch (fedrq -r)

--json

Output as JSON instead of human-readable text

--report <FILE>

Write a TOML report (package list + dependency edges) for the branch-request subcommands to consume

--koji

Output build-order as a Koji chain build string

--copr

Generate a shell script for Copr batch builds.

The script accepts the Copr repo as its first argument, followed by any extra flags to pass to copr build-package.

--check-install

Check that subpackages are installable.

Verifies that the Requires of every subpackage in the closure can be satisfied by the target repo or by other packages in the closure.

--exclude <PKG,...>

Exclude source packages from the closure.

Comma-separated list of source packages to treat as already available on the target. Their BuildRequires will not be resolved and they will not appear in the closure. Useful for packages you plan to excise from the build requirements.

May be passed multiple times.

--exclude-install <PKG,...>

Exclude packages from installability checks.

Comma-separated list of source packages. Deps provided by these packages are treated as satisfied and they will not be pulled into the closure. Useful for packages like glibc whose version mismatch between Rawhide and older releases is expected.

May be passed multiple times.

--override <PKG,...>

Base-distro packages to treat as deliberate overrides (alternate, non-conflicting EPEL packages).

Normally a dependency whose provider exists in the base distro (RHEL / CentOS Stream) at a too-old version is *blocked*: EPEL packages must not replace base-distro packages, so the closure is pruned there and the report explains the options. Listing a package here confirms you intend to introduce an alternate package instead — the analysis then descends into it. Note an alternate package needs a NEW package review, not a branch request.

May be passed multiple times.

--base-branch <BRANCH>

Base-distro branch behind the target, probed to detect deps whose provider exists in the base at a too-old version (EPEL must not replace base packages).

Inferred for EPEL targets: epel10 uses c10s, epel9 uses al9 (fedrq's c9s layers epel9 + epel9-next, and UBI is incomplete, so AlmaLinux stands in for RHEL 9). Pass this to override the mapping or to enable the guard for targets it can't infer (e.g. epel8).

--no-auto-exclude-install

Disable auto-exclusion of default packages (e.g. glibc) from installability checks.

By default, packages whose version mismatch between branches is expected and harmless are excluded automatically.

--max-depth <MAX_DEPTH> [default: 0]

Max recursion depth (0 = unlimited)

-v, --verbose

Print progress to stderr

-j, --jobs <JOBS> [default: 0]

Number of parallel fedrq queries (0 = CPUs)

--refresh

Clear fedrq + libdnf5 repo metadata caches before querying

-h, --help

Print help (see a summary with '-h')

[PACKAGES]

Source RPM names to analyze

ebranch resolve

ebranch resolve [-s|--source] [--source-repo] [-t|--target] [--target-repo] [--json] [--report] [--koji] [--copr] [--check-install] [--exclude] [--exclude-install] [--override] [--base-branch] [--no-auto-exclude-install] [--max-depth] [-v|--verbose] [-j|--jobs] [--refresh] [-h|--help] [PACKAGES]

Resolve the full dependency closure for porting

-s, --source <SOURCE>

Branch to take packages from (e.g. rawhide)

--source-repo <REPO>

Repository class for the source branch (fedrq -r)

-t, --target <TARGET>

Branch to port packages to (e.g. epel10)

--target-repo <REPO>

Repository class for the target branch (fedrq -r)

--json

Output as JSON instead of human-readable text

--report <FILE>

Write a TOML report (package list + dependency edges) for the branch-request subcommands to consume

--koji

Output build-order as a Koji chain build string

--copr

Generate a shell script for Copr batch builds.

The script accepts the Copr repo as its first argument, followed by any extra flags to pass to copr build-package.

--check-install

Check that subpackages are installable.

Verifies that the Requires of every subpackage in the closure can be satisfied by the target repo or by other packages in the closure.

--exclude <PKG,...>

Exclude source packages from the closure.

Comma-separated list of source packages to treat as already available on the target. Their BuildRequires will not be resolved and they will not appear in the closure. Useful for packages you plan to excise from the build requirements.

May be passed multiple times.

--exclude-install <PKG,...>

Exclude packages from installability checks.

Comma-separated list of source packages. Deps provided by these packages are treated as satisfied and they will not be pulled into the closure. Useful for packages like glibc whose version mismatch between Rawhide and older releases is expected.

May be passed multiple times.

--override <PKG,...>

Base-distro packages to treat as deliberate overrides (alternate, non-conflicting EPEL packages).

Normally a dependency whose provider exists in the base distro (RHEL / CentOS Stream) at a too-old version is *blocked*: EPEL packages must not replace base-distro packages, so the closure is pruned there and the report explains the options. Listing a package here confirms you intend to introduce an alternate package instead — the analysis then descends into it. Note an alternate package needs a NEW package review, not a branch request.

May be passed multiple times.

--base-branch <BRANCH>

Base-distro branch behind the target, probed to detect deps whose provider exists in the base at a too-old version (EPEL must not replace base packages).

Inferred for EPEL targets: epel10 uses c10s, epel9 uses al9 (fedrq's c9s layers epel9 + epel9-next, and UBI is incomplete, so AlmaLinux stands in for RHEL 9). Pass this to override the mapping or to enable the guard for targets it can't infer (e.g. epel8).

--no-auto-exclude-install

Disable auto-exclusion of default packages (e.g. glibc) from installability checks.

By default, packages whose version mismatch between branches is expected and harmless are excluded automatically.

--max-depth <MAX_DEPTH> [default: 0]

Max recursion depth (0 = unlimited)

-v, --verbose

Print progress to stderr

-j, --jobs <JOBS> [default: 0]

Number of parallel fedrq queries (0 = CPUs)

--refresh

Clear fedrq + libdnf5 repo metadata caches before querying

-h, --help

Print help (see a summary with '-h')

[PACKAGES]

Source RPM names to analyze

Info

2026-08-05 sandogasa 0.19.1 Sandogasa Manual