git: 235182f47c1a - main - devel/subversion: update to 1.15.0, full rework of master and slave ports
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 01 Nov 2026 20:24:47 UTC
The branch main has been updated by michaelo:
URL: https://cgit.FreeBSD.org/ports/commit/?id=235182f47c1a706f57f9e32c25172c52e9dd94f0
commit 235182f47c1a706f57f9e32c25172c52e9dd94f0
Author: Michael Osipov <michaelo@FreeBSD.org>
AuthorDate: 2026-10-30 20:23:19 +0000
Commit: Michael Osipov <michaelo@FreeBSD.org>
CommitDate: 2026-11-01 20:22:55 +0000
devel/subversion: update to 1.15.0, full rework of master and slave ports
devel/subversion:
- Bump to 1.15.0 (DISTVERSION).
- Replace the opt-in WITH_REPOSITORY_CREATION pw useradd/groupadd
logic with framework USERS=/GROUPS=, mirroring devel/git's
git_daemon pattern; register the svn account in UIDs/GIDs with
HOME=/var/db/svn to match svnserve's own rc.d default. Repository
creation itself is dropped as out of scope for a port to manage.
Documented in UPDATING, since it affects existing installs with a
manually-created svn account.
- TOOLS now only gates genuinely niche binaries; drop it from
OPTIONS_DEFAULT, add SVNSERVE_WRAPPER instead. svnauthz/
svnauthz-validate/svnbench move into core via a patch-build.conf
hunk, matching Debian. svnmover, fsfs-access-map, and x509-parser
are no longer shipped; fsfs-stats is renamed to svnfsfs-stats via a
new patch-Makefile.in.
- DATADIR now installs only xslt/ unconditionally and hook-scripts/
(flattened, no mailer/ subdirectory) behind a new HOOKS option;
dist/, buildbot/, po/, dev/, examples/, client-side/, server-side/,
backup/ are no longer shipped. All C/C++ source is excluded from
DATADIR via EXTRACT_AFTER_ARGS.
- SVNSERVE_WRAPPER now activates automatically when enabled (installs
as bin/svnserve directly, no manual rename from a .sample file) and
is in OPTIONS_DEFAULT.
- Update files/patch-build.conf and files/patch-configure for 1.15.0's
line-number/context shifts.
Slave ports (devel/java-/py-/ruby-/p5-subversion,
security/subversion-gnome-keyring, www/mod_subversion):
- Drop the dead SVN_BUILD_BINDINGS=yes assignment from all four
bindings ports.
- devel/java-subversion: add the --with-junit requirement introduced
by upstream r1933892 (BUILD_DEPENDS on java/junit).
- devel/py-subversion: apply extra-patch-check-swig-py314 only when
building against LTS; upstream already fixes this for 1.15.0, and
the patch file itself moved to devel/subversion-lts/files/ in a
separate commit.
- PORTREVISION_LATEST reset to 0 for all affected slave ports (the
version bump itself forces the upgrade signal); PORTREVISION_LTS
bumped where a port's own Makefile logic changed independent of it.
Verified against real poudriere jail builds (configure/build/stage/
check-plist/stage-qa/install/pkg info -d), not just Makefile review.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
---
GIDs | 2 +-
UIDs | 2 +-
UPDATING | 29 ++
devel/java-subversion/Makefile | 9 +-
devel/p5-subversion/Makefile | 6 +-
devel/py-subversion/Makefile | 12 +-
devel/ruby-subversion/Makefile | 6 +-
devel/subversion/Makefile | 146 +++------
devel/subversion/Makefile.common | 22 +-
devel/subversion/distinfo | 6 +-
.../subversion/files/extra-patch-check-swig-py314 | 231 ---------------
devel/subversion/files/patch-Makefile.in | 13 +
devel/subversion/files/patch-build.conf | 51 +++-
devel/subversion/files/patch-configure | 2 +-
devel/subversion/files/svnserve.in | 23 +-
devel/subversion/pkg-plist | 325 ++-------------------
security/subversion-gnome-keyring/Makefile | 2 +-
www/mod_subversion/Makefile | 2 +-
18 files changed, 190 insertions(+), 699 deletions(-)
diff --git a/GIDs b/GIDs
index 068f0344f42d..16054803e8e8 100644
--- a/GIDs
+++ b/GIDs
@@ -345,7 +345,7 @@ evcc:*:400:
spectrumknx:*:401:
lid_switchd:*:402:
airplane_radiosd:*:403:
-# free: 404
+svn:*:404:
# free: 405
# free: 406
# free: 407
diff --git a/UIDs b/UIDs
index b33ac8ccab51..5f9600e721e8 100644
--- a/UIDs
+++ b/UIDs
@@ -350,7 +350,7 @@ evcc:*:400:400::0:0:evcc Daemon:/nonexistent:/usr/sbin/nologin
spectrumknx:*:401:401::0:0:SpectrumKNX Daemon:/var/db/spectrumknx:/usr/sbin/nologin
# free: 402
# free: 403
-# free: 404
+svn:*:404:404::0:0:Subversion daemon:/var/db/svn:/usr/sbin/nologin
# free: 405
# free: 406
# free: 407
diff --git a/UPDATING b/UPDATING
index 11d8fae394ff..9ea5c9b48dcc 100644
--- a/UPDATING
+++ b/UPDATING
@@ -5,6 +5,35 @@ they are unavoidable.
You should get into the habit of checking this file for changes each time
you update your ports collection, before attempting any port upgrades.
+20261101:
+ AFFECTS: users of devel/subversion
+ AUTHOR: michaelo@apache.org
+
+ The port has been updated to 1.15.0 and received a full rework of
+ both the master and slave ports, not just a version bump. A lot of
+ content that used to ship has been thrown out: the TOOLS option now
+ only gates a handful of genuinely niche binaries (svnauthz,
+ svnauthz-validate, and svnbench moved into the core package); the
+ svnmover, fsfs-access-map, and x509-parser tools are no longer
+ built or installed at all; fsfs-stats is renamed to svnfsfs-stats;
+ and the example-scripts DATADIR no longer ships upstream's
+ contributor/CI/release tooling (dist/, buildbot/, po/, dev/,
+ examples/, client-side/, server-side/, backup/) -- only xslt/ is
+ still installed unconditionally, with hook-scripts/ moved behind a
+ new HOOKS option. Repository creation (the old WITH_REPOSITORY_CREATION
+ knob) has also been dropped entirely; that is now solely the admin's
+ job, not the port's.
+
+ Separately, the svnserve user and group are now managed through the
+ ports framework (USERS=/GROUPS=, registered in the tree's UIDs/GIDs
+ files) instead of the port's own pw useradd/groupadd logic. The
+ standard home directory for the svn account is now /var/db/svn,
+ matching svnserve's own rc.d default. If you already have a
+ manually-created svn user/group from a previous install with a
+ different home directory (e.g. /home/svn), either migrate your data
+ to /var/db/svn or edit the svn user's home directory accordingly;
+ the port will not do this for you.
+
20261031:
AFFECTS: users of devel/subversion
AUTHOR: michaelo@apache.org
diff --git a/devel/java-subversion/Makefile b/devel/java-subversion/Makefile
index e86df6e06d80..6595d4442f10 100644
--- a/devel/java-subversion/Makefile
+++ b/devel/java-subversion/Makefile
@@ -6,16 +6,17 @@ WWW= https://subversion.apache.org/
USES= java:build
-PORTREVISION_LATEST= 7
-PORTREVISION_LTS= 7
-
-SVN_BUILD_BINDINGS= yes
+PORTREVISION_LATEST= 0
+PORTREVISION_LTS= 9
.include "${.CURDIR}/../../devel/subversion/Makefile.addons"
CATEGORIES+= java
+BUILD_DEPENDS+= ${JAVAJARDIR}/junit.jar:java/junit
+
CONFIGURE_ARGS+= --enable-javahl \
+ --with-junit=${JAVAJARDIR}/junit.jar \
--without-swig-perl \
--without-swig-python \
--without-swig-ruby \
diff --git a/devel/p5-subversion/Makefile b/devel/p5-subversion/Makefile
index 294b2c3eba67..e2dc5b29c9af 100644
--- a/devel/p5-subversion/Makefile
+++ b/devel/p5-subversion/Makefile
@@ -7,10 +7,8 @@ WWW= https://subversion.apache.org/
USES= perl5
USE_PERL5= build run
-PORTREVISION_LATEST= 2
-PORTREVISION_LTS= 2
-
-SVN_BUILD_BINDINGS= yes
+PORTREVISION_LATEST= 0
+PORTREVISION_LTS= 3
MAKE_JOBS_UNSAFE= yes
diff --git a/devel/py-subversion/Makefile b/devel/py-subversion/Makefile
index e63b77bdbec3..93e84088e561 100644
--- a/devel/py-subversion/Makefile
+++ b/devel/py-subversion/Makefile
@@ -4,7 +4,7 @@ MAINTAINER= michaelo@apache.org
COMMENT= Python bindings for Apache Subversion
WWW= https://subversion.apache.org/
-BUILD_DEPENDS= ${LOCALBASE}/include/py3c.h:devel/py3c
+BUILD_DEPENDS+= ${LOCALBASE}/include/py3c.h:devel/py3c
USES= python:patch
USE_PYTHON= flavors py3kplist
@@ -12,15 +12,15 @@ USE_PYTHON= flavors py3kplist
# There is bug in python bindings Makefile
MAKE_JOBS_UNSAFE=yes
-PORTREVISION_LATEST= 3
-PORTREVISION_LTS= 3
-
-SVN_BUILD_BINDINGS= yes
+PORTREVISION_LATEST= 0
+PORTREVISION_LTS= 4
.include "${.CURDIR}/../../devel/subversion/Makefile.addons"
CATEGORIES+= python
-EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-check-swig-py314
+.if ${WITH_SUBVERSION_VER:U} == LTS
+EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-check-swig-py314
+.endif
CONFIGURE_ARGS+= --with-swig-python=${PYTHON_CMD} \
--without-swig-perl \
diff --git a/devel/ruby-subversion/Makefile b/devel/ruby-subversion/Makefile
index 60a9e03c5895..00522275afd1 100644
--- a/devel/ruby-subversion/Makefile
+++ b/devel/ruby-subversion/Makefile
@@ -6,10 +6,8 @@ WWW= https://subversion.apache.org/
USES+= compiler:c11 ruby
-PORTREVISION_LATEST= 3
-PORTREVISION_LTS= 3
-
-SVN_BUILD_BINDINGS= yes
+PORTREVISION_LATEST= 0
+PORTREVISION_LTS= 4
.include "${.CURDIR}/../../devel/subversion/Makefile.addons"
diff --git a/devel/subversion/Makefile b/devel/subversion/Makefile
index 88f7b562c798..4685432bc1ea 100644
--- a/devel/subversion/Makefile
+++ b/devel/subversion/Makefile
@@ -1,5 +1,3 @@
-PORTREVISION= 8
-
MAINTAINER= michaelo@apache.org
COMMENT= Apache Subversion is a full-featured version control system
WWW= https://subversion.apache.org/
@@ -13,15 +11,17 @@ PORTDOCS= BUGS CHANGES COMMITTERS INSTALL README
OPTIONS_DEFINE= \
DOCS \
GPG_AGENT \
+ HOOKS \
NLS \
SASL \
SERF \
SVNSERVE_WRAPPER\
TOOLS
-OPTIONS_DEFAULT=GPG_AGENT SERF TOOLS
+OPTIONS_DEFAULT=GPG_AGENT SERF SVNSERVE_WRAPPER
GPG_AGENT_DESC= Enable GPG agent credential cache
+HOOKS_DESC= Install server-side hook script examples
SERF_DESC= WebDAV/Delta-V (HTTP/HTTPS) repo access module
SVNSERVE_WRAPPER_DESC= Enable svnserve wrapper (umask setter)
TOOLS_DESC= Install several tools
@@ -32,10 +32,8 @@ SHEBANG_REGEX= ./tools/.*
.include "Makefile.common"
-SVNREPOS?= /home/svn/repos
-SVNFSTYPE?= fsfs
-SVNGROUP?= svn
-SVNUSER?= svn
+USERS= svn
+GROUPS= svn
GNU_CONFIGURE_MANPREFIX=${PREFIX}/share
CONFIGURE_ARGS+= --without-swig-perl \
@@ -45,57 +43,19 @@ CONFIGURE_ARGS+= --without-swig-perl \
--without-kwallet \
--with-apxs=no
-.if ${PORT_OPTIONS:MSVNSERVE_WRAPPER}
-SUB_LIST+= SVNSERVE_BIN_EXT=".bin"
-PLIST_SUB+= NO_SVNSERVE_WRAPPER="@comment "
-SVNSERVE_EXT= .bin
-.else
-SUB_LIST+= SVNSERVE_BIN_EXT=""
-PLIST_SUB+= NO_SVNSERVE_WRAPPER=""
-SVNSERVE_EXT=
-.endif
-
TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR}
TEST_TARGET= check
-.if make(repository)
-WITH_REPOSITORY_CREATION= yes
-.endif
-
-.if defined(WITH_REPOSITORY_CREATION)
-MKREPOS_TARGET= _mkrepos
-.endif
-
-BINS_TO_STRIP= svn svnadmin svnbench svndumpfilter svnfsfs svnlook svnmucc \
- svnrdump svnserve${SVNSERVE_EXT} svnsync svnversion
-
-TOOLS_TO_STRIP= fsfs-access-map svn-mergeinfo-normalizer \
- svn-populate-node-origins-index svnauthz \
- svnauthz-validate svnconflict svndiff svndiff3 \
- svndiff4 svnmover svnraisetreeconflict x509-parser
-
-pre-everything::
- @${ECHO_MSG} ""
-.if defined(WITH_REPOSITORY_CREATION)
- @${ECHO_MSG} "I will create (or use, if it exists) '${SVNUSER}' user and '${SVNGROUP}' group."
- @${ECHO_MSG} "Make sure that all committers are its members."
- @${ECHO_MSG} ""
- @${ECHO_MSG} "Repository will be created at '${SVNREPOS}' with user '${SVNUSER}' and group '${SVNGROUP}'."
- @${ECHO_MSG} "Type of repository will be '${SVNFSTYPE}'."
- @${ECHO_MSG} "You could change these settings by defining SVNREPOS, SVNGROUP and SVNFSTYPE."
+.if ${PORT_OPTIONS:MSVNSERVE_WRAPPER}
+BINS_TO_STRIP= svn svnadmin svnauthz svnauthz-validate svnbench svndumpfilter \
+ svnfsfs svnlook svnmucc svnrdump svnserve.bin svnsync svnversion
.else
- @${ECHO_MSG} "You can have the repository created for you by defining"
- @${ECHO_MSG} "WITH_REPOSITORY_CREATION."
- @${ECHO_MSG} ""
- @${ECHO_MSG} "Make sure that:"
- @${ECHO_MSG} "* all your svn users are members of a common group"
- @${ECHO_MSG} "* this group is the group id of the db/ and locks/"
- @${ECHO_MSG} " subdirectories of your repository"
- @${ECHO_MSG} "* the above subdirectories are writable by this group"
+BINS_TO_STRIP= svn svnadmin svnauthz svnauthz-validate svnbench svndumpfilter \
+ svnfsfs svnlook svnmucc svnrdump svnserve svnsync svnversion
.endif
- @${ECHO_MSG} ""
- @${ECHO_MSG} "Many useful scripts will be installed into ${DATADIR}"
+TOOLS_TO_STRIP= svn-mergeinfo-normalizer svn-populate-node-origins-index \
+ svnconflict svndiff svndiff3 svndiff4 svnraisetreeconflict
post-patch-SVNSERVE_WRAPPER-on:
# the real svnserve binary installs as svnserve.bin so bin/svnserve can be
@@ -110,22 +70,20 @@ post-configure:
# --with-gnome-keyring (SVN_HAVE_LIBSECRET), not the legacy
# --with-old-gnome-keyring (SVN_HAVE_GNOME_KEYRING)
${REINPLACE_CMD} -E 's%.*#undef SVN_HAVE_LIBSECRET.*%#define SVN_HAVE_LIBSECRET 1%' ${WRKSRC}/subversion/svn_private_config.h
-# ugly hack: save tools directory so we don't have to cleanup before installing
- ${CP} -R ${WRKSRC}/tools ${WRKSRC}/tools.examples
- ${CHMOD} -R a-st,o+rX ${WRKSRC}/tools.examples
post-build-TOOLS-on:
${MAKE} -C ${WRKSRC} tools ${MAKE_ARGS}
-post-install: ${MKREPOS_TARGET}
+post-install:
for F in ${BINS_TO_STRIP} ; do \
${STRIP_CMD} "${STAGEDIR}${PREFIX}/bin/$${F}" ; \
done
${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/*.so
- @${MKDIR} ${STAGEDIR}${DATADIR}
- (cd ${WRKSRC}/tools.examples && ${TAR} --exclude '*.in' -cf - * | ${TAR} -C ${STAGEDIR}${DATADIR} -xof - )
@${MKDIR} ${STAGEDIR}${DOCSDIR}
${INSTALL_DATA} ${PORTDOCS:S|^|${WRKSRC}/|} ${STAGEDIR}${DOCSDIR}
+ @${MKDIR} ${STAGEDIR}${DATADIR}/xslt
+ ${INSTALL_DATA} ${WRKSRC}/tools/xslt/svnindex.css ${WRKSRC}/tools/xslt/svnindex.xsl \
+ ${STAGEDIR}${DATADIR}/xslt
@${MKDIR} ${STAGEDIR}${PREFIX}/share/bash-completion/completions
${INSTALL_DATA} ${WRKSRC}/tools/client-side/bash_completion \
${STAGEDIR}${PREFIX}/share/bash-completion/completions/svn
@@ -137,7 +95,7 @@ post-install: ${MKREPOS_TARGET}
.endfor
post-install-SVNSERVE_WRAPPER-on:
- ${INSTALL_SCRIPT} ${FILESDIR}/svnserve.wrapper ${STAGEDIR}${PREFIX}/bin/svnserve.sample
+ ${INSTALL_SCRIPT} ${FILESDIR}/svnserve.wrapper ${STAGEDIR}${PREFIX}/bin/svnserve
post-install-TOOLS-on:
${MAKE} -C ${WRKSRC} install-tools ${MAKE_ARGS}
@@ -145,55 +103,25 @@ post-install-TOOLS-on:
${STRIP_CMD} "${STAGEDIR}${PREFIX}/bin/$${F}" ; \
done
-# ===============================================================================
-repository: _mkrepos
-
-_SVNGRPFILES= db locks locks/db.lock locks/db-logs.lock
-SVNGRPFILES= ${_SVNGRPFILES:S,^,${SVNREPOS}/,}
-
-_mkrepos: .USE
-.if !exists(${SVNREPOS})
-.if ${PORT_OPTIONS:MSVNSERVE_WRAPPER}
- @if /usr/sbin/pw groupshow "${SVNGROUP}" >/dev/null 2>&1; then \
- ${ECHO_MSG} "You already have a group \"${SVNGROUP}\", so I will use it."; \
- else \
- if /usr/sbin/pw groupadd ${SVNGROUP} -h -; \
- then \
- ${ECHO_MSG} "Added group \"${SVNGROUP}\"."; \
- else \
- ${ECHO_MSG} "Adding group \"${SVNGROUP}\" failed..."; \
- ${ECHO_MSG} "Please create it, and try again."; \
- ${FALSE}; \
- fi; \
- fi
- @if /usr/sbin/pw usershow "${SVNUSER}" >/dev/null 2>&1; then \
- ${ECHO_MSG} "You already have a user \"${SVNUSER}\", so I will use it."; \
- else \
- if /usr/sbin/pw useradd ${SVNUSER} -h -; \
- then \
- ${ECHO_MSG} "Added user \"${SVNUSER}\"."; \
- else \
- ${ECHO_MSG} "Adding user \"${SVNUSER}\" failed..."; \
- ${ECHO_MSG} "Please create it, and try again."; \
- ${FALSE}; \
- fi; \
- fi
-.endif
- @${MKDIR} ${SVNREPOS}
- ${PREFIX}/bin/svnadmin create --fs-type ${SVNFSTYPE} ${SVNREPOS}
-.if ${PORT_OPTIONS:MSVNSERVE_WRAPPER}
- ${CHOWN} ${SVNUSER}:${SVNGROUP} ${SVNGRPFILES}
- ${CHMOD} g+w ${SVNGRPFILES}
- for i in ${SVNREPOS}/db/* ; do \
- i=$${i##*/}; \
- case $$i in \
- DB_CONFIG|fs-type|uuid) ;; \
- *) ${CHOWN} -R ${SVNUSER}:${SVNGROUP} ${SVNREPOS}/db/$$i; \
- ${CHMOD} -R g+w ${SVNREPOS}/db/$$i; \
- ;; \
- esac; \
- done
-.endif
-.endif
+HOOKS_EXAMPLES= commit-access-control.cfg.example mailer/mailer.conf.example \
+ svnperms.conf.example validate-files.conf.example
+
+HOOKS_SCRIPTS= commit-access-control.pl commit-email.rb control-chars.py \
+ log-police.py mailer/mailer.py \
+ persist-ephemeral-txnprops.py \
+ reject-detected-sha1-collisions.sh \
+ reject-known-sha1-collisions.sh svn2feed.py svnperms.py \
+ validate-extensions.py validate-files.py verify-po.py
+
+post-install-HOOKS-on:
+ @${MKDIR} ${STAGEDIR}${DATADIR}/hook-scripts
+.for F in ${HOOKS_EXAMPLES}
+ ${INSTALL_DATA} ${WRKSRC}/tools/hook-scripts/${F} \
+ ${STAGEDIR}${DATADIR}/hook-scripts/${F:T}
+.endfor
+.for F in ${HOOKS_SCRIPTS}
+ ${INSTALL_SCRIPT} ${WRKSRC}/tools/hook-scripts/${F} \
+ ${STAGEDIR}${DATADIR}/hook-scripts/${F:T}
+.endfor
.include <bsd.port.post.mk>
diff --git a/devel/subversion/Makefile.common b/devel/subversion/Makefile.common
index 11693270f4ef..e643cfb171cd 100644
--- a/devel/subversion/Makefile.common
+++ b/devel/subversion/Makefile.common
@@ -1,15 +1,11 @@
PORTNAME?= subversion
-PORTVERSION= 1.14.5
+DISTVERSION= 1.15.0
PORTREVISION?= 0
CATEGORIES+= devel
MASTER_SITES= APACHE/subversion
GNU_CONFIGURE= yes
USES+= cpe libtool pathfix pkgconfig python:patch,test shebangfix tar:bzip2
-SHEBANG_FILES= tools/server-side/svnpubsub/rc.d/svnpubsub.solaris \
- tools/server-side/svnpubsub/rc.d/svnwcsub.solaris
-
-EXTRACT_AFTER_ARGS= --exclude ${DISTNAME}/tools/bdb
LICENSE= APACHE20
@@ -28,6 +24,12 @@ CONFIGURE_ARGS+= --with-expat=${LOCALBASE}/include:${LOCALBASE}/lib:expat \
--without-berkeley-db --disable-bdb6 \
--without-apr_memcache
+EXTRACT_AFTER_ARGS= --exclude ${DISTNAME}/tools/bdb \
+ --exclude ${DISTNAME}/tools/buildbot \
+ --exclude ${DISTNAME}/tools/dist \
+ --exclude ${DISTNAME}/tools/po \
+ --exclude ${DISTNAME}/tools/examples
+
# ===============================================================
OPTIONS_SUB= yes
@@ -64,17 +66,11 @@ OPTIONS_FILE_SET?=""
.include <bsd.port.pre.mk>
post-patch:
- ${REINPLACE_CMD} "s#/etc/subversion#${ETCDIR}#g" ${WRKSRC}/subversion/libsvn_subr/config_file.c
- ${REINPLACE_CMD} "s#/etc/subversion#${ETCDIR}#g" ${WRKSRC}/subversion/libsvn_subr/config_impl.h
+ ${REINPLACE_CMD} "s#/etc/subversion#${LOCALBASE}/etc/subversion#g" ${WRKSRC}/subversion/libsvn_subr/config_file.c
+ ${REINPLACE_CMD} "s#/etc/subversion#${LOCALBASE}/etc/subversion#g" ${WRKSRC}/subversion/libsvn_subr/config_impl.h
${REINPLACE_CMD} "s#^swig_pydir =.*#swig_pydir = ${PYTHON_SITELIBDIR}/libsvn#" ${WRKSRC}/Makefile.in
${REINPLACE_CMD} "s#^swig_pydir_extra =.*#swig_pydir_extra = ${PYTHON_SITELIBDIR}/svn#" ${WRKSRC}/Makefile.in
${REINPLACE_CMD} "s#^toolsdir =.*#toolsdir = @bindir@#" ${WRKSRC}/Makefile.in
-# shebangfix
- ${FIND} ${WRKSRC}/tools/ -type f -exec ${GREP} -l -e '#!/bin/b' -e '#!/bin/env' \
- -e '#!/usr/bin/p' {} + | ${XARGS} ${REINPLACE_CMD} -e \
- '1s|#\!/bin/b|#\!/usr/local/bin/b|' \
- -e '1s|#\!/bin/env|#\!/usr/bin/env|' \
- -e '1s|#\!/usr/bin/p|#\!/usr/local/bin/p|'
# remove all .bak files to clean the stage
@${FIND} ${WRKSRC} -name '*.bak' -delete
# regenerate build-outputs.mk from build.conf instead of carrying a frozen,
diff --git a/devel/subversion/distinfo b/devel/subversion/distinfo
index 982a4668e658..4ce4dd38002e 100644
--- a/devel/subversion/distinfo
+++ b/devel/subversion/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1734780873
-SHA256 (subversion-1.14.5.tar.bz2) = e78a29e7766b8b7b354497d08f71a55641abc53675ce1875584781aae35644a1
-SIZE (subversion-1.14.5.tar.bz2) = 8675355
+TIMESTAMP = 1793177671
+SHA256 (subversion-1.15.0.tar.bz2) = dfb7b1e5270c7def971ccbd5938b0c03b1b5bd60b6674a2d8a74a9560839fb8c
+SIZE (subversion-1.15.0.tar.bz2) = 8611559
diff --git a/devel/subversion/files/extra-patch-check-swig-py314 b/devel/subversion/files/extra-patch-check-swig-py314
deleted file mode 100644
index 5156311eb6d4..000000000000
--- a/devel/subversion/files/extra-patch-check-swig-py314
+++ /dev/null
@@ -1,231 +0,0 @@
-This patch was extracted by the command
-svn diff -c r1929147 --patch-compatible \
- https://svn.apache.org/repos/asf/subversion/branches/1.14.x | tail -n +17
-And it can be applied only for Subversion < 1.15.0
-Index: subversion/bindings/swig/python/tests/mergeinfo.py
-===================================================================
---- subversion/bindings/swig/python/tests/mergeinfo.py (revision 1929146)
-+++ subversion/bindings/swig/python/tests/mergeinfo.py (revision 1929147)
-@@ -18,7 +18,7 @@
- # under the License.
- #
- #
--import unittest, os, sys, gc
-+import unittest, os, sys, weakref, gc
- from svn import core, repos, fs
- import utils
-
-@@ -125,6 +125,9 @@
- }
- self.compare_mergeinfo_catalogs(mergeinfo, expected_mergeinfo)
-
-+ @unittest.skipIf(utils.HAS_DEFERRED_REFCOUNT,
-+ "Reference counting tests skipped because of deferred "
-+ "reference counting")
- def test_mergeinfo_leakage__incorrect_range_t_refcounts(self):
- """Ensure that the ref counts on svn_merge_range_t objects returned by
- svn_mergeinfo_parse() are correct."""
-@@ -138,7 +141,8 @@
- # ....and now 3 (incref during iteration of each range object)
-
- refcount = sys.getrefcount(r)
-- # ....and finally, 4 (getrefcount() also increfs)
-+ # ....and finally, 4 (getrefcount() also increfs, unless deferred
-+ # reference counting)
- expected = 4
-
- # Note: if path and index are not '/trunk' and 0 respectively, then
-@@ -150,8 +154,49 @@
- "cause: incorrect Py_INCREF/Py_DECREF usage in libsvn_swig_py/"
- "swigutil_py.c." % (expected, refcount, path, i)))
-
-+ def test_mergeinfo_leakage__incorrect_range_t_weakrefs(self):
-+ """Ensure that the ref counts on svn_merge_range_t objects returned by
-+ svn_mergeinfo_parse() are correct."""
-+ # When reference counting is working properly, each svn_merge_range_t in
-+ # the returned mergeinfo will have a ref count of 1...
-+ mergeinfo = core.svn_mergeinfo_parse(self.TEXT_MERGEINFO1)
-+ merge_range_refdict = weakref.WeakValueDictionary()
-+ merge_range_indexes = []
-+ n_merge_range = 0
-+ for (path, rangelist) in core._as_list(mergeinfo.items()):
-+ # ....and now 2 (incref during iteration of rangelist)
-+
-+ for (i, r) in enumerate(rangelist):
-+ # ....and now 3 (incref during iteration of each range object)
-+
-+ idx = (path, i)
-+ merge_range_refdict[idx] = r
-+ merge_range_indexes.append(idx)
-+ n_merge_range += 1
-+
-+ # Note: if path and index are not '/trunk' and 0 respectively, then
-+ # only some of the range objects are leaking, which is, as far as
-+ # leaks go, even more impressive.
-+
-+ del rangelist, r
-+ gc.collect()
-+ # Now (strong) reference count of all svn_merge_range_t should be 1
-+ # again and those objects should not be removed yet.
-+ for idx in merge_range_indexes:
-+ self.assertIn(idx, merge_range_refdict, (
-+ "Refarence count error on svn_merge_info_t object for "
-+ "(path: %s, index: %d). It should still exists because "
-+ "mergeinfo holds its reference, but after GC, it already "
-+ "removed." % idx))
- del mergeinfo
- gc.collect()
-+ if merge_range_refdict:
-+ # certainly memory leak, but we want to listing up leaked objects
-+ # before raise an assertion error.
-+ self.assertFalse(merge_range_refdict,
-+ "Memory leak! All svn_merge_range_t object holded "
-+ "by mergeinfo object should be removed, but at least "
-+ "one object still alive.")
-
- def test_mergeinfo_leakage__lingering_range_t_objects_after_del(self):
- """Ensure that there are no svn_merge_range_t objects being tracked by
-@@ -162,6 +207,9 @@
- objects will be garbage collected and thus, not appear in the list of
- objects returned by gc.get_objects()."""
- mergeinfo = core.svn_mergeinfo_parse(self.TEXT_MERGEINFO1)
-+ lingering = get_svn_merge_range_t_objects()
-+ self.assertNotEqual(lingering, list())
-+ del lingering
- del mergeinfo
- gc.collect()
- lingering = get_svn_merge_range_t_objects()
-Index: subversion/bindings/swig/python/tests/repository.py
-===================================================================
---- subversion/bindings/swig/python/tests/repository.py (revision 1929146)
-+++ subversion/bindings/swig/python/tests/repository.py (revision 1929147)
-@@ -87,15 +87,32 @@
-
- class BatonCollector(repos.ChangeCollector):
- """A ChangeCollector with collecting batons, too"""
-+
- def __init__(self, fs_ptr, root, pool=None, notify_cb=None):
-+
-+ def get_expected_baton_refcount():
-+ """determine expected refcount of batons within a batoun_tuple,
-+ by using dumy object"""
-+ self.open_root(-1, None)
-+ for baton_tuple in self.batons:
-+ rc = sys.getrefcount(baton_tuple[2])
-+ break
-+ return rc
-+
- repos.ChangeCollector.__init__(self, fs_ptr, root, pool, notify_cb)
-- self.batons = []
- self.close_called = False
- self.abort_called = False
-+ # temporary values for get_expected_baton_refcount
-+ self.batons = []
-+ self.expected_baton_refcount = 0
-+ # determin expected_baton_refcount
-+ self.expected_baton_refcount = get_expected_baton_refcount()
-+ # re-initialize the values after calling get_expected_baton_refcount()
-+ self.batons = []
-
- def open_root(self, base_revision, dir_pool=None):
- bt = repos.ChangeCollector.open_root(self, base_revision, dir_pool)
-- self.batons.append((b'dir baton', b'', bt, sys.getrefcount(bt)))
-+ self.batons.append((b'dir baton', b'', bt, self.expected_baton_refcount))
- return bt
-
- def add_directory(self, path, parent_baton,
-@@ -104,7 +121,7 @@
- copyfrom_path,
- copyfrom_revision,
- dir_pool)
-- self.batons.append((b'dir baton', path, bt, sys.getrefcount(bt)))
-+ self.batons.append((b'dir baton', path, bt, self.expected_baton_refcount))
- return bt
-
- def open_directory(self, path, parent_baton, base_revision,
-@@ -111,7 +128,7 @@
- dir_pool=None):
- bt = repos.ChangeCollector.open_directory(self, path, parent_baton,
- base_revision, dir_pool)
-- self.batons.append((b'dir baton', path, bt, sys.getrefcount(bt)))
-+ self.batons.append((b'dir baton', path, bt, self.expected_baton_refcount))
- return bt
-
- def add_file(self, path, parent_baton,
-@@ -119,13 +136,13 @@
- bt = repos.ChangeCollector.add_file(self, path, parent_baton,
- copyfrom_path, copyfrom_revision,
- file_pool)
-- self.batons.append((b'file baton', path, bt, sys.getrefcount(bt)))
-+ self.batons.append((b'file baton', path, bt, self.expected_baton_refcount))
- return bt
-
- def open_file(self, path, parent_baton, base_revision, file_pool=None):
- bt = repos.ChangeCollector.open_file(self, path, parent_baton,
- base_revision, file_pool)
-- self.batons.append((b'file baton', path, bt, sys.getrefcount(bt)))
-+ self.batons.append((b'file baton', path, bt, self.expected_baton_refcount))
- return bt
-
- def close_edit(self, pool=None):
-@@ -429,18 +446,22 @@
- root = fs.revision_root(self.fs, self.rev)
- editor = BatonCollector(self.fs, root)
- e_ptr, e_baton = delta.make_editor(editor)
-+ refcount_at_first = sys.getrefcount(e_ptr)
- repos.replay(root, e_ptr, e_baton)
-- for baton in editor.batons:
-- self.assertEqual(sys.getrefcount(baton[2]), 2,
-+ for baton_tuple in editor.batons:
-+ # baton_tuple: 4-tuple(baton_type: bytes, node: bytes, bt: baton,
-+ # expected_refcount_of_bt: int)
-+ self.assertEqual(sys.getrefcount(baton_tuple[2]), baton_tuple[3],
- "leak on baton %s after replay without errors"
-- % repr(baton))
-+ % repr(baton_tuple))
- del e_baton
-- self.assertEqual(sys.getrefcount(e_ptr), 2,
-+ self.assertEqual(sys.getrefcount(e_ptr), refcount_at_first,
- "leak on editor baton after replay without errors")
-
- editor = BatonCollectorErrorOnClose(self.fs, root,
- error_path=b'branches/v1x')
- e_ptr, e_baton = delta.make_editor(editor)
-+ refcount_at_first = sys.getrefcount(e_ptr)
- self.assertRaises(SubversionException, repos.replay, root, e_ptr, e_baton)
- batons = editor.batons
- # As svn_repos_replay calls neither close_edit callback nor abort_edit
-@@ -447,11 +468,11 @@
- # if an error has occured during processing, references of Python objects
- # in decendant batons may live until e_baton is deleted.
- del e_baton
-- for baton in batons:
-- self.assertEqual(sys.getrefcount(baton[2]), 2,
-+ for baton_tuple in batons:
-+ self.assertEqual(sys.getrefcount(baton_tuple[2]), baton_tuple[3],
- "leak on baton %s after replay with an error"
-- % repr(baton))
-- self.assertEqual(sys.getrefcount(e_ptr), 2,
-+ % repr(baton_tuple))
-+ self.assertEqual(sys.getrefcount(e_ptr), refcount_at_first,
- "leak on editor baton after replay with an error")
-
- def test_delta_editor_apply_textdelta_handler_refcount(self):
-Index: subversion/bindings/swig/python/tests/utils.py
-===================================================================
---- subversion/bindings/swig/python/tests/utils.py (revision 1929146)
-+++ subversion/bindings/swig/python/tests/utils.py (revision 1929147)
-@@ -95,3 +95,13 @@
-
- def is_defaultencoding_utf8():
- return codecs_eq(sys.getdefaultencoding(), 'utf-8')
-+
-+def get_holded_refcount_by_getrefcount():
-+ "get refcount holded by sys.getrefcount() if its arg is a local variable"
-+ a = []
-+ rv = sys.getrefcount(a) - 1
-+ return rv
-+
-+HAS_DEFERRED_REFCOUNT = not get_holded_refcount_by_getrefcount()
-+
-+del get_holded_refcount_by_getrefcount
diff --git a/devel/subversion/files/patch-Makefile.in b/devel/subversion/files/patch-Makefile.in
new file mode 100644
index 000000000000..d74cee31b30f
--- /dev/null
+++ b/devel/subversion/files/patch-Makefile.in
@@ -0,0 +1,13 @@
+--- Makefile.in.orig
++++ Makefile.in
+@@ -1043,8 +1043,8 @@
+ fi; \
+ printf '\043\041/bin/sh\n%s\n' \
+ 'exec $(bindir)/svnfsfs stats $${2:+"-M"} $${2:+"$$2"} "$$1"' \
+- > $(DESTDIR)$(toolsdir)/fsfs-stats$(EXEEXT) && \
+- chmod +x $(DESTDIR)$(toolsdir)/fsfs-stats$(EXEEXT)
++ > $(DESTDIR)$(toolsdir)/svnfsfs-stats$(EXEEXT) && \
++ chmod +x $(DESTDIR)$(toolsdir)/svnfsfs-stats$(EXEEXT)
+ # \043\041 is a "#!". It's written this way because gmake and bmake disagree on
+ # how to include a literal '#' in a command, and because '!' is special to some
+ # shells.
diff --git a/devel/subversion/files/patch-build.conf b/devel/subversion/files/patch-build.conf
index 3de155ca4634..ac8aeb122436 100644
--- a/devel/subversion/files/patch-build.conf
+++ b/devel/subversion/files/patch-build.conf
@@ -1,6 +1,6 @@
---- build.conf.orig 2020-04-08 04:00:55 UTC
+--- build.conf.orig
+++ build.conf
-@@ -434,7 +434,7 @@ type = apache-mod
+@@ -458,7 +458,7 @@
path = tools/server-side/mod_dontdothat
nonlibs = mod_dav_svn apr aprutil
libs = libsvn_subr libhttpd
@@ -9,3 +9,50 @@
# The Subversion FSFS repository manipulation tool
[svnfsfs]
+@@ -1663,13 +1663,6 @@
+ # ----------------------------------------------------------------------------
+ # Contrib and tools
+
+-[fsfs-access-map]
+-type = exe
+-path = tools/dev
+-sources = fsfs-access-map.c
+-install = tools
+-libs = libsvn_subr apr
+-
+ [diff]
+ type = exe
+ path = tools/diff
+@@ -1704,7 +1697,7 @@
+ type = exe
+ path = tools/server-side
+ sources = svnauthz.c
+-install = tools
++install = bin
+ libs = libsvn_repos libsvn_fs libsvn_subr apr
+
+ # svnauthz-validate is the compat mode of the new svnauthz tool. It is
+@@ -1717,7 +1710,7 @@
+ type = exe
+ path = tools/server-side
+ sources = svnauthz.c
+-install = tools
++install = bin
+ libs = libsvn_repos libsvn_fs libsvn_subr apr
+
+ [svn-populate-node-origins-index]
+@@ -1742,14 +1735,6 @@
+ libs = libsvn_client libsvn_wc libsvn_ra libsvn_delta libsvn_diff libsvn_subr
+ apriconv apr
+
+-[x509-parser]
+-description = Tool to verify x509 certificates
+-type = exe
+-path = tools/dev
+-sources = x509-parser.c
+-install = tools
+-libs = libsvn_subr apr
+-
+ [svnconflict]
+ type = exe
+ path = tools/client-side/svnconflict
diff --git a/devel/subversion/files/patch-configure b/devel/subversion/files/patch-configure
index 7e2bf9f5d8e8..fdc29b68240a 100644
--- a/devel/subversion/files/patch-configure
+++ b/devel/subversion/files/patch-configure
@@ -1,6 +1,6 @@
--- configure.orig
+++ configure
-@@ -25719,7 +25719,7 @@
+@@ -26871,7 +26871,7 @@
$as_echo_n "checking for additional flags to link C++ libraries... " >&6; }
if test "x$ac_compiler_gnu" = "xyes"; then
case "$host" in
diff --git a/devel/subversion/files/svnserve.in b/devel/subversion/files/svnserve.in
index 29b1df8c838c..162c6f4ae97e 100644
--- a/devel/subversion/files/svnserve.in
+++ b/devel/subversion/files/svnserve.in
@@ -1,40 +1,33 @@
#!/bin/sh
#
# svnserve.sh for rc.d usage (c) 2005 Thomas E. Spanjaard.
-# $Id$
# PROVIDE: svnserve
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: shutdown
#
-# Add the following line to /etc/rc.conf to enable SVNServe:
+# Add the following line to /etc/rc.conf to enable svnserve:
#
# svnserve_enable="YES"
# # optional
# svnserve_flags="-d --listen-port=3690 --listen-host 0.0.0.0"
-# svnserve_data="/usr/local/repositories"
+# svnserve_data="/var/db/svn"
# svnserve_user="svn"
# svnserve_group="svn"
-#
-# Note:
-# svnserve bind per default at the ipv6 address!
-# If you want svnserve binding at ipv4 address, you have
-# to use option 'svnserve_flags' with --listen-host parameter
. /etc/rc.subr
-# Set some defaults
-svnserve_enable=${svnserve_enable:-"NO"}
-svnserve_flags=${svnserve_flags:-"-d --listen-port=3690 --listen-host 0.0.0.0"}
-svnserve_data=${svnserve_data:-"/home/svn/repos"}
-svnserve_user=${svnserve_user:-"svn"}
-svnserve_group=${svnserve_group:-"svn"}
+: ${svnserve_enable:="NO"}
+: ${svnserve_flags:="-d --listen-port=3690 --listen-host 0.0.0.0"}
+: ${svnserve_data:="/var/db/svn"}
+: ${svnserve_user:="svn"}
+: ${svnserve_group:="svn"}
name=svnserve
rcvar=svnserve_enable
load_rc_config $name
-command=%%PREFIX%%/bin/svnserve%%SVNSERVE_BIN_EXT%%
+command=%%PREFIX%%/bin/svnserve
command_args="-r ${svnserve_data}"
run_rc_command "$1"
diff --git a/devel/subversion/pkg-plist b/devel/subversion/pkg-plist
index fe3d4a3cc372..ec38618c8550 100644
--- a/devel/subversion/pkg-plist
+++ b/devel/subversion/pkg-plist
@@ -1,29 +1,25 @@
-%%TOOLS%%bin/fsfs-access-map
-%%TOOLS%%bin/fsfs-stats
bin/svn
%%TOOLS%%bin/svn-mergeinfo-normalizer
%%TOOLS%%bin/svn-populate-node-origins-index
bin/svnadmin
-%%TOOLS%%bin/svnauthz
-%%TOOLS%%bin/svnauthz-validate
-%%TOOLS%%bin/svnbench
+bin/svnauthz
+bin/svnauthz-validate
+bin/svnbench
%%TOOLS%%bin/svnconflict
%%TOOLS%%bin/svndiff
%%TOOLS%%bin/svndiff3
%%TOOLS%%bin/svndiff4
bin/svndumpfilter
bin/svnfsfs
+%%TOOLS%%bin/svnfsfs-stats
bin/svnlook
-%%TOOLS%%bin/svnmover
bin/svnmucc
%%TOOLS%%bin/svnraisetreeconflict
bin/svnrdump
-%%NO_SVNSERVE_WRAPPER%%bin/svnserve
+bin/svnserve
%%SVNSERVE_WRAPPER%%bin/svnserve.bin
-%%SVNSERVE_WRAPPER%%@sample bin/svnserve.sample
bin/svnsync
bin/svnversion
-%%TOOLS%%bin/x509-parser
include/subversion-1/mod_authz_svn.h
include/subversion-1/mod_dav_svn.h
include/subversion-1/svn-revision.txt
@@ -169,299 +165,22 @@ share/man/man1/svnsync.1.gz
share/man/man1/svnversion.1.gz
share/man/man5/svnserve.conf.5.gz
share/man/man8/svnserve.8.gz
-%%DATADIR%%/backup/hot-backup.py
-%%DATADIR%%/buildbot/master/README
-%%DATADIR%%/buildbot/slaves/README
-%%DATADIR%%/buildbot/slaves/bb-openbsd/svnbuild.sh
-%%DATADIR%%/buildbot/slaves/bb-openbsd/svncheck-bindings.sh
-%%DATADIR%%/buildbot/slaves/bb-openbsd/svncheck.sh
-%%DATADIR%%/buildbot/slaves/bb-openbsd/svnclean.sh
-%%DATADIR%%/buildbot/slaves/i686-debian-sarge1/mount-ramdrive.c
-%%DATADIR%%/buildbot/slaves/i686-debian-sarge1/svnbuild.sh
-%%DATADIR%%/buildbot/slaves/i686-debian-sarge1/svncheck.sh
-%%DATADIR%%/buildbot/slaves/i686-debian-sarge1/svnclean.sh
-%%DATADIR%%/buildbot/slaves/i686-debian-sarge1/svnlog.sh
-%%DATADIR%%/buildbot/slaves/i686-debian-sarge1/unmount-ramdrive.c
-%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/mount-tmpfs.c
-%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/rebuild-svn-bits.sh
-%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/serf.patch
-%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/svnbuild.sh
-%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/svncheck.sh
-%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/svncleanup.sh
-%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/svnenv.sh
-%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/twisted.patch
-%%DATADIR%%/buildbot/slaves/svn-x64-centos/list-svn-deps.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-centos/svnbuild.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-centos/svncheck-bindings.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-centos/svncheck.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-centos/svnclean.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-centos/svnlog.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-macosx/mkramdisk.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-macosx/rmramdisk.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-macosx/setenv.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-macosx/svnbuild-bindings.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-macosx/svnbuild.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-macosx/svncheck-bindings.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-macosx/svncheck.sh
-%%DATADIR%%/buildbot/slaves/svn-x64-macosx/svnclean.sh
-%%DATADIR%%/buildbot/slaves/svnbot-common/README
-%%DATADIR%%/buildbot/slaves/ubuntu-x64/svnbuild.sh
-%%DATADIR%%/buildbot/slaves/ubuntu-x64/svncheck-bindings.sh
*** 301 LINES SKIPPED ***