diff --git a/dev-util/subversion/Manifest b/dev-util/subversion/Manifest new file mode 100644 index 0000000..8b4cffb --- /dev/null +++ b/dev-util/subversion/Manifest @@ -0,0 +1,10 @@ +AUX 1.5.0/70svn-gentoo.el 443 RMD160 300189eea80dfefa0f2a8479f67d255b39fd2adb SHA1 245b5ed611755276016bc76de2eabdc117e2c511 SHA256 23aa9effa5aea7ae73d14ae4df1a9269135137a5e483b4ff2a501dc130d7d1be +AUX 1.5.0/80subversion-extras 62 RMD160 c334b15a86eaf19129afa5b62558dd47504a4e3d SHA1 ba05e978e7ff7b047ec99225e4d932036c340d26 SHA256 758d07cf161fff5e0afef5791dca641d3af58192ad1e4874c5f5c2c285c1149d +AUX 1.5.0/disable-unneeded-linking.patch 2409 RMD160 0d7c34cc83eff7d08369128762ed714fabcd1dde SHA1 92b80f6cb30fe569f79368aea66027a6da022c53 SHA256 2ef8fcd9fabfd1a71bdd50e1156cb9d421a7008fccd73b7ae3536e9a30886231 +AUX svnserve.confd 323 RMD160 cbf4d810d9f41bac1611004741170d1047cbeef0 SHA1 39e922bc777ba847eb85d421d92f560f84b895b5 SHA256 90d3e2532715a6230ebf65023566a6591eed4b3fc12abbca0d2fb7949e146006 +AUX svnserve.confd2 320 RMD160 dc1e74d06d9bd3eeb1a8dfd20aacebecd8378abb SHA1 557191219c3afa90126b8a2bfe7dd62b8a09eb82 SHA256 c70655c073dc06f538c5acdbcd49e216f4be2c859ce395bdf78757a1eeccab00 +AUX svnserve.initd 817 RMD160 59f4e8e983d4595b7c27615889a9c0809d015a18 SHA1 483b47512fb444c0f752ad4eb6c3252f659a967e SHA256 6b483e211b5c311079605e246fca9228c7e5762d27a023fa4c4529fdaa766b08 +AUX svnserve.xinetd 332 RMD160 c2fc4eb02da7e7405756fce650b8897f0a9da7f7 SHA1 d7d478fc257a40626888f9b12ee218df55dac570 SHA256 267f30c78ef6428aeeb97d3c64c06b9acfba4bc624766fc3c6a6d2c4133799a2 +AUX vc-svn.el 16847 RMD160 8665b9a34c8fd9acae40e18aac33026aff3a39d7 SHA1 4d1a5a9331ff96e943244a6d5538e4f0abeac9e7 SHA256 b4979d5df9fba02dbc8ad71d813229222e95ee1e8e89dec3060611d2d6be87aa +DIST subversion-1.5.6.tar.bz2 4946600 RMD160 5883f925e19e719c8656b5488ed9b00c0f7c3a79 SHA1 774b6dbd4245c36e86289393e651e36dedf17018 SHA256 f701fe75fecc43d9aecf717260ca18661469128a2f28a57c7e6672f3f64f46c2 +EBUILD subversion-1.5.6.ebuild 13395 RMD160 825eba60cfd542901cb956e16b51c0b46158daa0 SHA1 15da1740fe1a5ad200399687c8acc29142dbfc2a SHA256 266bba838afc7f6084492ef4764979b0662ab742cd036d23bc2033f65a92752b diff --git a/dev-util/subversion/files/1.5.0/70svn-gentoo.el b/dev-util/subversion/files/1.5.0/70svn-gentoo.el new file mode 100644 index 0000000..e5721e2 --- /dev/null +++ b/dev-util/subversion/files/1.5.0/70svn-gentoo.el @@ -0,0 +1,13 @@ + +;;; 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) diff --git a/dev-util/subversion/files/1.5.0/80subversion-extras b/dev-util/subversion/files/1.5.0/80subversion-extras new file mode 100644 index 0000000..d3a741c --- /dev/null +++ b/dev-util/subversion/files/1.5.0/80subversion-extras @@ -0,0 +1,2 @@ +ROOTPATH=/usr/lib/subversion/bin +PATH=/usr/lib/subversion/bin diff --git a/dev-util/subversion/files/1.5.0/disable-unneeded-linking.patch b/dev-util/subversion/files/1.5.0/disable-unneeded-linking.patch new file mode 100644 index 0000000..6838cad --- /dev/null +++ b/dev-util/subversion/files/1.5.0/disable-unneeded-linking.patch @@ -0,0 +1,81 @@ +--- configure.ac ++++ configure.ac +@@ -234,6 +234,8 @@ + AC_DEFINE_UNQUOTED(SVN_FS_WANT_DB_PATCH, $SVN_FS_WANT_DB_PATCH, + [The desired patch version for the Berkeley DB]) + ++AC_SUBST(SVN_DB_LIBS) ++ + SVN_LIB_SASL + + if test "$svn_lib_sasl" = "yes"; then +--- Makefile.in ++++ Makefile.in +@@ -40,9 +40,10 @@ + NEON_LIBS = @NEON_LIBS@ + SVN_APR_LIBS = @SVN_APR_LIBS@ + SVN_APRUTIL_LIBS = @SVN_APRUTIL_LIBS@ +-SVN_DB_LIBS = +-SVN_SERF_LIBS = @SVN_SERF_LIBS@ ++SVN_DB_LIBS = @SVN_DB_LIBS@ + SVN_SASL_LIBS = @SVN_SASL_LIBS@ ++SVN_SERF_LIBS = @SVN_SERF_LIBS@ ++SVN_XML_LIBS = -lexpat + SVN_ZLIB_LIBS = @SVN_ZLIB_LIBS@ + + LIBS = @LIBS@ +--- build/ac-macros/aprutil.m4 ++++ build/ac-macros/aprutil.m4 +@@ -72,16 +72,14 @@ + AC_MSG_ERROR([apu-config --includes 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`" +--- build/ac-macros/berkeley-db.m4 ++++ build/ac-macros/berkeley-db.m4 +@@ -218,5 +218,6 @@ + + CPPFLAGS="$svn_lib_berkeley_db_try_save_cppflags" + LIBS="$svn_lib_berkeley_db_try_save_libs" ++ SVN_DB_LIBS="$svn_apu_bdb_lib" + ] + ) diff --git a/dev-util/subversion/files/svnserve.confd b/dev-util/subversion/files/svnserve.confd new file mode 100644 index 0000000..832d375 --- /dev/null +++ b/dev-util/subversion/files/svnserve.confd @@ -0,0 +1,10 @@ +# 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" diff --git a/dev-util/subversion/files/svnserve.confd2 b/dev-util/subversion/files/svnserve.confd2 new file mode 100644 index 0000000..b487a40 --- /dev/null +++ b/dev-util/subversion/files/svnserve.confd2 @@ -0,0 +1,10 @@ +# 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" diff --git a/dev-util/subversion/files/svnserve.initd b/dev-util/subversion/files/svnserve.initd new file mode 100644 index 0000000..7b7c4c8 --- /dev/null +++ b/dev-util/subversion/files/svnserve.initd @@ -0,0 +1,26 @@ +#!/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 $? +} diff --git a/dev-util/subversion/files/svnserve.xinetd b/dev-util/subversion/files/svnserve.xinetd new file mode 100644 index 0000000..e29f906 --- /dev/null +++ b/dev-util/subversion/files/svnserve.xinetd @@ -0,0 +1,14 @@ +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 +} diff --git a/dev-util/subversion/files/vc-svn.el b/dev-util/subversion/files/vc-svn.el new file mode 100644 index 0000000..e591820 --- /dev/null +++ b/dev-util/subversion/files/vc-svn.el @@ -0,0 +1,414 @@ +;;;; vc-svn.el --- a VC backend for Subversion +;;;; Jim Blandy --- 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) diff --git a/dev-util/subversion/subversion-1.5.6.ebuild b/dev-util/subversion/subversion-1.5.6.ebuild new file mode 100644 index 0000000..471d9a3 --- /dev/null +++ b/dev-util/subversion/subversion-1.5.6.ebuild @@ -0,0 +1,414 @@ +# Copyright 1999-2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/dev-util/subversion/subversion-1.5.6.ebuild,v 1.8 2009/08/05 19:48:53 arfrever Exp $ + +EAPI="1" +WANT_AUTOMAKE="none" + +inherit autotools bash-completion confutils 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="~mips ~sparc-fbsd ~amd64" +IUSE="apache2 berkdb debug doc +dso emacs extras java nls perl python ruby sasl vim-syntax +webdav-neon webdav-serf" +RESTRICT="test" + +CDEPEND=">=dev-libs/apr-1.2.8 + >=dev-libs/apr-util-1.2.8 + dev-libs/expat + sys-libs/zlib + berkdb? ( =sys-libs/db-4* ) + emacs? ( virtual/emacs ) + ruby? ( >=dev-lang/ruby-1.8.2 ) + sasl? ( dev-libs/cyrus-sasl ) + webdav-neon? ( >=net-misc/neon-0.28 ) + webdav-serf? ( net-libs/serf )" + +RDEPEND="${CDEPEND} + java? ( >=virtual/jre-1.5 ) + nls? ( virtual/libintl ) + perl? ( dev-perl/URI )" + +DEPEND="${CDEPEND} + doc? ( app-doc/doxygen ) + java? ( >=virtual/jdk-1.5 ) + nls? ( sys-devel/gettext )" + +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() { + depend.apache_pkg_setup + confutils_use_depend_built_with_all berkdb dev-libs/apr-util berkdb + 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}/${PF} webdav-neon webdav-serf" + ewarn + ebeep + fi +} + +src_unpack() { + unpack ${A} + cd "${S}" + + epatch "${FILESDIR}"/1.5.0/disable-unneeded-linking.patch + + sed -i \ + -e "s/\(BUILD_RULES=.*\) bdb-test\(.*\)/\1\2/g" \ + -e "s/\(BUILD_RULES=.*\) test\(.*\)/\1\2/g" configure.ac + + sed -e 's:@bindir@/svn-contrib:@libdir@/subversion/bin:' \ + -e 's:@bindir@/svn-tools:@libdir@/subversion/bin:' \ + -i Makefile.in + + eautoconf + elibtoolize +} + +src_compile() { + local myconf + + if use python || use perl || use ruby; then + myconf="${myconf} --with-swig" + else + myconf="${myconf} --without-swig" + fi + + if use debug; then + append-cppflags -DSVN_DEBUG -DAP_DEBUG + fi + + append-flags -fno-strict-aliasing + + econf ${myconf} \ + $(use_with apache2 apxs "${APXS}") \ + $(use_with berkdb berkeley-db) \ + $(use_enable dso runtime-module-search) \ + $(use_enable java javahl) \ + $(use_with java jdk "${JAVA_HOME}") \ + $(use_enable nls) \ + $(use_with sasl) \ + $(use_with webdav-neon neon /usr) \ + $(use_with webdav-serf serf /usr) \ + --with-apr=/usr/bin/apr-1-config \ + --with-apr-util=/usr/bin/apu-1-config \ + --disable-experimental-libtool \ + --without-jikes \ + --without-junit \ + --disable-mod-activation \ + --disable-neon-version-check + + emake local-all || die "Building of core Subversion failed" + + if use python; then + emake swig-py || die "Building of Subversion Python bindings failed" + fi + + if use perl; then + emake -j1 swig-pl || die "Building of Subversion Perl bindings failed" + fi + + if use ruby; then + emake swig-rb || die "Building of Subversion Ruby bindings failed" + fi + + if use java; then + make JAVAC_FLAGS="$(java-pkg_javac-args) -encoding iso8859-1" javahl \ + || die "Building of Subversion JavaHL library failed" + fi + + if use emacs; then + 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 + emake contrib || die "Building of contrib failed" + emake tools || die "Building of tools failed" + fi + + if use doc; then + doxygen doc/doxygen.conf || die "Building of Subversion HTML documentation failed" + + if use java; then + emake doc-javahl || die "Building of Subversion JavaHL library HTML documentation failed" + fi + fi +} + +src_install() { + python_version + PYTHON_DIR=/usr/$(get_libdir)/python${PYVER} + + emake -j1 DESTDIR="${D}" local-install || die "Installation of core of Subversion failed" + + if use python; then + emake -j1 DESTDIR="${D}" DISTUTIL_PARAM="--prefix=${D}" LD_LIBRARY_PATH="-L${D}/usr/$(get_libdir)" install-swig-py \ + || die "Installation of Subversion Python bindings failed" + + # Move Python bindings. + dodir "${PYTHON_DIR}/site-packages" + mv "${D}"/usr/$(get_libdir)/svn-python/svn "${D}${PYTHON_DIR}/site-packages" + mv "${D}"/usr/$(get_libdir)/svn-python/libsvn "${D}${PYTHON_DIR}/site-packages" + rm -Rf "${D}"/usr/$(get_libdir)/svn-python + fi + + if use perl; then + emake -j1 DESTDIR="${D}" INSTALLDIRS="vendor" install-swig-pl || die "Installation of Subversion Perl bindings failed" + fixlocalpod + fi + + if use ruby; then + emake -j1 DESTDIR="${D}" install-swig-rb || die "Installation of Subversion Ruby bindings failed" + fi + + if use java; then + 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 -Rf "${D}"/usr/$(get_libdir)/svn-javahl/*.jar + fi + + # Install Apache module configuration. + if use apache2; then + dodir "${APACHE_MODULES_CONFDIR}" + cat <"${D}/${APACHE_MODULES_CONFDIR}"/47_mod_dav_svn.conf + +LoadModule dav_svn_module modules/mod_dav_svn.so + +LoadModule authz_svn_module modules/mod_authz_svn.so + + +# Example configuration: +# +# DAV svn +# SVNPath ${SVN_REPOS_LOC}/repos +# AuthType Basic +# AuthName "Subversion repository" +# AuthUserFile ${SVN_REPOS_LOC}/conf/svnusers +# Require valid-user +# + +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 + newbin contrib/client-side/svn_load_dirs/svn_load_dirs.pl svn-load-dirs + 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 + dohtml www/hacking.html + 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}"/1.5.0/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 + doenvd "${FILESDIR}"/1.5.0/80subversion-extras + + emake DESTDIR="${D}" install-contrib || die "Installation of contrib failed" + emake DESTDIR="${D}" 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,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 + dohtml doc/doxygen/html/* + + insinto /usr/share/doc/${PF} + doins -r notes + ecompressdir /usr/share/doc/${PF}/notes + + 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 + + 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 + + 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 +} + +pkg_config() { + if [[ ! -x "${ROOT}usr/bin/svnadmin" ]] ; then + die "You seem to only have built the Subversion client" + fi + + 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 +}