subversion
subversion
Apache Subversion version control system
curl -fsSL https://unflab.app/get | sh -s -- subversion
Installs to ~/.local/bin. Add --prefix /usr/local/bin to
put it somewhere else, or --uninstall to remove it.
Why it’s here
Escapes a dependency tree: Homebrew’s build pulls in libraries this tool never touches at run time.
Details
| Original package | subversion |
| Version | 1.14.5 |
| Licence | Apache-2.0 |
| Upstream | https://subversion.apache.org/ |
| Source | subversion-1.14.5.tar.bz2 |
| Version check | subversion --version |
| Download | unflab-subversion-1.14.5-arm64-apple-darwin.tar.gz |
Built from that exact tarball, with its SHA-256 pinned in the
recipe. The binary links against nothing outside /usr/lib
and /System/, checked in CI before release.
Apache Subversion, the centralised version control system. Still the
system of record for a great many long-lived repositories, and the only
way to read them.
svn checkout https://svn.example.com/repos/project
svn status
svn commit -m "..."
svn log --limit 10
# Serve a repository over svn:// with no web server involved
svnadmin create /path/to/repo
svnserve -d -r /path/to/repo
man svn documents the client; each of the other tools has its own
page.
Install
./install.sh # into ~/.local/bin
./install.sh --prefix /usr/local/bin
./install.sh --uninstall
About this build
brew install subversion pulls in apache-serf, apr, apr-util, lz4,
utf8proc and gettext — six formulae for a version control client.
This package has none of them:
- apr and apr-util are compiled from source and linked
statically. macOS does ship APR in/usr/lib, but not the
apr-1-configscript that both serf and Subversion use to find it —
and those stubs are deprecated Apple libraries that may not survive a
future macOS release. - serf is compiled and linked statically, against a static OpenSSL.
- lz4 and utf8proc are bundled by upstream, so
--with-lz4=internal --with-utf8proc=internaldrops both. - gettext goes with
--disable-nls.
The result depends only on libz, libsqlite3, libexpat,
libiconv, libsasl2 and libSystem, plus the CoreServices, Security
and CoreFoundation frameworks — all of which macOS already provides.
http:// and https:// access works, which is the point of including
serf at all: without it Subversion can only reach file:// and
svn://, which would be a package that looks complete and can’t talk
to any repository anyone actually hosts. Certificate verification uses
macOS’s own trust store.
What’s included
All eleven binaries upstream builds. They share one library set, so
none of them adds a dependency the others didn’t already bring:
svn |
the client |
svnadmin |
create and maintain repositories |
svnlook |
inspect a repository without a working copy |
svnserve |
serve a repository over svn:// |
svnsync |
mirror one repository into another |
svnrdump |
dump and load over the network |
svndumpfilter |
filter a dump stream by path |
svnfsfs |
maintenance for FSFS-backed repositories |
svnmucc |
commit multiple changes in one operation |
svnversion |
report a working copy’s revision |
svnbench |
benchmarking helper |
svnserve is a daemon but not a service: it runs in the foreground,
needs no privileges, and installs nothing that starts on boot.
A note on old working copies
Subversion 1.7 changed the working copy format, and 1.14 cannot
upgrade a working copy created before then — it reports “working copy
is too old” and offers no way forward. If you have pre-1.7 checkouts
(a .svn directory in every subdirectory rather than one at the root),
you need Subversion 1.7 to upgrade them first. The file contents are
readable directly from .svn/text-base/ in the meantime.
Repositories are unaffected: 1.14 reads repository formats going a long
way back.