feat(dev-vcs/subversion) remove packages as portage-stable has newer versions

This commit is contained in:
Greg Kroah-Hartman 2013-07-11 21:37:20 -07:00
parent 8a6295db5e
commit 7af9d70a2c
11 changed files with 0 additions and 1800 deletions

View File

@ -1 +0,0 @@
DIST subversion-1.6.9.tar.bz2 5478554 SHA256 05526f92fcb612bdc3bab0d5e218e25847bf10846e047ce244e33859b205111c SHA512 006e773205a9c2051ab7247cd648c4805748433e37c7bce82b9d3a566f384b2ee8537dd091eda398c4764af255cee4fc1ae89d2a0393e8b0e6ab66464ad7e537 WHIRLPOOL c94976df53578410e07bfc79e1d1a0315732dd8b9c4704f173d07fc26b473df4c4ab39a0450eaf0828b7dc0ca5a1b4934fdeb4b779d0e4c8504648ab3cdc31fc

View File

@ -1,13 +0,0 @@
;;; subversion site-lisp configuration
(add-to-list 'load-path "@SITELISP@")
(and (< emacs-major-version 22)
(add-to-list 'load-path "@SITELISP@/compat"))
(add-to-list 'vc-handled-backends 'SVN)
(defalias 'svn-examine 'svn-status)
(autoload 'svn-status "dsvn" "Run `svn status'." t)
(autoload 'svn-update "dsvn" "Run `svn update'." t)
(autoload 'svn-status "psvn"
"Examine the status of Subversion working copy in directory DIR." t)

View File

@ -1,56 +0,0 @@
--- Makefile.in
+++ Makefile.in
@@ -47,6 +47,7 @@
SVN_SASL_LIBS = @SVN_SASL_LIBS@
SVN_SERF_LIBS = @SVN_SERF_LIBS@
SVN_SQLITE_LIBS = @SVN_SQLITE_LIBS@
+SVN_XML_LIBS = -lexpat
SVN_ZLIB_LIBS = @SVN_ZLIB_LIBS@
LIBS = @LIBS@
--- build/ac-macros/aprutil.m4
+++ build/ac-macros/aprutil.m4
@@ -77,16 +77,14 @@
AC_MSG_ERROR([apu-config --prefix failed])
fi
- dnl When APR stores the dependent libs in the .la file, we don't need
- dnl --libs.
- SVN_APRUTIL_LIBS="`$apu_config --link-libtool --libs`"
+ SVN_APRUTIL_LIBS="`$apu_config --link-libtool`"
if test $? -ne 0; then
- AC_MSG_ERROR([apu-config --link-libtool --libs failed])
+ AC_MSG_ERROR([apu-config --link-libtool failed])
fi
- SVN_APRUTIL_EXPORT_LIBS="`$apu_config --link-ld --libs`"
+ SVN_APRUTIL_EXPORT_LIBS="`$apu_config --link-ld`"
if test $? -ne 0; then
- AC_MSG_ERROR([apu-config --link-ld --libs failed])
+ AC_MSG_ERROR([apu-config --link-ld failed])
fi
AC_SUBST(SVN_APRUTIL_INCLUDES)
--- build/ac-macros/apr.m4
+++ build/ac-macros/apr.m4
@@ -74,16 +74,14 @@
AC_MSG_ERROR([apr-config --prefix failed])
fi
- dnl When APR stores the dependent libs in the .la file, we don't need
- dnl --libs.
- SVN_APR_LIBS="`$apr_config --link-libtool --libs`"
+ SVN_APR_LIBS="`$apr_config --link-libtool`"
if test $? -ne 0; then
- AC_MSG_ERROR([apr-config --link-libtool --libs failed])
+ AC_MSG_ERROR([apr-config --link-libtool failed])
fi
- SVN_APR_EXPORT_LIBS="`$apr_config --link-ld --libs`"
+ SVN_APR_EXPORT_LIBS="`$apr_config --link-ld`"
if test $? -ne 0; then
- AC_MSG_ERROR([apr-config --link-ld --libs failed])
+ AC_MSG_ERROR([apr-config --link-ld failed])
fi
SVN_APR_SHLIB_PATH_VAR="`$apr_config --shlib-path-var`"

View File

@ -1,144 +0,0 @@
--- configure.ac
+++ configure.ac
@@ -198,6 +198,24 @@
AC_SUBST(LT_LDFLAGS)
+AC_ARG_ENABLE(local-library-preloading,
+ AS_HELP_STRING([--disable-local-library-preloading],
+ [Disable preloading of locally built libraries in locally built executables]),
+ [
+ if test "$enableval" != "no"; then
+ TRANSFORM_LIBTOOL_SCRIPTS="transform-libtool-scripts"
+ else
+ TRANSFORM_LIBTOOL_SCRIPTS=""
+ fi
+ ], [
+ if test "`uname`" != "Darwin"; then
+ TRANSFORM_LIBTOOL_SCRIPTS="transform-libtool-scripts"
+ else
+ TRANSFORM_LIBTOOL_SCRIPTS=""
+ fi
+])
+AC_SUBST(TRANSFORM_LIBTOOL_SCRIPTS)
+
dnl Check if -no-undefined is needed for the platform.
dnl It should always work but with libtool 1.4.3 on OS X it breaks the build.
dnl So we only turn it on for platforms where we know we really need it.
--- Makefile.in
+++ Makefile.in
@@ -309,7 +309,10 @@
@INCLUDE_OUTPUTS@
-local-all: @BUILD_RULES@
+local-all: @BUILD_RULES@ @TRANSFORM_LIBTOOL_SCRIPTS@
+
+transform-libtool-scripts: @BUILD_RULES@
+ @$(top_srcdir)/build/transform_libtool_scripts.sh
locale-gnu-pot:
cd $(abs_srcdir) && XGETTEXT="$(XGETTEXT)" MSGMERGE="$(MSGMERGE)" \
--- build/transform_libtool_scripts.sh
+++ build/transform_libtool_scripts.sh
@@ -0,0 +1,100 @@
+#!/bin/sh
+
+# Dependencies of libraries
+subr="subr"
+auth_gnome_keyring="auth_gnome_keyring $subr"
+auth_kwallet="auth_kwallet $subr"
+delta="delta $subr"
+diff="diff $subr"
+fs_util="fs_util $subr"
+fs_base="fs_base $delta $fs_util $subr"
+fs_fs="fs_fs $delta $fs_util $subr"
+fs="fs $fs_base $fs_fs $fs_util $subr"
+repos="repos $delta $fs $fs_util $subr"
+ra_local="ra_local $delta $fs $fs_util $repos $subr"
+ra_neon="ra_neon $delta $subr"
+ra_serf="ra_serf $delta $subr"
+ra_svn="ra_svn $delta $subr"
+ra="ra $delta $ra_local $ra_neon $ra_serf $ra_svn $subr"
+wc="wc $delta $diff $subr"
+client="client $delta $diff $ra $subr $wc"
+
+# Variable 'libraries' containing names of variables corresponding to libraries
+libraries="auth_gnome_keyring auth_kwallet client delta diff fs fs_base fs_fs fs_util ra ra_local ra_neon ra_serf ra_svn repos subr wc"
+
+for library in $libraries; do
+ # Delete duplicates in dependencies of libraries
+ library_dependencies="$(echo -n $(for x in $(eval echo "\$$library"); do echo $x; done | sort -u))"
+ eval "$library=\$library_dependencies"
+done
+
+# Dependencies of executables
+svn="$auth_gnome_keyring $auth_kwallet $client $delta $diff $ra $subr $wc"
+svnadmin="$delta $fs $repos $subr"
+svndumpfilter="$delta $fs $repos $subr"
+svnlook="$delta $diff $fs $repos $subr"
+svnserve="$delta $fs $ra_svn $repos $subr"
+svnsync="$auth_gnome_keyring $auth_kwallet $delta $ra $subr"
+svnversion="$subr $wc"
+entries_dump="$subr $wc"
+
+# Variable 'executables' containing names of variables corresponding to executables
+executables="svn svnadmin svndumpfilter svnlook svnserve svnsync svnversion entries_dump"
+
+for executable in $executables; do
+ # Set variables containing paths of executables
+ if [ "$executable" != entries_dump ]; then
+ eval "${executable}_path=subversion/$executable/$executable"
+ else
+ eval "${executable}_path=subversion/tests/cmdline/entries-dump"
+ fi
+ # Delete duplicates in dependencies of executables
+ executable_dependencies="$(echo -n $(for x in $(eval echo "\$$executable"); do echo $x; done | sort -u))"
+ eval "$executable=\$executable_dependencies"
+done
+
+test_paths="$(find subversion/tests -mindepth 2 -maxdepth 2 -name '*-test' ! -path '*/.libs/*' | sort)"
+for test in $test_paths; do
+ test_path="$test"
+ # Dependencies of tests are based on names of directories containing tests
+ test_library="$(echo $test | sed -e 's:^subversion/tests/libsvn_\([^/]*\)/.*:\1:')"
+ test_dependencies="$(eval echo "\$$test_library")"
+ # Set variables corresponding to tests and containing dependencies of tests
+ test="$(echo $test | sed -e 's:^subversion/tests/libsvn_[^/]*/\(.*\):\1:' -e 's/-/_/g')"
+ eval "$test=\$test_dependencies"
+ # Set variables containing paths of tests
+ eval "${test}_path=\$test_path"
+ # Set variable 'tests' containing names of variables corresponding to tests
+ tests="$tests $test"
+done
+
+# auth-test dynamically loads libsvn_auth_gnome_keyring and libsvn_auth_kwallet libraries
+auth_test="auth_gnome_keyring auth_kwallet $auth_test"
+
+# Usage: sed_append LINE_NUMBER TEXT FILE
+sed_append()
+{
+ sed -e "$1a\\
+$2" "$3" > "$3.new"
+ mv -f "$3.new" "$3"
+}
+
+current_directory="$(pwd)"
+for libtool_script in $executables $tests; do
+ eval "libtool_script_path=\$${libtool_script}_path"
+ if [ -f "$libtool_script_path" ]; then
+ if { grep LD_LIBRARY_PATH "$libtool_script_path" && ! grep LD_PRELOAD "$libtool_script_path"; } > /dev/null; then
+ echo "Transforming $libtool_script_path"
+ libtool_script_dependencies="$(eval echo "\$$libtool_script")"
+ for libtool_script_dependency in $libtool_script_dependencies; do
+ libtool_script_library="$current_directory/subversion/libsvn_$libtool_script_dependency/.libs/libsvn_$libtool_script_dependency-1.so"
+ [ -f "$libtool_script_library" ] && libtool_script_libraries="$libtool_script_libraries $libtool_script_library"
+ done
+ libtool_script_libraries="${libtool_script_libraries# *}"
+ # Append definitions of LD_PRELOAD to libtool scripts
+ sed_append 4 "LD_PRELOAD=\"$libtool_script_libraries\"" "$libtool_script_path"
+ sed_append 5 "export LD_PRELOAD" "$libtool_script_path"
+ chmod +x "$libtool_script_path"
+ fi
+ fi
+done

View File

@ -1,298 +0,0 @@
https://svn.collab.net/viewvc/svn?view=revision&revision=38004
https://svn.collab.net/viewvc/svn?view=revision&revision=38014
https://svn.collab.net/viewvc/svn?view=revision&revision=38028
https://svn.collab.net/viewvc/svn?view=revision&revision=38122
--- subversion/libsvn_auth_kwallet/kwallet.cpp
+++ subversion/libsvn_auth_kwallet/kwallet.cpp
@@ -22,6 +22,7 @@
/*** Includes. ***/
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
@@ -30,6 +31,9 @@
#include "svn_auth.h"
#include "svn_config.h"
#include "svn_error.h"
+#include "svn_io.h"
+#include "svn_pools.h"
+#include "svn_string.h"
#include "svn_version.h"
#include "private/svn_auth_private.h"
@@ -38,13 +42,20 @@
#include <dbus/dbus.h>
#include <QtCore/QCoreApplication>
+#include <QtCore/QList>
+#include <QtCore/QMap>
#include <QtCore/QString>
+#include <QtGui/QApplication>
+#include <QtGui/QX11Info>
#include <kaboutdata.h>
#include <kcmdlineargs.h>
#include <kcomponentdata.h>
#include <klocalizedstring.h>
#include <kwallet.h>
+#include <kwindowsystem.h>
+#include <netwm.h>
+#include <netwm_def.h>
/*-----------------------------------------------------------------------*/
@@ -52,6 +63,28 @@
/*-----------------------------------------------------------------------*/
+#define INITIALIZE_APPLICATION \
+ if (apr_hash_get(parameters, \
+ "svn:auth:qapplication-safe", \
+ APR_HASH_KEY_STRING)) \
+ { \
+ QApplication *app; \
+ if (! qApp) \
+ { \
+ int argc = 1; \
+ app = new QApplication(argc, (char *[1]) {(char *) "svn"}); \
+ } \
+ } \
+ else \
+ { \
+ QCoreApplication *app; \
+ if (! qApp) \
+ { \
+ int argc = 1; \
+ app = new QCoreApplication(argc, (char *[1]) {(char *) "svn"}); \
+ } \
+ }
+
static const char *
get_application_name(apr_hash_t *parameters,
apr_pool_t *pool)
@@ -69,8 +102,7 @@
const char *svn_application_name;
if (svn_application_name_with_pid)
{
- long pid = getpid();
- svn_application_name = apr_psprintf(pool, "Subversion [%ld]", pid);
+ svn_application_name = apr_psprintf(pool, "Subversion [%ld]", long(getpid()));
}
else
{
@@ -102,9 +134,108 @@
}
}
+static pid_t
+get_parent_pid(pid_t pid,
+ apr_pool_t *pool)
+{
+ pid_t parent_pid = 0;
+
+#ifdef __linux__
+ svn_stream_t *stat_file_stream;
+ svn_string_t *stat_file_string;
+ const char *preceeding_space, *following_space, *parent_pid_string;
+
+ const char *path = apr_psprintf(pool, "/proc/%ld/stat", long(pid));
+ svn_error_t *err = svn_stream_open_readonly(&stat_file_stream, path, pool, pool);
+ if (err == SVN_NO_ERROR)
+ {
+ err = svn_string_from_stream(&stat_file_string, stat_file_stream, pool, pool);
+ if (err == SVN_NO_ERROR)
+ {
+ if ((preceeding_space = strchr(stat_file_string->data, ' ')))
+ {
+ if ((preceeding_space = strchr(preceeding_space + 1, ' ')))
+ {
+ if ((preceeding_space = strchr(preceeding_space + 1, ' ')))
+ {
+ if ((following_space = strchr(preceeding_space + 1, ' ')))
+ {
+ parent_pid_string = apr_pstrndup(pool,
+ preceeding_space + 1,
+ following_space - preceeding_space);
+ parent_pid = atol(parent_pid_string);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (err)
+ {
+ svn_error_clear(err);
+ }
+#endif
+
+ return parent_pid;
+}
+
+static WId
+get_wid(apr_hash_t *parameters,
+ apr_pool_t *pool)
+{
+ WId wid = 1;
+
+ if (apr_hash_get(parameters,
+ "svn:auth:qapplication-safe",
+ APR_HASH_KEY_STRING))
+ {
+ QMap<pid_t, WId> process_info_list;
+ QList<WId> windows(KWindowSystem::windows());
+ QList<WId>::const_iterator i;
+ for (i = windows.begin(); i != windows.end(); i++)
+ {
+ process_info_list[NETWinInfo(QX11Info::display(),
+ *i,
+ QX11Info::appRootWindow(),
+ NET::WMPid).pid()] = *i;
+ }
+
+ apr_pool_t *iterpool = svn_pool_create(pool);
+ pid_t pid = getpid();
+ while (pid != 0)
+ {
+ svn_pool_clear(iterpool);
+ if (process_info_list.contains(pid))
+ {
+ wid = process_info_list[pid];
+ break;
+ }
+ pid = get_parent_pid(pid, iterpool);
+ }
+ svn_pool_destroy(iterpool);
+ }
+
+ if (wid == 1)
+ {
+ const char *wid_env_string = getenv("WINDOWID");
+ if (wid_env_string)
+ {
+ long wid_env = atol(wid_env_string);
+ if (wid_env != 0)
+ {
+ wid = wid_env;
+ }
+ }
+ }
+
+ return wid;
+}
+
static KWallet::Wallet *
get_wallet(QString wallet_name,
- apr_hash_t *parameters)
+ apr_hash_t *parameters,
+ apr_pool_t *pool)
{
KWallet::Wallet *wallet =
static_cast<KWallet::Wallet *> (apr_hash_get(parameters,
@@ -115,7 +246,7 @@
APR_HASH_KEY_STRING))
{
wallet = KWallet::Wallet::openWallet(wallet_name,
- -1,
+ pool ? get_wid(parameters, pool) : 1,
KWallet::Wallet::Synchronous);
}
if (wallet)
@@ -141,7 +272,7 @@
apr_hash_t *parameters = static_cast<apr_hash_t *> (data);
if (apr_hash_get(parameters, "kwallet-initialized", APR_HASH_KEY_STRING))
{
- KWallet::Wallet *wallet = get_wallet(NULL, parameters);
+ KWallet::Wallet *wallet = get_wallet(NULL, parameters, NULL);
delete wallet;
apr_hash_set(parameters,
"kwallet-initialized",
@@ -172,12 +303,7 @@
return FALSE;
}
- QCoreApplication *app;
- if (! qApp)
- {
- int argc = 1;
- app = new QCoreApplication(argc, (char *[1]) {(char *) "svn"});
- }
+ INITIALIZE_APPLICATION
KCmdLineArgs::init(1,
(char *[1]) {(char *) "svn"},
@@ -195,7 +321,7 @@
QString::fromUtf8(username) + "@" + QString::fromUtf8(realmstring);
if (! KWallet::Wallet::keyDoesNotExist(wallet_name, folder, key))
{
- KWallet::Wallet *wallet = get_wallet(wallet_name, parameters);
+ KWallet::Wallet *wallet = get_wallet(wallet_name, parameters, pool);
if (wallet)
{
apr_hash_set(parameters,
@@ -242,12 +368,7 @@
return FALSE;
}
- QCoreApplication *app;
- if (! qApp)
- {
- int argc = 1;
- app = new QCoreApplication(argc, (char *[1]) {(char *) "svn"});
- }
+ INITIALIZE_APPLICATION
KCmdLineArgs::init(1,
(char *[1]) {(char *) "svn"},
@@ -262,7 +383,7 @@
QString q_password = QString::fromUtf8(password);
QString wallet_name = get_wallet_name(parameters);
QString folder = QString::fromUtf8("Subversion");
- KWallet::Wallet *wallet = get_wallet(wallet_name, parameters);
+ KWallet::Wallet *wallet = get_wallet(wallet_name, parameters, pool);
if (wallet)
{
apr_hash_set(parameters,
--- subversion/svn/main.c
+++ subversion/svn/main.c
@@ -2067,6 +2067,9 @@
pool)))
svn_handle_error2(err, stderr, TRUE, "svn: ");
+ /* svn can safely create instance of QApplication class. */
+ svn_auth_set_parameter(ab, "svn:auth:qapplication-safe", "1");
+
ctx->auth_baton = ab;
/* Set up conflict resolution callback. */
--- subversion/svnsync/main.c
+++ subversion/svnsync/main.c
@@ -1,6 +1,6 @@
/*
* ====================================================================
- * Copyright (c) 2005-2008 CollabNet. All rights reserved.
+ * Copyright (c) 2005-2009 CollabNet. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -2362,7 +2362,15 @@
check_cancel, NULL,
pool);
if (! err)
- err = (*subcommand->cmd_func)(os, &opt_baton, pool);
+ {
+ /* svnsync can safely create instance of QApplication class. */
+ svn_auth_set_parameter(opt_baton.source_auth_baton,
+ "svn:auth:qapplication-safe", "1");
+ svn_auth_set_parameter(opt_baton.sync_auth_baton,
+ "svn:auth:qapplication-safe", "1");
+
+ err = (*subcommand->cmd_func)(os, &opt_baton, pool);
+ }
if (err)
{
/* For argument-related problems, suggest using the 'help'

View File

@ -1,10 +0,0 @@
# The commented variables in this file are the defaults that are used
# in the init-script. You don't need to uncomment them except to
# customize them to different values.
# Options for svnserve
#SVNSERVE_OPTS="--root=/var/svn"
# User and group as which to run svnserve
#SVNSERVE_USER="apache"
#SVNSERVE_GROUP="apache"

View File

@ -1,10 +0,0 @@
# The commented variables in this file are the defaults that are used
# in the init-script. You don't need to uncomment them except to
# customize them to different values.
# Options for svnserve
#SVNSERVE_OPTS="--root=/var/svn"
# User and group as which to run svnserve
SVNSERVE_USER="svn"
SVNSERVE_GROUP="svnusers"

View File

@ -1,26 +0,0 @@
#!/sbin/runscript
# Copyright 2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2 or later
# $Header: /var/cvsroot/gentoo-x86/dev-util/subversion/files/svnserve.initd,v 1.2 2005/08/25 13:59:48 pauldv Exp $
depend() {
need net
}
start() {
ebegin "Starting svnserve"
# Ensure that we run from a readable working dir, and that we do not
# lock filesystems when being run from such a location.
cd /
start-stop-daemon --start --quiet --background --make-pidfile \
--pidfile /var/run/svnserve.pid --exec /usr/bin/svnserve \
--chuid ${SVNSERVE_USER:-apache}:${SVNSERVE_GROUP:-apache} -- \
--foreground --daemon ${SVNSERVE_OPTS:---root=/var/svn}
eend $?
}
stop() {
ebegin "Stopping svnserve"
start-stop-daemon --stop --quiet --pidfile /var/run/svnserve.pid
eend $?
}

View File

@ -1,14 +0,0 @@
service svn
{
socket_type = stream
wait = no
user = apache
group = apache
umask = 002
protocol = tcp
log_on_failure += USERID HOST
port = 3690
server = /usr/bin/svnserve
server_args = -i
disable = yes
}

View File

@ -1,414 +0,0 @@
;;;; vc-svn.el --- a VC backend for Subversion
;;;; Jim Blandy <jimb@red-bean.com> --- July 2002
;;; Writing this back end has shown up some problems in VC: bugs,
;;; shortcomings in the back end interface, and so on. But I want to
;;; first produce code that Subversion users can use with an already
;;; released Emacs distribution.
;;;
;;; So for now we're working within the limitations of the released
;;; VC; once we've got something functional, then we can start writing
;;; VC patches.
;;; To make this file load on demand, put this file into a directory
;;; in `load-path', and add this line to a startup file:
;;;
;;; (add-to-list 'vc-handled-backends 'SVN)
;;; To do here:
;;; Provide more of the optional VC backend functions:
;;; - dir-state
;;; - merge across arbitrary revisions
;;;
;;; Maybe we want more info in mode-line-string. Status of props? Status
;;; compared to what's in the repository (svn st -u) ?
;;;
;;; VC passes the vc-svn-register function a COMMENT argument, which
;;; is like the file description in CVS and RCS. Could we store the
;;; COMMENT as a Subversion property? Would that show up in fancy DAV
;;; web folder displays, or would it just languish in obscurity, the
;;; way CVS and RCS descriptions do?
;;;
;;; After manual merging, need some way to run `svn resolved'. Perhaps
;;; we should just prompt for approval when somebody tries to commit a
;;; conflicted file?
;;;
;;; vc-svn ought to handle more gracefully an attempted commit that
;;; fails with "Transaction is out of date". Probably the best
;;; approach is to ask "file is not up-to-date; do you want to merge
;;; now?" I think vc-cvs does this.
;;;
;;; Perhaps show the "conflicted" marker in the modeline?
;;;
;;; If conflicted, before committing or merging, ask the user if they
;;; want to mark the file as resolved.
;;;
;;; Won't searching for strings in svn output cause trouble if the
;;; locale language is not English?
;;;
;;; After merging news, need to recheck our idea of which workfile
;;; version we have. Reverting the file does this but we need to
;;; force it. Note that this can be necessary even if the file has
;;; not changed.
;;;
;;; Does everything work properly if we're rolled back to an old
;;; revision?
;;;
;;; Perhaps need to implement vc-svn-latest-on-branch-p?
;;; To do in VC:
;;;
;;; Make sure vc's documentation for `workfile-unchanged-p' default
;;; function mentions that it must not run asynchronously, and the
;;; symptoms if it does.
;;;
;;; Fix logic for finding log entries.
;;;
;;; Allow historical diff to choose an appropriate default previous
;;; revision number. I think this entails moving vc-previous-revision
;;; et al into the back end.
;;;
;;; Should vc-BACKEND-checkout really have to set the workfile version
;;; itself?
;;;
;;; Fix smerge for svn conflict markers.
;;;
;;; We can have files which are not editable for reasons other than
;;; needing to be checked out. For example, they might be a read-only
;;; view of an old revision opened with [C-x v ~]. (See vc-merge)
;;;
;;; Would be nice if there was a way to mark a file as
;;; just-checked-out, aside from updating the checkout-time property
;;; which in theory is not to be changed by backends.
(add-to-list 'vc-handled-backends 'SVN)
(defcustom vc-svn-program-name "svn"
"*Name of Subversion client program, for use by Emacs's VC package."
:type 'string
:group 'vc
:version "21.2.90.2")
(defcustom vc-svn-diff-switches nil
"*A string or list of strings specifying extra switches for `svn diff' under VC."
:type '(repeat string)
:group 'vc
:version "21.2.90.2")
(defun vc-svn-registered (file)
"Return true if FILE is registered under Subversion."
;; First, a quick false positive test: is there a `.svn/entries' file?
(and (file-exists-p (expand-file-name ".svn/entries"
(file-name-directory file)))
(not (null (vc-svn-run-status file)))))
(put 'vc-svn-with-output-buffer 'lisp-indent-function 0)
(defmacro vc-svn-with-output-buffer (&rest body)
"Save excursion, switch to buffer ` *Subversion Output*', and erase it."
`(save-excursion
;; Let's not delete this buffer when we're done --- leave
;; it around for debugging.
(set-buffer (get-buffer-create " *Subversion Output*"))
(erase-buffer)
,@body))
(defun vc-svn-pop-up-error (&rest args)
"Pop up the Subversion output buffer, and raise an error with ARGS."
(pop-to-buffer " *Subversion Output*")
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)
(apply 'error args))
(defun vc-svn-run-status (file &optional update)
"Run `svn status -v' on FILE, and return the result.
If optional arg UPDATE is true, pass the `-u' flag to check against
the repository, across the network.
See `vc-svn-parse-status' for a description of the result."
(vc-svn-with-output-buffer
;; We should call vc-do-command here, but Subversion exits with an
;; error status if FILE isn't under its control, and we want to
;; return that as nil, not display it to the user. We can tell
;; vc-do-command to
(let ((status (apply 'call-process vc-svn-program-name nil t nil
(append '("status" "-v")
(if update '("-u") '())
(list file)))))
(goto-char (point-min))
(if (not (equal 0 status)) ; not zerop; status can be a string
;; If you ask for the status of a file that isn't even in a
;; Subversion-controlled directory, then Subversion exits with
;; this error.
(if (or (looking-at "\\(.*\n\\)*.*is not a working copy")
(looking-at "\\(.*\n\\)*.*is not a versioned resource")
(looking-at "\\(.*\n\\)*.*: No such file or directory"))
nil
;; Other errors we should actually report to the user.
(vc-svn-pop-up-error
"Error running Subversion to check status of `%s'"
(file-name-nondirectory file)))
;; Otherwise, we've got valid status output in the buffer, so
;; just parse that.
(vc-svn-parse-status)))))
(defun vc-svn-parse-status ()
"Parse the output from `svn status -v' at point.
We return nil for a file not under Subversion's control,
or (STATE LOCAL CHANGED) for files that are, where:
STATE is the file's VC state (see the documentation for `vc-state'),
LOCAL is the base revision in the working copy, and
CHANGED is the last revision in which it was changed.
Both LOCAL and CHANGED are strings, not numbers.
If we passed `svn status' the `-u' flag, then CHANGED could be a later
revision than LOCAL.
If the file is newly added, LOCAL is \"0\" and CHANGED is nil."
(let ((state (vc-svn-parse-state-only)))
(cond
((not state) nil)
;; A newly added file has no revision.
((looking-at "....\\s-+\\(\\*\\s-+\\)?[-0]\\s-+\\?")
(list state "0" nil))
((looking-at "....\\s-+\\(\\*\\s-+\\)?\\([0-9]+\\)\\s-+\\([0-9]+\\)")
(list state
(match-string 2)
(match-string 3)))
((looking-at "^I +") nil) ;; An ignored file
((looking-at " \\{40\\}") nil) ;; A file that is not in the wc nor svn?
(t (error "Couldn't parse output from `svn status -v'")))))
(defun vc-svn-parse-state-only ()
"Parse the output from `svn status -v' at point, and return a state.
The documentation for the function `vc-state' describes the possible values."
(cond
;; Be careful --- some of the later clauses here could yield false
;; positives, if the clauses preceding them didn't screen those
;; out. Making a pattern more selective could break something.
;; nil The given file is not under version control,
;; or does not exist.
((looking-at "\\?\\|^$") nil)
;; 'needs-patch The file has not been edited by the
;; user, but there is a more recent version
;; on the current branch stored in the
;; master file.
((looking-at " ..\\s-+\\*") 'needs-patch)
;; 'up-to-date The working file is unmodified with
;; respect to the latest version on the
;; current branch, and not locked.
;;
;; This is also returned for files which do not
;; exist, as will be the case when finding a
;; new file in a svn-controlled directory. That
;; case is handled in vc-svn-parse-status.
((looking-at " ") 'up-to-date)
;; 'needs-merge The file has been edited by the user,
;; and there is also a more recent version
;; on the current branch stored in the
;; master file. This state can only occur
;; if locking is not used for the file.
((looking-at "\\S-+\\s-+\\*") 'needs-merge)
;; 'edited The working file has been edited by the
;; user. If locking is used for the file,
;; this state means that the current
;; version is locked by the calling user.
(t 'edited)))
;;; Is it really safe not to check for updates? I haven't seen any
;;; cases where failing to check causes a problem that is not caught
;;; in some other way. However, there *are* cases where checking
;;; needlessly causes network delay, such as C-x v v. The common case
;;; is for the commit to be OK; we can handle errors if they occur. -- mbp
(defun vc-svn-state (file)
"Return the current version control state of FILE.
For a list of possible return values, see `vc-state'.
This function should do a full and reliable state computation; it is
usually called immediately after `C-x v v'. `vc-svn-state-heuristic'
provides a faster heuristic when visiting a file.
For svn this does *not* check for updates in the repository, because
that needlessly slows down vc when the repository is remote. Instead,
we rely on Subversion to trap situations such as needing a merge
before commit."
(car (vc-svn-run-status file)))
(defun vc-svn-state-heuristic (file)
"Estimate the version control state of FILE at visiting time.
For a list of possible values, see the doc string of `vc-state'.
This is supposed to be considerably faster than `vc-svn-state'. It
just runs `svn status -v', without the `-u' flag, so it's a strictly
local operation."
(car (vc-svn-run-status file)))
(defun vc-svn-workfile-version (file)
"Return the current workfile version of FILE."
(cadr (vc-svn-run-status file)))
(defun vc-svn-checkout-model (file)
'implicit)
(defun vc-svn-register (file &optional rev comment)
"Register FILE with Subversion.
REV is an initial revision; Subversion ignores it.
COMMENT is an initial description of the file; currently this is ignored."
(vc-svn-with-output-buffer
(let ((status (call-process vc-svn-program-name nil t nil "add" file)))
(or (equal 0 status) ; not zerop; status can be a string
(vc-svn-pop-up-error "Error running Subversion to add `%s'"
(file-name-nondirectory file))))))
(defun vc-svn-checkin (file rev comment)
(apply 'vc-do-command nil 0 vc-svn-program-name file
"commit" (if comment (list "-m" comment) '())))
(defun vc-svn-checkout (file &optional editable rev destfile)
"Check out revision REV of FILE into the working area.
The EDITABLE argument must be non-nil, since Subversion doesn't
support locking.
If REV is non-nil, that is the revision to check out (default is
current workfile version). If REV is the empty string, that means to
check out the head of the trunk. For Subversion, that's equivalent to
passing nil.
If optional arg DESTFILE is given, it is an alternate filename to
write the contents to; we raise an error."
(unless editable
(error "VC asked Subversion to check out a read-only copy of file"))
(when destfile
(error "VC asked Subversion to check out a file under another name"))
(when (equal rev "")
(setq rev nil))
(apply 'vc-do-command nil 0 vc-svn-program-name file
"update" (if rev (list "-r" rev) '()))
(vc-file-setprop file 'vc-workfile-version nil))
(defun vc-svn-revert (file &optional contents-done)
"Revert FILE back to the current workfile version.
If optional arg CONTENTS-DONE is non-nil, then the contents of FILE
have already been reverted from a version backup, and this function
only needs to update the status of FILE within the backend. This
function ignores the CONTENTS-DONE argument."
(vc-do-command nil 0 vc-svn-program-name file "revert"))
(defun vc-svn-merge-news (file)
"Merge recent changes into FILE.
This calls `svn update'. In the case of conflicts, Subversion puts
conflict markers into the file and leaves additional temporary files
containing the `ancestor', `mine', and `other' files.
You may need to run `svn resolved' by hand once these conflicts have
been resolved.
Returns a vc status, which is used to determine whether conflicts need
to be merged."
(prog1
(vc-do-command nil 0 vc-svn-program-name file "update")
;; This file may not have changed in the revisions which were
;; merged, which means that its mtime on disk will not have been
;; updated. However, the workfile version may still have been
;; updated, and we want that to be shown correctly in the
;; modeline.
;; vc-cvs does something like this
(vc-file-setprop file 'vc-checkout-time 0)
(vc-file-setprop file 'vc-workfile-version
(vc-svn-workfile-version file))))
(defun vc-svn-print-log (file)
"Insert the revision log of FILE into the *vc* buffer."
(vc-do-command nil 'async vc-svn-program-name file "log"))
(defun vc-svn-show-log-entry (version)
"Search the log entry for VERSION in the current buffer.
Make sure it is displayed in the buffer's window."
(when (re-search-forward (concat "^-+\n\\(rev\\) "
(regexp-quote version)
":[^|]+|[^|]+| [0-9]+ lines?"))
(goto-char (match-beginning 1))
(recenter 1)))
(defun vc-svn-diff (file &optional rev1 rev2)
"Insert the diff for FILE into the *vc-diff* buffer.
If REV1 and REV2 are non-nil, report differences from REV1 to REV2.
If REV1 is nil, use the current workfile version (as found in the
repository) as the older version; if REV2 is nil, use the current
workfile contents as the newer version.
This function returns a status of either 0 (no differences found), or
1 (either non-empty diff or the diff is run asynchronously)."
(let* ((diff-switches-list
;; In Emacs 21.3.50 or so, the `vc-diff-switches-list' macro
;; started requiring its symbol argument to be quoted.
(condition-case nil
(vc-diff-switches-list svn)
(void-variable (vc-diff-switches-list 'SVN))))
(status (vc-svn-run-status file))
(local (elt status 1))
(changed (elt status 2))
;; If rev1 is the default (the base revision) set it to nil.
;; This is nice because it lets us recognize when the diff
;; will run locally, and thus when we shouldn't bother to run
;; it asynchronously. But it's also necessary, since a diff
;; for vc-default-workfile-unchanged-p *must* run
;; synchronously, or else you'll end up with two diffs in the
;; *vc-diff* buffer. `vc-diff-workfile-unchanged-p' passes
;; the base revision explicitly, but this kludge lets us
;; recognize that we can run the diff synchronously anyway.
;; Fragile, no?
(rev1 (if (and rev1 (not (equal rev1 local))) rev1))
(rev-switches-list
(cond
;; Given base rev against given rev.
((and rev1 rev2) (list "-r" (format "%s:%s" rev1 rev2)))
;; Given base rev against working copy.
(rev1 (list "-r" rev1))
;; Working copy base against given rev.
(rev2 (list "-r" (format "%s:%s" local rev2)))
;; Working copy base against working copy.
(t '())))
;; Run diff asynchronously if we're going to have to go
;; across the network.
(async (or rev1 rev2)))
(let ((status (apply 'vc-do-command "*vc-diff*" (if async 'async 0)
vc-svn-program-name file
(append '("diff") rev-switches-list))))
(if (or async (> (buffer-size (get-buffer "*vc-diff*")) 0))
1 0))))
(defun vc-svn-find-version (file rev buffer)
(vc-do-command buffer 0 vc-svn-program-name file
"cat" "-r" rev))
(provide 'vc-svn)

View File

@ -1,814 +0,0 @@
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-util/subversion/subversion-1.6.9.ebuild,v 1.5 2010/03/04 15:28:56 jer Exp $
EAPI="2"
WANT_AUTOMAKE="none"
inherit autotools bash-completion db-use depend.apache elisp-common eutils flag-o-matic java-pkg-opt-2 libtool multilib perl-module python
DESCRIPTION="Advanced version control system"
HOMEPAGE="http://subversion.tigris.org/"
SRC_URI="http://subversion.tigris.org/downloads/${P/_/-}.tar.bz2"
LICENSE="Subversion"
SLOT="0"
KEYWORDS="~alpha amd64 ~arm hppa ~ia64 ~ppc ppc64 ~s390 ~sh ~sparc x86 ~x86-fbsd"
IUSE="apache2 berkdb ctypes-python debug doc +dso emacs extras gnome-keyring java kde nls perl python ruby sasl test vim-syntax +webdav-neon webdav-serf"
CDEPEND=">=dev-db/sqlite-3.4[threadsafe]
>=dev-libs/apr-1.3:1
>=dev-libs/apr-util-1.3:1
dev-libs/expat
sys-libs/zlib
berkdb? ( =sys-libs/db-4* )
emacs? ( virtual/emacs )
gnome-keyring? ( dev-libs/glib:2 sys-apps/dbus gnome-base/gnome-keyring )
kde? ( sys-apps/dbus x11-libs/qt-core x11-libs/qt-dbus x11-libs/qt-gui >=kde-base/kdelibs-4 )
ruby? ( >=dev-lang/ruby-1.8.2 )
sasl? ( dev-libs/cyrus-sasl )
dev-util/subversion
net-misc/neon
webdav-neon? ( >=net-libs/neon-0.28 )
webdav-serf? ( >=net-libs/serf-0.3.0 )"
RDEPEND="${CDEPEND}
apache2? ( www-servers/apache[apache2_modules_dav] )
java? ( >=virtual/jre-1.5 )
kde? ( kde-base/kwalletd )
nls? ( virtual/libintl )
perl? ( dev-perl/URI )"
APACHE_TEST_DEPEND="|| (
=www-servers/apache-2.4*[apache2_modules_auth_basic,apache2_modules_authn_core,apache2_modules_authn_file,apache2_modules_authz_core,apache2_modules_authz_user,apache2_modules_dav,apache2_modules_log_config,apache2_modules_unixd]
=www-servers/apache-2.2*[apache2_modules_auth_basic,apache2_modules_authn_file,apache2_modules_dav,apache2_modules_log_config]
)"
DEPEND="${CDEPEND}
>=sys-apps/sandbox-1.6
ctypes-python? ( dev-python/ctypesgen )
doc? ( app-doc/doxygen )
gnome-keyring? ( dev-util/pkgconfig )
java? ( >=virtual/jdk-1.5 )
kde? ( dev-util/pkgconfig )
nls? ( sys-devel/gettext )
test? (
webdav-neon? ( ${APACHE_TEST_DEPEND} )
webdav-serf? ( ${APACHE_TEST_DEPEND} )
)
webdav-neon? ( dev-util/pkgconfig )"
want_apache
S="${WORKDIR}/${P/_/-}"
# Allow for custom repository locations.
# This can't be in pkg_setup() because the variable needs to be available to pkg_config().
: ${SVN_REPOS_LOC:=/var/svn}
pkg_setup() {
if use kde && ! use nls; then
eerror "Support for KWallet (KDE) requires Native Language Support (NLS)."
die "Enable \"nls\" USE flag"
fi
if use berkdb; then
einfo
if [[ -z "${SVN_BDB_VERSION}" ]]; then
SVN_BDB_VERSION="$(db_ver_to_slot "$(db_findver sys-libs/db 2>/dev/null)")"
einfo "SVN_BDB_VERSION variable isn't set. You can set it to enforce using of specific version of Berkeley DB."
fi
einfo "Using: Berkeley DB ${SVN_BDB_VERSION}"
einfo
local apu_bdb_version="$(scanelf -nq "${ROOT}usr/$(get_libdir)/libaprutil-1.so.0" | grep -Eo "libdb-[[:digit:]]+\.[[:digit:]]+" | sed -e "s/libdb-\(.*\)/\1/")"
if [[ -n "${apu_bdb_version}" && "${SVN_BDB_VERSION}" != "${apu_bdb_version}" ]]; then
eerror "APR-Util is linked against Berkeley DB ${apu_bdb_version}, but you are trying"
eerror "to build Subversion with support for Berkeley DB ${SVN_BDB_VERSION}."
eerror "Rebuild dev-libs/apr-util or set SVN_BDB_VERSION=\"${apu_bdb_version}\"."
eerror "Aborting to avoid possible run-time crashes."
die "Berkeley DB version mismatch"
fi
fi
depend.apache_pkg_setup
java-pkg-opt-2_pkg_setup
if ! use webdav-neon && ! use webdav-serf; then
ewarn
ewarn "WebDAV support is disabled. You need WebDAV to"
ewarn "access repositories through the HTTP protocol."
ewarn
ewarn "WebDAV support needs one of the following USE flags enabled:"
ewarn " webdav-neon webdav-serf"
ewarn
ewarn "You can do this by enabling one of these flags in /etc/portage/package.use:"
ewarn " ${CATEGORY}/${PN} webdav-neon webdav-serf"
ewarn
ebeep
fi
if use test; then
elog
elog "\e[1;31m************************************************************************************************\e[0m"
elog
elog "NOTES ABOUT TESTS"
elog
elog "You can set the following variables to enable testing of some features and configure testing:"
if use webdav-neon || use webdav-serf; then
elog " SVN_TEST_APACHE_PORT=integer - Set Apache port number (Default value: 62208)"
fi
elog " SVN_TEST_SVNSERVE_PORT=integer - Set svnserve port number (Default value: 62209)"
elog " SVN_TEST_FSFS_MEMCACHED=1 - Enable using of Memcached for FSFS repositories"
elog " SVN_TEST_FSFS_MEMCACHED_PORT=integer - Set Memcached port number (Default value: 62210)"
elog " SVN_TEST_FSFS_SHARDING=integer - Enable sharding of FSFS repositories and set default shard size for FSFS repositories"
elog " SVN_TEST_FSFS_PACKING=1 - Enable packing of FSFS repositories"
elog " (SVN_TEST_FSFS_PACKING requires SVN_TEST_FSFS_SHARDING)"
# if use sasl; then
# elog " SVN_TEST_SASL=1 - Enable SASL authentication"
# fi
if use ctypes-python || use java || use perl || use python || use ruby; then
elog " SVN_TEST_BINDINGS=1 - Enable testing of bindings"
fi
if use java || use perl || use python || use ruby; then
elog " (Testing of bindings requires ${CATEGORY}/${PF})"
fi
if use java; then
elog " (Testing of JavaHL library requires dev-java/junit:4)"
fi
elog
elog "\e[1;31m************************************************************************************************\e[0m"
elog
ebeep
epause 24
if ! use apache2 && { use webdav-neon || use webdav-serf; }; then
eerror "Testing of libsvn_ra_neon / libsvn_ra_serf requires support for Apache."
die "Enable \"apache2\" USE flag."
fi
if [[ -n "${SVN_TEST_APACHE_PORT}" ]] && ! ([[ "$((${SVN_TEST_APACHE_PORT}))" == "${SVN_TEST_APACHE_PORT}" ]]) &>/dev/null; then
die "Value of SVN_TEST_APACHE_PORT must be an integer"
fi
if [[ -n "${SVN_TEST_SVNSERVE_PORT}" ]] && ! ([[ "$((${SVN_TEST_SVNSERVE_PORT}))" == "${SVN_TEST_SVNSERVE_PORT}" ]]) &>/dev/null; then
die "Value of SVN_TEST_SVNSERVE_PORT must be an integer"
fi
if [[ -n "${SVN_TEST_FSFS_MEMCACHED}" ]] && ! has_version net-misc/memcached; then
die "net-misc/memcached must be installed"
fi
if [[ -n "${SVN_TEST_FSFS_MEMCACHED_PORT}" ]] && ! ([[ "$((${SVN_TEST_FSFS_MEMCACHED_PORT}))" == "${SVN_TEST_FSFS_MEMCACHED_PORT}" ]]) &>/dev/null; then
die "Value of SVN_TEST_FSFS_MEMCACHED_PORT must be an integer"
fi
if [[ -n "${SVN_TEST_FSFS_SHARDING}" ]] && ! ([[ "$((${SVN_TEST_FSFS_SHARDING}))" == "${SVN_TEST_FSFS_SHARDING}" ]]) &>/dev/null; then
die "Value of SVN_TEST_FSFS_SHARDING must be an integer"
fi
if [[ -n "${SVN_TEST_FSFS_PACKING}" && -z "${SVN_TEST_FSFS_SHARDING}" ]]; then
die "SVN_TEST_FSFS_PACKING requires SVN_TEST_FSFS_SHARDING"
fi
if [[ -n "${SVN_TEST_BINDINGS}" ]]; then
if { use java || use perl || use python || use ruby; } && ! has_version "=${CATEGORY}/${PF}"; then
die "${CATEGORY}/${PF} must be installed"
fi
if use java && ! has_version dev-java/junit:4; then
die "dev-java/junit:4 must be installed"
fi
fi
fi
if use debug; then
append-cppflags -DSVN_DEBUG -DAP_DEBUG
fi
}
src_prepare() {
epatch "${FILESDIR}/${PN}-1.6.0-disable_linking_against_unneeded_libraries.patch"
epatch "${FILESDIR}/${PN}-1.6.2-local_library_preloading.patch"
epatch "${FILESDIR}/${PN}-1.6.3-kwallet_window.patch"
chmod +x build/transform_libtool_scripts.sh || die "chmod failed"
if ! use test; then
sed -i \
-e "s/\(BUILD_RULES=.*\) bdb-test\(.*\)/\1\2/g" \
-e "s/\(BUILD_RULES=.*\) test\(.*\)/\1\2/g" configure.ac
fi
eautoconf
elibtoolize
}
src_configure() {
local myconf
if use python || use perl || use ruby; then
myconf+=" --with-swig"
else
myconf+=" --without-swig"
fi
if use java; then
if use test && [[ -n "${SVN_TEST_BINDINGS}" ]]; then
myconf+=" --with-junit=/usr/share/junit-4/lib/junit.jar"
else
myconf+=" --without-junit"
fi
fi
econf --libdir="/usr/$(get_libdir)" \
$(use_with apache2 apxs "${APXS}") \
$(use_with berkdb berkeley-db "db.h:/usr/include/db${SVN_BDB_VERSION}::db-${SVN_BDB_VERSION}") \
$(use_with ctypes-python ctypesgen /usr) \
$(use_enable dso runtime-module-search) \
$(use_with gnome-keyring) \
$(use_enable java javahl) \
$(use_with java jdk "${JAVA_HOME}") \
$(use_with kde kwallet) \
$(use_enable nls) \
$(use_with sasl) \
$(use_with webdav-neon neon) \
$(use_with webdav-serf serf /usr) \
${myconf} \
--with-apr=/usr/bin/apr-1-config \
--with-apr-util=/usr/bin/apu-1-config \
--disable-experimental-libtool \
--without-jikes \
--enable-local-library-preloading \
--disable-mod-activation \
--disable-neon-version-check \
--with-sqlite=/usr
}
src_compile() {
einfo
einfo "Building of core of Subversion"
einfo
emake local-all || die "Building of core of Subversion failed"
if use ctypes-python; then
einfo
einfo "Building of Subversion Ctypes Python bindings"
einfo
emake ctypes-python || die "Building of Subversion Ctypes Python bindings failed"
fi
if use python; then
einfo
einfo "Building of Subversion SWIG Python bindings"
einfo
emake swig_pydir="$(python_get_sitedir)/libsvn" swig_pydir_extra="$(python_get_sitedir)/svn" swig-py \
|| die "Building of Subversion SWIG Python bindings failed"
fi
if use perl; then
einfo
einfo "Building of Subversion SWIG Perl bindings"
einfo
emake -j1 swig-pl || die "Building of Subversion SWIG Perl bindings failed"
fi
if use ruby; then
einfo
einfo "Building of Subversion SWIG Ruby bindings"
einfo
emake swig-rb || die "Building of Subversion SWIG Ruby bindings failed"
fi
if use java; then
einfo
einfo "Building of Subversion JavaHL library"
einfo
emake -j1 JAVAC_FLAGS="$(java-pkg_javac-args) -encoding iso8859-1" javahl \
|| die "Building of Subversion JavaHL library failed"
fi
if use emacs; then
einfo
einfo "Compilation of Emacs modules"
einfo
elisp-compile contrib/client-side/emacs/{dsvn,psvn,vc-svn}.el doc/svn-doc.el doc/tools/svnbook.el || die "Compilation of Emacs modules failed"
fi
if use extras; then
einfo
einfo "Building of contrib and tools"
einfo
emake contrib || die "Building of contrib failed"
emake tools || die "Building of tools failed"
fi
if use doc; then
einfo
einfo "Building of Subversion HTML documentation"
einfo
doxygen doc/doxygen.conf || die "Building of Subversion HTML documentation failed"
if use java; then
einfo
einfo "Building of Subversion JavaHL library HTML documentation"
einfo
emake doc-javahl || die "Building of Subversion JavaHL library HTML documentation failed"
fi
fi
}
create_apache_tests_configuration() {
get_loadmodule_directive() {
if [[ "$("${APACHE_BIN}" -l)" != *"mod_$1.c"* ]]; then
echo "LoadModule $1_module \"${APACHE_MODULESDIR}/mod_$1.so\""
fi
}
get_loadmodule_directives() {
if has_version "=www-servers/apache-2.4*"; then
get_loadmodule_directive auth_basic
get_loadmodule_directive authn_core
get_loadmodule_directive authn_file
get_loadmodule_directive authz_core
get_loadmodule_directive authz_user
get_loadmodule_directive dav
get_loadmodule_directive log_config
get_loadmodule_directive unixd
else
get_loadmodule_directive auth_basic
get_loadmodule_directive authn_file
get_loadmodule_directive dav
get_loadmodule_directive log_config
fi
}
mkdir -p "${T}/apache"
cat << EOF > "${T}/apache/apache.conf"
$(get_loadmodule_directives)
LoadModule dav_svn_module "${S}/subversion/mod_dav_svn/.libs/mod_dav_svn.so"
LoadModule authz_svn_module "${S}/subversion/mod_authz_svn/.libs/mod_authz_svn.so"
User $(id -un)
Group $(id -gn)
Listen localhost:${SVN_TEST_APACHE_PORT}
ServerName localhost
ServerRoot "${T}"
DocumentRoot "${T}"
CoreDumpDirectory "${T}"
PidFile "${T}/apache.pid"
CustomLog "${T}/apache/access_log" "%h %l %u %{%Y-%m-%dT%H:%M:%S}t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
CustomLog "${T}/apache/svn_log" "%{%Y-%m-%dT%H:%M:%S}t %u %{SVN-REPOS-NAME}e %{SVN-ACTION}e" env=SVN-ACTION
ErrorLog "${T}/apache/error_log"
LogLevel Debug
MaxRequestsPerChild 0
<Directory />
AllowOverride None
</Directory>
<Location /svn-test-work/repositories>
DAV svn
SVNParentPath "${S}/subversion/tests/cmdline/svn-test-work/repositories"
AuthzSVNAccessFile "${S}/subversion/tests/cmdline/svn-test-work/authz"
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile "${T}/apache/users"
Require valid-user
</Location>
<Location /svn-test-work/local_tmp/repos>
DAV svn
SVNPath "${S}/subversion/tests/cmdline/svn-test-work/local_tmp/repos"
AuthzSVNAccessFile "${S}/subversion/tests/cmdline/svn-test-work/authz"
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile "${T}/apache/users"
Require valid-user
</Location>
EOF
cat << EOF > "${T}/apache/users"
jrandom:xCGl35kV9oWCY
jconstant:xCGl35kV9oWCY
EOF
}
set_tests_variables() {
if [[ "$1" == "local" ]]; then
base_url="file://${S}/subversion/tests/cmdline"
http_library=""
fi
if [[ "$1" == "svn" ]]; then
base_url="svn://127.0.0.1:${SVN_TEST_SVNSERVE_PORT}"
http_library=""
fi
if [[ "$1" == "neon" || "$1" == "serf" ]]; then
base_url="http://127.0.0.1:${SVN_TEST_APACHE_PORT}"
http_library="$1"
fi
}
src_test() {
if ! use test; then
die "Invalid configuration"
fi
local fs_type fs_types ra_type ra_types options failed_tests
fs_types="fsfs"
use berkdb && fs_types+=" bdb"
ra_types="local svn"
use webdav-neon && ra_types+=" neon"
use webdav-serf && ra_types+=" serf"
local pid_file
for pid_file in svnserve.pid apache.pid memcached.pid; do
rm -f "${T}/${pid_file}"
done
termination() {
local die="$1" pid_file
if [[ -n "${die}" ]]; then
echo -e "\n\e[1;31mKilling of child processes...\e[0m\a" > /dev/tty
fi
for pid_file in svnserve.pid apache.pid memcached.pid; do
if [[ -f "${T}/${pid_file}" ]]; then
kill "$(<"${T}/${pid_file}")"
fi
done
if [[ -n "${die}" ]]; then
sleep 6
die "Termination"
fi
}
trap 'termination 1 &' SIGINT SIGTERM
SVN_TEST_SVNSERVE_PORT="${SVN_TEST_SVNSERVE_PORT:-62209}"
LC_ALL="C" subversion/svnserve/svnserve -dr "subversion/tests/cmdline" --listen-port "${SVN_TEST_SVNSERVE_PORT}" --log-file "${T}/svnserve.log" --pid-file "${T}/svnserve.pid"
if use webdav-neon || use webdav-serf; then
SVN_TEST_APACHE_PORT="${SVN_TEST_APACHE_PORT:-62208}"
create_apache_tests_configuration
"${APACHE_BIN}" -f "${T}/apache/apache.conf"
fi
if [[ -n "${SVN_TEST_FSFS_MEMCACHED}" ]]; then
SVN_TEST_FSFS_MEMCACHED_PORT="${SVN_TEST_FSFS_MEMCACHED_PORT:-62210}"
sed -e "/\[memcached-servers\]/akey = 127.0.0.1:${SVN_TEST_FSFS_MEMCACHED_PORT}" -i subversion/tests/tests.conf
memcached -dp "${SVN_TEST_FSFS_MEMCACHED_PORT}" -P "${T}/memcached.pid"
fi
if [[ -n "${SVN_TEST_FSFS_SHARDING}" ]]; then
options+=" FSFS_SHARDING=${SVN_TEST_FSFS_SHARDING}"
fi
if [[ -n "${SVN_TEST_FSFS_PACKING}" ]]; then
options+=" FSFS_PACKING=1"
fi
# if [[ -n "${SVN_TEST_SASL}" ]]; then
# options+=" ENABLE_SASL=1"
# fi
sleep 6
for ra_type in ${ra_types}; do
for fs_type in ${fs_types}; do
[[ "${ra_type}" == "local" && "${fs_type}" == "bdb" ]] && continue
einfo
einfo "\e[1;34mTesting of ra_${ra_type} + $(echo ${fs_type} | tr '[:lower:]' '[:upper:]')\e[0m"
einfo
set_tests_variables ${ra_type}
time emake check FS_TYPE="${fs_type}" BASE_URL="${base_url}" HTTP_LIBRARY="${http_library}" CLEANUP="1" ${options} || failed_tests="1"
mv tests.log "${T}/tests-ra_${ra_type}-${fs_type}.log"
done
done
unset base_url http_library
termination
trap - SIGINT SIGTERM
if [[ -n "${SVN_TEST_BINDINGS}" ]]; then
local swig_lingua swig_linguas
local -A linguas
if use ctypes-python; then
einfo
einfo "\e[1;34mTesting of Subversion Ctypes Python bindings\e[0m"
einfo
time emake check-ctypes-python || failed_tests="1"
fi
use perl && swig_linguas+=" pl"
use python && swig_linguas+=" py"
use ruby && swig_linguas+=" rb"
linguas[pl]="Perl"
linguas[py]="Python"
linguas[rb]="Ruby"
for swig_lingua in ${swig_linguas}; do
einfo
einfo "\e[1;34mTesting of Subversion SWIG ${linguas[${swig_lingua}]} bindings\e[0m"
einfo
time emake check-swig-${swig_lingua} || failed_tests="1"
done
if use java; then
einfo
einfo "\e[1;34mTesting of Subversion JavaHL library\e[0m"
einfo
time emake check-javahl || failed_tests="1"
fi
fi
if [[ -n "${failed_tests}" ]]; then
ewarn
ewarn "\e[1;31mSome tests failed\e[0m"
ewarn
ebeep 12
fi
}
src_install() {
einfo
einfo "Installation of core of Subversion"
einfo
emake -j1 DESTDIR="${D}" local-install || die "Installation of core of Subversion failed"
if use ctypes-python; then
einfo
einfo "Installation of Subversion Ctypes Python bindings"
einfo
emake DESTDIR="${D}" install-ctypes-python || die "Installation of Subversion Ctypes Python bindings failed"
fi
if use python; then
einfo
einfo "Installation of Subversion SWIG Python bindings"
einfo
emake -j1 DESTDIR="${D}" swig_pydir="$(python_get_sitedir)/libsvn" swig_pydir_extra="$(python_get_sitedir)/svn" install-swig-py \
|| die "Installation of Subversion SWIG Python bindings failed"
fi
if use perl; then
einfo
einfo "Installation of Subversion SWIG Perl bindings"
einfo
emake -j1 DESTDIR="${D}" INSTALLDIRS="vendor" install-swig-pl || die "Installation of Subversion SWIG Perl bindings failed"
fixlocalpod
find "${D}" "(" -name .packlist -o -name "*.bs" ")" -print0 | xargs -0 rm -fr
fi
if use ruby; then
einfo
einfo "Installation of Subversion SWIG Ruby bindings"
einfo
emake -j1 DESTDIR="${D}" install-swig-rb || die "Installation of Subversion SWIG Ruby bindings failed"
fi
if use java; then
einfo
einfo "Installation of Subversion JavaHL library"
einfo
emake -j1 DESTDIR="${D}" install-javahl || die "Installation of Subversion JavaHL library failed"
java-pkg_regso "${D}"usr/$(get_libdir)/libsvnjavahl*.so
java-pkg_dojar "${D}"usr/$(get_libdir)/svn-javahl/svn-javahl.jar
rm -fr "${D}"usr/$(get_libdir)/svn-javahl/*.jar
fi
# Install Apache module configuration.
if use apache2; then
dodir "${APACHE_MODULES_CONFDIR}"
cat << EOF > "${D}${APACHE_MODULES_CONFDIR}"/47_mod_dav_svn.conf
<IfDefine SVN>
LoadModule dav_svn_module modules/mod_dav_svn.so
<IfDefine SVN_AUTHZ>
LoadModule authz_svn_module modules/mod_authz_svn.so
</IfDefine>
# Example configuration:
#<Location /svn/repos>
# DAV svn
# SVNPath ${SVN_REPOS_LOC}/repos
# AuthType Basic
# AuthName "Subversion repository"
# AuthUserFile ${SVN_REPOS_LOC}/conf/svnusers
# Require valid-user
#</Location>
</IfDefine>
EOF
fi
# Install Bash Completion, bug 43179.
dobashcompletion tools/client-side/bash_completion subversion
rm -f tools/client-side/bash_completion
# Install hot backup script, bug 54304.
newbin tools/backup/hot-backup.py svn-hot-backup
rm -fr tools/backup
# Install svn_load_dirs.pl.
if use perl; then
dobin contrib/client-side/svn_load_dirs/svn_load_dirs.pl
fi
rm -f contrib/client-side/svn_load_dirs/svn_load_dirs.pl
# Install svnserve init-script and xinet.d snippet, bug 43245.
newinitd "${FILESDIR}"/svnserve.initd svnserve
if use apache2; then
newconfd "${FILESDIR}"/svnserve.confd svnserve
else
newconfd "${FILESDIR}"/svnserve.confd2 svnserve
fi
insinto /etc/xinetd.d
newins "${FILESDIR}"/svnserve.xinetd svnserve
# Install documentation.
dodoc CHANGES COMMITTERS README
dodoc tools/xslt/svnindex.{css,xsl}
rm -fr tools/xslt
# Install Vim syntax files.
if use vim-syntax; then
insinto /usr/share/vim/vimfiles/syntax
doins contrib/client-side/vim/svn.vim
fi
rm -f contrib/client-side/vim/svn.vim
# Install Emacs Lisps.
if use emacs; then
elisp-install ${PN} contrib/client-side/emacs/{dsvn,psvn}.{el,elc} doc/svn-doc.{el,elc} doc/tools/svnbook.{el,elc} || die "Installation of Emacs modules failed"
elisp-install ${PN}/compat contrib/client-side/emacs/vc-svn.{el,elc} || die "Installation of Emacs modules failed"
touch "${D}${SITELISP}/${PN}/compat/.nosearch"
elisp-site-file-install "${FILESDIR}/70svn-gentoo.el" || die "Installation of Emacs site-init file failed"
fi
rm -fr contrib/client-side/emacs
# Install extra files.
if use extras; then
einfo
einfo "Installation of contrib and tools"
einfo
cat << EOF > 80subversion-extras
PATH="/usr/$(get_libdir)/subversion/bin"
ROOTPATH="/usr/$(get_libdir)/subversion/bin"
EOF
doenvd 80subversion-extras
emake DESTDIR="${D}" contribdir="/usr/$(get_libdir)/subversion/bin" install-contrib || die "Installation of contrib failed"
emake DESTDIR="${D}" toolsdir="/usr/$(get_libdir)/subversion/bin" install-tools || die "Installation of tools failed"
find contrib tools "(" -name "*.bat" -o -name "*.in" -o -name ".libs" ")" -print0 | xargs -0 rm -fr
rm -fr contrib/client-side/svn-push
rm -fr contrib/server-side/svnstsw
rm -fr tools/client-side/svnmucc
rm -fr tools/server-side/{svn-populate-node-origins-index,svnauthz-validate}*
rm -fr tools/{buildbot,dev,diff,po}
insinto /usr/share/${PN}
doins -r contrib tools
fi
if use doc; then
einfo
einfo "Installation of Subversion HTML documentation"
einfo
dohtml -r doc/doxygen/html/* || die "Installation of Subversion HTML documentation failed"
insinto /usr/share/doc/${PF}
doins -r notes
ecompressdir /usr/share/doc/${PF}/notes
# if use ruby; then
# emake DESTDIR="${D}" install-swig-rb-doc
# fi
if use java; then
java-pkg_dojavadoc doc/javadoc
fi
fi
}
pkg_preinst() {
# Compare versions of Berkeley DB, bug 122877.
if use berkdb && [[ -f "${ROOT}usr/bin/svn" ]]; then
OLD_BDB_VERSION="$(scanelf -nq "${ROOT}usr/$(get_libdir)/libsvn_subr-1.so.0" | grep -Eo "libdb-[[:digit:]]+\.[[:digit:]]+" | sed -e "s/libdb-\(.*\)/\1/")"
NEW_BDB_VERSION="$(scanelf -nq "${D}usr/$(get_libdir)/libsvn_subr-1.so.0" | grep -Eo "libdb-[[:digit:]]+\.[[:digit:]]+" | sed -e "s/libdb-\(.*\)/\1/")"
if [[ "${OLD_BDB_VERSION}" != "${NEW_BDB_VERSION}" ]]; then
CHANGED_BDB_VERSION="1"
fi
fi
}
pkg_postinst() {
use emacs && elisp-site-regen
use perl && perl-module_pkg_postinst
if use ctypes-python; then
python_mod_optimize "$(python_get_sitedir)/csvn"
fi
elog "Subversion Server Notes"
elog "-----------------------"
elog
elog "If you intend to run a server, a repository needs to be created using"
elog "svnadmin (see man svnadmin) or the following command to create it in"
elog "${SVN_REPOS_LOC}:"
elog
elog " emerge --config =${CATEGORY}/${PF}"
elog
elog "Subversion has multiple server types, take your pick:"
elog
elog " - svnserve daemon: "
elog " 1. Edit /etc/conf.d/svnserve"
elog " 2. Fix the repository permissions (see \"Fixing the repository permissions\")"
elog " 3. Start daemon: /etc/init.d/svnserve start"
elog " 4. Make persistent: rc-update add svnserve default"
elog
elog " - svnserve via xinetd:"
elog " 1. Edit /etc/xinetd.d/svnserve (remove disable line)"
elog " 2. Fix the repository permissions (see \"Fixing the repository permissions\")"
elog " 3. Restart xinetd.d: /etc/init.d/xinetd restart"
elog
elog " - svn over ssh:"
elog " 1. Fix the repository permissions (see \"Fixing the repository permissions\")"
elog " Additionally run:"
elog " groupadd svnusers"
elog " chown -R root:svnusers ${SVN_REPOS_LOC}/repos"
elog " 2. Create an svnserve wrapper in /usr/local/bin to set the umask you"
elog " want, for example:"
elog " #!/bin/bash"
elog " . /etc/conf.d/svnserve"
elog " umask 007"
elog " exec /usr/bin/svnserve \${SVNSERVE_OPTS} \"\$@\""
elog
if use apache2; then
elog " - http-based server:"
elog " 1. Edit /etc/conf.d/apache2 to include both \"-D DAV\" and \"-D SVN\""
elog " 2. Create an htpasswd file:"
elog " htpasswd2 -m -c ${SVN_REPOS_LOC}/conf/svnusers USERNAME"
elog " 3. Fix the repository permissions (see \"Fixing the repository permissions\")"
elog " 4. Restart Apache: /etc/init.d/apache2 restart"
elog
fi
elog " Fixing the repository permissions:"
elog " chmod -Rf go-rwx ${SVN_REPOS_LOC}/conf"
elog " chmod -Rf g-w,o-rwx ${SVN_REPOS_LOC}/repos"
elog " chmod -Rf g+rw ${SVN_REPOS_LOC}/repos/db"
elog " chmod -Rf g+rw ${SVN_REPOS_LOC}/repos/locks"
elog
elog "If you intend to use svn-hot-backup, you can specify the number of"
elog "backups to keep per repository by specifying an environment variable."
elog "If you want to keep e.g. 2 backups, do the following:"
elog "echo '# hot-backup: Keep that many repository backups around' > /etc/env.d/80subversion"
elog "echo 'SVN_HOTBACKUP_BACKUPS_NUMBER=2' >> /etc/env.d/80subversion"
elog
elog "Subversion contains support for the use of Memcached"
elog "to cache data of FSFS repositories."
elog "You should install \"net-misc/memcached\", start memcached"
elog "and configure your FSFS repositories, if you want to use this feature."
elog "See the documentation for details."
elog
epause 6
if [[ -n "${CHANGED_BDB_VERSION}" ]]; then
ewarn "You upgraded from an older version of Berkeley DB and may experience"
ewarn "problems with your repository. Run the following commands as root to fix it:"
ewarn " db4_recover -h ${SVN_REPOS_LOC}/repos"
ewarn " chown -Rf apache:apache ${SVN_REPOS_LOC}/repos"
fi
}
pkg_postrm() {
use emacs && elisp-site-regen
use perl && perl-module_pkg_postrm
if use ctypes-python; then
python_mod_cleanup "$(python_get_sitedir)/csvn"
fi
}
pkg_config() {
einfo ">>> Initializing the database in ${ROOT}${SVN_REPOS_LOC} ..."
if [[ -e "${ROOT}${SVN_REPOS_LOC}/repos" ]]; then
echo "A Subversion repository already exists and I will not overwrite it."
echo "Delete \"${ROOT}${SVN_REPOS_LOC}/repos\" first if you're sure you want to have a clean version."
else
mkdir -p "${ROOT}${SVN_REPOS_LOC}/conf"
einfo ">>> Populating repository directory ..."
# Create initial repository.
"${ROOT}usr/bin/svnadmin" create "${ROOT}${SVN_REPOS_LOC}/repos"
einfo ">>> Setting repository permissions ..."
SVNSERVE_USER="$(. "${ROOT}etc/conf.d/svnserve"; echo "${SVNSERVE_USER}")"
SVNSERVE_GROUP="$(. "${ROOT}etc/conf.d/svnserve"; echo "${SVNSERVE_GROUP}")"
if use apache2; then
[[ -z "${SVNSERVE_USER}" ]] && SVNSERVE_USER="apache"
[[ -z "${SVNSERVE_GROUP}" ]] && SVNSERVE_GROUP="apache"
else
[[ -z "${SVNSERVE_USER}" ]] && SVNSERVE_USER="svn"
[[ -z "${SVNSERVE_GROUP}" ]] && SVNSERVE_GROUP="svnusers"
enewgroup "${SVNSERVE_GROUP}"
enewuser "${SVNSERVE_USER}" -1 -1 "${SVN_REPOS_LOC}" "${SVNSERVE_GROUP}"
fi
chown -Rf "${SVNSERVE_USER}:${SVNSERVE_GROUP}" "${ROOT}${SVN_REPOS_LOC}/repos"
chmod -Rf go-rwx "${ROOT}${SVN_REPOS_LOC}/conf"
chmod -Rf o-rwx "${ROOT}${SVN_REPOS_LOC}/repos"
fi
}