ebranch(1)
๐ ebranch โ straight outta the Sandogasa Manual ๐
okay bestie, sit DOWN, we're doing cross-branch porting and it's gonna be iconic ๐ฆ
โจ NAME โจ
ebranch โ cross-branch porting: build order, branch requests, update checks, Bodhi karma. that's the whole vibe, no cap ๐
๐ธ SYNOPSIS ๐ธ
ebranch [-h|--help] [-V|--version] <subcommands>
๐ DESCRIPTION ๐
Cross-branch porting: build order, branch requests, update checks, Bodhi karma. yes it's the same sentence twice, that's the assignment, don't @ me ๐
๐ OPTIONS ๐
-h,--helpโ print help ๐ซถ-V,--versionโ print version โญ
๐ฅ COMMANDS ๐ฅ
ebranch check-crate
ebranch check-crate [--from] [-b|--branch] [-r|--repo] [-t|--transitive]
[--exclude-dev] [--include-optional] [--features]
[--no-default-features] [--in-tree] [--copr] [--package]
[--exclude-unmet] [--exclude] [--copr-script] [--dot] [--json] [--koji]
[--toml] [--refresh] [-v|--verbose] [-j|--jobs] [-h|--help] [NAME]
[VERSION]
Analyze a crates.io crate's dependencies. it's giving detective ๐
--from <PATH>โ render a report you saved earlier with--tomlinstead of querying crates.io and the repo all over again. recycling era โป๏ธ-b,--branch <BRANCH>โ the target branch, bestie (likeepel9,rawhide)-r,--repo <REPO>โ repository class for that branch (fedrq -r)-t,--transitiveโ expand those missing deps transitively, go deep ๐--exclude-devโ keep dev dependencies out of the transitive expansion, we don't need that energy--include-optionalโ for an application root, also count optional dependencies that its default features don't enable. but library roots and every transitive crate count all features, because that's how Fedora builds them, periodt--features <FEATURE,...>โ non-default features the Fedora build enables for an application root, exactly like%cargo_generate_buildrequires -fwould (CSV or repeated, pick your fighter). default: read from the package's rawhide spec when it already exists ๐--no-default-featuresโ build without default features (-n)--in-tree <GLOB,...>โ crates built in-tree from the root's own source (you know, a workspace's members, likeuu_*,uucore*): they get hidden as dependencies, and their own dependencies get checked as the workspace's. globs, CSV or repeated;@repositoryalso grabs every crate published from the root's repository. this merges with the config file's[check-crate.in-tree]entry for the crate ๐ง--copr <OWNER/PROJECT>โ a staging COPR (owner/project,@group/project) layered over the branch: dependencies the branch is missing get looked up there too, and they're reported as staged โ built, still in flight โ instead of missing. the branch picks the chroot (rawhideโfedora-rawhide). default: the config file's[check-crate.copr]entry for the crate. (and btw the build-script generator is--copr-script, don't get it twisted ๐)--package <NAME>โ the Fedora package name, for when it's notrust-<crate>(classic example: thecoreutilscrate isuutils-coreutils). used for the spec lookup and as the report's package name--exclude-unmetโ kick unmet-version dependencies (packaged, but too old for the requirement) out of the transitive expansion. they're included by default, because omitting them silently under-reports what needs (re)building โ and lying in a report is not the move ๐--exclude <CRATE,...>โ ignore these crates entirely, direct or transitive, as dependencies Fedora won't package (CSV or repeated). added to the config file's[check-crate] exclude, or, when no config sets one, added to the built-in benchmark set (criterion,codspeed-*,divan,iai,count_instructions)--copr-scriptโ generate a shell script for Copr batch builds (heads up: check-crate's--coprnames the staging COPR a check reads from, totally different thing).
the script accepts the Copr repo as its first argument, followed by any extra flags to pass to copr build-package. slay ๐
--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. fresh start energy โจ-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 theBUGZILLA_API_KEYenv var). it may also be specified with theBUGZILLA_API_KEYenvironment variable ๐--dry-runโ show changes without applying them. window shopping only ๐๏ธ-v,--verboseโ print progress to stderr-h,--helpโ print help<TOML>โ path to a TOML analysis file fromcheck-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] [--rpmfusion-inventory]
[--rpmfusion-renames] [--rpmfusion-dry-run] [--rpmfusion-file]
[-h|--help] <INPUT>
Check if an update would break reverse dependencies. the group project nobody wants but everybody needs ๐ญ
-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 side tag (f43-build-side-* uses f43, epel9-build-side-* uses epel9). a plain EPEL branch, whether inferred or given, is checked against its base distro plus -r @epel: epel8 โ al8, epel9 โ al9, epel10 โ c10s, and it says so on stderr. minor releases (epel10.1) have no assumed base: pass -b and -r yourself โ which you can do to override anyway, e.g. -b c9s -r @epel ๐
-r,--repo <REPO>โ repository class for the branch (fedrq -r).
defaults to the branch's stable base repos, which is the correct comparison baseline, and to @epel for a plain EPEL branch (see -b). passing -r turns that mapping off: pair it with a base branch, e.g. -b c9s -r @epel
--testing-branch <TESTING_BRANCH>โ override the branch for the new-provides queries:@testingfor Bodhi updates, and the chroot selection for COPR input (epel9โepel-9-*).
it's kept as the EPEL branch when -b is mapped to its base (epel9 โ al9 queries epel9 here); auto-detected for EPEL side tags (epel9-build-side-* uses epel9). otherwise it defaults to --branch ๐
--koji-profile <KOJI_PROFILE>โ Koji CLI profile (e.g.cbsfor CentOS)--jsonโ machine-readable JSON output--detailedโ show full lists (every package, Provide, and reverse dep) instead of counts plus the actionable problems. lore dump mode ๐-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 get prompted with that suggestion as the default. requires a Bodhi update alias or URL as input. reuses thebodhiCLI's login session, and starts an interactive login first if there's 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 get prompted. the full plan is shown for confirmation before posting. no surprises here, bestie โ
--comment <COMMENT>โ reviewer notes added as a section near the top of the posted report (with--give-karma, or the review comment--submitposts after creating the update). prompted for interactively when omitted;--yesskips the prompt ๐ฌ-y,--yesโ skip vote/submit confirmations; non-update bugs get0--submitโ submit the side tag as a Bodhi update once the check passes: it creates the update from the tag (the API behindbodhi 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 gets published. requires a Koji side tag as input and update notes via--notesor--notes-file. reuses thebodhiCLI'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) โ that's 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 get asked whether to submit anyway (default no).
non-interactive runs and --yes never submit a failing update. the safety rails are ON ๐
--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, orurgent. Bodhi requires a real severity for--type security, so don't skimp ๐ฏ--bug <ID>โ bug ID(s) to associate and close (repeated or CSV)--stable-karma <N>[default: 3]โ karma needed to push stable (default3)--unstable-karma <N>[default: -3]โ negative karma that unpushes (default-3)--disable-autokarmaโ don't auto-push at the karma thresholds ๐--rpmfusion-inventory [<PATH>]โ RPM Fusion inventory (poi-tracker sync-rpmfusion). a package with a counterpart there never auto-pushes. without a path, it uses the inventory you generated, or the one your packages shipped ๐ฆ--rpmfusion-renames <PATH>โ Fedora-to-RPM-Fusion renames for counterparts the naming doesn't make guessable (configs/rpmfusion/renames.toml). found beside the inventory when not given--rpmfusion-dry-runโ do everything except send: show the RPM Fusion bug or comment that would be written, and where ๐--rpmfusion-fileโ go file the RPM Fusion rebuild request for an update that's already been submitted. โจ Yeah bestie,--submitfiles these automatically for the update it makes โ this flag is for the ones it can't reach: an update submitted through Bodhi's web UI, one that predates this flag, or one whose earlier run stopped somewhere between the submit and the filing. ๐
Give every alias for the same change in one run, so they all become one bug listing all of them โ exactly like a batch of side tags would. ๐
-h,--helpโ Print help (see a summary with-h). ๐<INPUT>โ the update(s) to check, each one of:- a Koji side tag (
f45-build-side-143123) - a Bodhi update alias or URL (
FEDORA-EPEL-2026-f9eaa11e18) - a COPR project:
owner/projectspec (@rust/uutils-and-nushell) or its URL. COPR input requires-b(-b epel9also picks the chroot,epel-9-*).
- a Koji side tag (
Several may be given, comma-separated or repeated, to carry one change across releases in a single run:
ebranch check-update f45-build-side-1,f44-build-side-2 --submit
They are checked and submitted in order, and every input is validated before any of them is submitted. RPM Fusion is told once per package afterwards, with every update linked โ which is why a fan-out belongs in one run: three EPEL minors are one rebuild for them, not three. ๐
๐ฆ ebranch check-wip
ebranch check-wip [--copr] [--target] [--offline] [--no-offline]
[--prune] [--rescan-reviews] [--side-tag] [--add] [--forget] [--set]
[--package] [--json] [-h|--help] <LEDGER>
Track packages on their way into the distro ๐ค๏ธโจ
--copr <COPR>โ COPR staging it (owner/projector URL) ๐--target <BRANCH,...>โ releases targeted (repeated or CSV) ๐ฏ--offlineโ report from the ledger, contacting absolutely nothing ๐--no-offlineโ refresh, overriding a config default ๐--prune [<WHAT>...]โ forget what is gone: packages (default), side-tags ๐งน
Possible values:
packages: Packages no longer staged in any COPR the ledger followsside-tags: Side tags Koji says no longer exist
--rescan-reviewsโ search for review requests again ๐--side-tag <TAG,...>โ Koji side tags built into (repeated or CSV) ๐ท๏ธ--add <NAME,...>โ track packages no COPR staged (repeated or CSV) โ--forget <NAME,...>โ drop packages and stop tracking them (repeated or CSV) ๐--set <PKG=ROUTE>โ set a route:review:BUG,pr:ID, ordirect๐งญ--package <NAME,...>โ limit to these packages (repeated or CSV) ๐ฆ--jsonโ machine-readable JSON output ๐ค-h,--helpโ Print help (see a summary with-h). ๐<LEDGER>โ ledger file tracking the effort (created if absent) ๐
๐ ebranch close
ebranch close [--claim] [--bugzilla-url] [--api-key] [--fas] [--sig]
[--base-branch] [--dry-run] [-y|--yes] [-v|--verbose] [-h|--help] <TOML>
<BRANCH>
Close branch requests whose package has landed ๐ฌโ
--claimโ also take the bugs being closed (assigned_to = your Bugzilla account), without asking ๐ค--bugzilla-url <BUGZILLA_URL>[default: https://bugzilla.redhat.com]โ Bugzilla base URL ๐--api-key <API_KEY>โ Bugzilla API key (defaults toBUGZILLA_API_KEYenv var or the key fromebranch config) May also be specified with theBUGZILLA_API_KEYenvironment variable. ๐--fas [<FAS>]โ volunteer as co-maintainer of the package. ๐ซถ(omitted)โ file without volunteering--fasโ the FAS fromebranch config--fas NAMEโ that FAS
A bare --fas takes the next word as the name, so put it last or separate the positionals with --:
ebranch file-requests --fas -- pkgs.toml epel10
--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 beCANTFIX). โ ๏ธ
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 ๐-y,--yesโ file releng tickets without confirming each one ๐-v,--verboseโ print progress to stderr ๐ข-h,--helpโ Print help (see a summary with-h). ๐<TOML>โ check-crate or resolve report TOML with recorded branch requests ๐<BRANCH>โ EPEL branch to request (e.g.epel9,epel10) ๐ฟ
๐ ebranch config
ebranch config [-h|--help]
Set up Bugzilla API key and other settings โ๏ธโจ
-h,--helpโ Print help ๐
๐งน ebranch copr-prune
ebranch copr-prune [-y|--yes] [--json] [-v|--verbose] [-h|--help] <COPR>
Prune a staging COPR of what its target releases caught up on โ๏ธ๐ฆ
-y,--yesโ delete every caught-up package without asking ๐--jsonโ Print the plan as JSON (never deletes) ๐ค-v,--verboseโ print progress to stderr ๐ข-h,--helpโ Print help ๐<COPR>โ COPR project:owner/project,@group/project, or its URL ๐
๐ฅ ebranch escalate
ebranch escalate [--bugzilla-url] [--api-key] [--fas] [--sig]
[--base-branch] [--dry-run] [-y|--yes] [-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 toBUGZILLA_API_KEYenv var or the key fromebranch config) May also be specified with theBUGZILLA_API_KEYenvironment variable. ๐--fas [<FAS>]โ volunteer as co-maintainer of the package. ๐ซถ(omitted)โ file without volunteering--fasโ the FAS fromebranch config--fas NAMEโ that FAS
A bare --fas takes the next word as the name, so put it last or separate the positionals with --:
ebranch file-requests --fas -- pkgs.toml epel10
--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 beCANTFIX). โ ๏ธ
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 ๐-y,--yesโ file releng tickets without confirming each one ๐-v,--verboseโ print progress to stderr ๐ข-h,--helpโ Print help (see a summary with-h). ๐<TOML>โ check-crate or resolve 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] [-y|--yes] [-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 toBUGZILLA_API_KEYenv var or the key fromebranch config) May also be specified with theBUGZILLA_API_KEYenvironment variable. ๐--fas [<FAS>]โ volunteer as co-maintainer of the package. ๐ซถ(omitted)โ file without volunteering--fasโ the FAS fromebranch config--fas NAMEโ that FAS
A bare --fas takes the next word as the name, so put it last or separate the positionals with --:
ebranch file-requests --fas -- pkgs.toml epel10
--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 beCANTFIX). โ ๏ธ
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 ๐-y,--yesโ file releng tickets without confirming each one ๐-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 or resolve 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] [-y|--yes] [-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 toBUGZILLA_API_KEYenv var or the key fromebranch config) May also be specified with theBUGZILLA_API_KEYenvironment variable. ๐--fas [<FAS>]โ volunteer as co-maintainer of the package. ๐ซถ(omitted)โ file without volunteering--fasโ the FAS fromebranch config--fas NAMEโ that FAS
A bare --fas takes the next word as the name, so put it last or separate the positionals with --:
ebranch file-requests --fas -- pkgs.toml epel10
--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 beCANTFIX). โ ๏ธ
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 ๐-y,--yesโ just file the releng tickets, no confirmation per ticket, we trust you bestie ๐-v,--verboseโ spill the progress to stderr so you can watch it cook ๐ฅ--blocked <BLOCKED>โ a CSV of bugs/aliases that every single filed request blocks ๐ง-h,--helpโ print help (peep the summary with-h)<TOML>โ a check-crate or resolve report TOML that lists the missing packages. like, the receipts, basically ๐งพ<BRANCH>โ the EPEL branch you're requesting, e.g.epel9,epel10๐ฟ
โจ ebranch find-cycles โจ
ebranch find-cycles [-s|--source] [--source-repo] [-t|--target]
[--target-repo] [--json] [--report] [--koji] [--copr-script]
[--check-install] [--exclude] [--exclude-install] [--override]
[--base-branch] [--max-depth] [-v|--verbose] [-j|--jobs] [--refresh]
[--graph] [-h|--help] [PACKAGES]
Detect dependency cycles in the build graph ๐๐ญ the circular-dependency jump-scare is real and this is how you catch it.
OPTIONS
-s,--source <SOURCE>โ branch you're pulling packages from (e.g.rawhide) ๐ฅ--source-repo <REPO>โ repository class for the source branch, that's thefedrq -rthing-t,--target <TARGET>โ branch you're porting those packages to (e.g.epel10) ๐ฏ--target-repo <REPO>โ repository class for the target branch (fedrq -r)--jsonโ output as JSON instead of the human-readable text, for when a script is the main character ๐ค--report <FILE>โ write a TOML report (package list + dependency edges) so thebranch-requestsubcommands can snack on it ๐--kojiโ output the build-order as a Koji chain build string ๐--copr-scriptโ generate a shell script for Copr batch builds ๐
Heads up: check-crate's --copr is what names the staging COPR a check reads from.
The script takes the Copr repo as its first argument, then any extra flags you wanna hand to copr build-package.
--check-installโ check that the subpackages are actually installable, no cap ๐ง
It verifies that the Requires of every subpackage in the closure can be satisfied by the target repo or by other packages inside the closure.
--exclude <PKG,...>โ exclude source packages from the closure โ๏ธ
Comma-separated list of source packages you're treating as already available on the target. Their BuildRequires won't get resolved and they won't show up in the closure. Chef's kiss for packages you plan to excise from the build requirements.
May be passed multiple times. ๐
--exclude-install <PKG,...>โ exclude packages from the installability checks ๐
Comma-separated list of source packages. Deps provided by these packages get treated as satisfied and they won't be pulled into the closure. Super useful for things like glibc where a version mismatch between Rawhide and older releases is just... expected, bestie.
May be passed multiple times. ๐
--override <PKG,...>โ base-distro packages to treat as deliberate overrides (the alternate, non-conflicting EPEL packages) ๐ซ
Normally, a dependency whose provider already exists in the base distro (RHEL / CentOS Stream) but at a too-old version is blocked: EPEL packages must not replace base-distro packages, so the closure gets pruned right there and the report explains your options. Listing a package here is you confirming you intend to introduce an alternate package instead โ and the analysis then descends into it. Note: an alternate package needs a NEW package review, not a branch request. ๐
--base-branch <BRANCH>โ base-distro branch sitting behind the target, probed to detect deps whose provider exists in the base at a too-old version (because EPEL must not replace base packages) ๐ก๏ธ
It's inferred for EPEL targets: epel10 uses c10s, epel9 uses al9 (fun fact: 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 turn the guard on for targets it can't infer (e.g. epel8).
--max-depth <MAX_DEPTH>[default: 0]โ max recursion depth (0= unlimited) ๐ณ๏ธ-v,--verboseโ print progress to stderr-j,--jobs <JOBS>[default: 0]โ number of parallelfedrqqueries (0= CPUs) โก--refreshโ clear thefedrq+libdnf5repo metadata caches before querying ๐งผ--graph <PATH>โ a saved dependency graph of the source branch (apoi-tracker depsgraph JSON). Source-side lookups it can answer get served offline; only the frontier, the target and the base actually go tofedrq. slay ๐ฆ-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-script]
[--check-install] [--exclude] [--exclude-install] [--override]
[--base-branch] [--max-depth] [-v|--verbose] [-j|--jobs] [--refresh]
[--graph] [-h|--help] [PACKAGES]
Resolve the full dependency closure for porting ๐ the whole web, every dep, traced out so you know exactly what has to come along for the ride.
OPTIONS
-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 thebranch-requestsubcommands to consume ๐--kojiโ output build-order as a Koji chain build string ๐--copr-scriptโ generate a shell script for Copr batch builds ๐
Reminder: check-crate's --copr names the staging COPR a check reads from.
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. ๐
--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).
--max-depth <MAX_DEPTH>[default: 0]โ max recursion depth (0= unlimited) ๐ณ๏ธ-v,--verboseโ print progress to stderr-j,--jobs <JOBS>[default: 0]โ number of parallelfedrqqueries (0= CPUs) โก--refreshโ clearfedrq+libdnf5repo metadata caches before querying ๐งผ--graph <PATH>โ saved dependency graph of the source branch (apoi-tracker depsgraph JSON): source-side lookups it can answer are served offline; only the frontier, the target and the base go tofedrq๐ฆ-h,--helpโ print help (see a summary with-h)[PACKAGES]โ source RPM names to analyze ๐
okay that's the whole page bestie, you made it to the end ๐๐ this was sandogasa version 0.27.0, dated 2026-10-21, and it's the ebranch(1) manual page. go forth and port those packages, you're literally the main character of EPEL now ๐โจ
๐ฆ where this page comes from
- fedora 43: sandogasa 0.27.0-2.fc43 ยท (Apache-2.0 OR MIT) AND LicenseRef-Fedora-Public-Domain AND Unicode-3.0 AND Apache-2.0 AND ISC AND MIT AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR ISC OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND BSD-3-Clause AND MPL-2.0 AND (Unlicense OR MIT) AND Zlib
- fedora 44: sandogasa 0.27.0-2.fc44 ยท (Apache-2.0 OR MIT) AND LicenseRef-Fedora-Public-Domain AND Unicode-3.0 AND Apache-2.0 AND ISC AND MIT AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR ISC OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND BSD-3-Clause AND MPL-2.0 AND (Unlicense OR MIT) AND Zlib
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms