Subversion Mirror

From: Warner Losh <>
Date: Thu, 21 Oct 2021 23:19:00 UTC

This email documents two recent events with the git -> subversion mirror.
This seems like the best way to document these two issues given their
esoteric nature.

We stopped mirroring stable/12 about a week ago. The root cause of this
outage was traced to there being an empty commit that was merged. This
caused the git cherry-pick that we do to bring these into the git-svn tree
that we use to publish to subversion to fail. The code has been updated to
handle these commits in the future. In the future, empty commits will
simply be skipped. Kyle did these commits to record a commit/backout pair
had been 'merged' so that they stopped showing up in the tools as merge
candidates. Since this metadata exists only in the git world, dropping them
in the subversion world is fine (we've stopped updating mergeinfo data for

The second incident was when the BETA1 builds were delayed by 23 hours.
This was due to the creation of the releng/12.3 branch in git. This is our
first new releng branch since we started mirroring to svn and the process
was not documented by the author of the git to subversion script (namely
me). It took me a while to understand why simply creating the branch was
insufficient and to realize the proper path forward.

The proper sequence of events is to create new releng/12.x branch from the
branch point by hand in subversion. All these things should be done as user

% svn copy file:///home/svn/base/stable/12@r370949
file:///home/svn/base/releng/12.3 -m 'Create releng/12.3'

where r370949 was the point in subversion where releng/12.3 was branched.
Once this branch was created, the 'git-svn' pump needed to be primed. The
releng123 branch needed to be added to ~git2svn/git2svn.conf file (and but
not to the list of branches= yet):

# releng/12.3 config

Once that was done, we needed to initialize the git2svn tree that lives on, as the user git2svn:

% ./gsm2 -b releng123 branch-init

which will create the necessary git-svn tree for the crontab's 'gsm2
mirror' command to work. Once the branch has been initialized, releng123
should be added to the branches= so that commits start to flow.

These issues have been corrected, so the git -> svn mirror hopefully will
go back to being a background process that just works. One could argue this
should be automated. I've chosen not to automated it because it's a lot
more effort to do that than to document the process should we have a
12.4-RELEASE in the future (and its associated releng/12.4).

Finally, we're still mirroring the 11.x branches. This will stop at some
point in the future, though, most likely the next time the mirroring of
11.x breaks :).