REPO(1)
π NAME π
okay so bestie, welcome to REPO(1) β this is the Repo Manual, and today's main character is repo forall. like, the actual page for repo forall, fr fr. it's a manual page, it's giving very "read me before you break prod" energy, and we're gonna get through it together π
β¨ SYNOPSIS β¨
repo forall [<project>...] -c <command> [<arg>...]
that's the whole vibe in one line. yes queen, that's it. π
πΈ DESCRIPTION πΈ
Summary β the little tl;dr of what this thing does:
run a shell command in each project. every single one. no skips. π
and here's the other shape it can take:
repo forall -r str1 [str2] ... -c <command> [<arg>...]
so like, -r plus a bunch of strings plus a command. we'll get into it, don't worry bestie π«Ά
π OPTIONS π
-h,--helpβ shows this help message and then dips out (exits). your bestie when you're lost β¨-j JOBS,--jobs=JOBSβ how many jobs to run in parallel. default? based on how many CPU cores you've got. so like, it already knows your machine, iykyk π-r,--regexβ only run the command on projects matching the regex or wildcard expression. filtering era π-i,--inverse-regexβ the opposite vibe: only run on projects that do not match the regex or wildcard expression. not like other projects π-g GROUPS,--groups=GROUPSβ only run on projects matching the groups you specify. group chat rules apply π«Ά-c,--commandβ the command (and its arguments) you wanna execute. the whole point, honestly π₯-e,--abort-on-errorsβ if a command exits unsuccessfully, abort. no mercy, no finishing the list π--ignore-missingβ silently skip and do not exit non-zero just because checkouts are missing. it's giving "no thoughts, head empty" π--interactiveβ force interactive usage. yes ma'am, we're doing this live β¨
π Logging options:
-v,--verboseβ show all output. everything. all of it. the tea is fully spilled π-q,--quietβ only show errors. peace and quiet, queen π-pβ show project headers before output. so you know whose output you're looking at π¦
π§ Multi-manifest options:
--outer-manifestβ operate starting at the outermost manifest. going all the way out β--no-outer-manifestβ do not operate on outer manifests. boundaries, bestie π--this-manifest-onlyβ only operate on this (sub)manifest. this one. only this one. periodt β¨--no-this-manifest-only,--all-manifestsβ operate on this manifest and its submanifests. the whole family πΈ
run repo help forall to view the detailed manual. little reminder from the page itself, bestie π
π¦ DETAILS π¦
executes the same shell command in each project. iconic behavior honestly π
the -r option lets you run the command only on projects matching a regex or wildcard expression. filtered, curated, slay β¨
by default, projects are processed non-interactively and in parallel. but if you wanna run interactive commands, make sure you pass --interactive to force --jobs 1. and while the processing order of projects is not guaranteed, the order of project output is stable. so like, the output keeps it together even when the timing doesn't π«Ά
π Output Formatting π
the -p option makes repo forall bind pipes to the command's stdin, stdout and stderr streams, and pipe all that output into one continuous stream displayed in a single pager session. project headings get inserted before each command's output is displayed. and if a command produces no output in a project? no heading gets displayed. silence is silence π
the formatting convention used by -p is very suitable for some types of searching, e.g. repo forall -p -c git log -SFoo will print all commits that add or remove references to Foo. chef's kiss for searching, fr fr π
the -v option makes repo forall display stderr messages if a command produces output only on stderr. normally, the -p option causes command output to be suppressed until the command produces at least one byte of output on stdout. so -v is your "hello?? i'm talking" option π
π Environment π
pwdis the project's working directory. and if the current client is a mirror client, thenpwdis the Git repository. know where you are, bestie β¨REPO_PROJECTis set to the unique name of the project. it's giving main character energy πREPO_PATHis the path relative the the root of the client. (yes, "the the" β that's the manual's typo, we're preserving it, periodt π)REPO_OUTERPATHis the path of the sub manifest's root relative to the root of the client.REPO_INNERPATHis the path relative to the root of the sub manifest.REPO_REMOTEis the name of the remote system from the manifest.REPO_LREVis the name of the revision from the manifest, translated to a local tracking branch. if you need to pass the manifest revision to a locally executedgitcommand, useREPO_LREV.REPO_RREVis the name of the revision from the manifest, exactly as written in the manifest. verbatim. no edits πREPO_UPSTREAMis the name of the upstream branch as specified in the manifest.REPO_DEST_BRANCHis the name of the destination branch for code review, as specified in the manifest.REPO_PROJECT_FETCH_URLis the full resolved fetch URL for the project.REPO_COUNTis the total number of projects being iterated.REPO_Iis the current (1-based) iteration count. can be used in conjunction withREPO_COUNTto add a simple progress indicator to your command. progress bar era β¨REPO__*are any extra environment variables, specified by the"annotation"element under any project element. this can be useful for differentiating trees based on user-specific criteria, or simply annotating tree details. cute little extras πΈ
also: shell positional arguments ($1, $2, .., $#) are set to any arguments following <command>. π
Example: to list projects:
repo forall -c 'echo $REPO_PROJECT'
notice that $REPO_PROJECT is quoted to ensure it is expanded in the context of running <command> instead of in the calling shell. quote it or cry about it, bestie π
unless -p is used, stdin, stdout, stderr are inherited from the terminal and are not redirected.
if-eis used, when a command exits unsuccessfully,repo forallwill abort without iterating through the remaining projects. like, it stops. immediately. no "one more project". π
okay that's the whole page, you ate that π this was repo forall from the Repo Manual, dated June 2026 β go forth and forall responsibly, bestie ππ¦β¨
π¦ where this page comes from
- arch rolling: repo 2.67-1 Β· Apache-2.0
- fedora 43: repo 2.68-1.fc43
- fedora 43: repo 2.69-1.fc43 Β· Apache-2.0
- fedora 44: repo 2.68-1.fc44
- fedora 44: repo 2.69-1.fc44 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms