- update to 1.3.0 (#176833)

- update to psvn.el r17921 Stefan Reichoer
This commit is contained in:
jorton 2006-01-04 13:07:01 +00:00
parent 0f2863f8f6
commit 1cd9ea3eab
8 changed files with 477 additions and 225 deletions

View File

@ -1,2 +1,2 @@
subversion-1.2.1.tar.gz
subversion-1.2.1
subversion-1.3.0.tar.gz
subversion-1.2.3-3.src.rpm subversion-1.2.3-5.src.rpm

View File

@ -1 +1 @@
http://subversion.tigris.org/tarballs
http://subversion.tigris.org/downloads

264
psvn.el
View File

@ -2,7 +2,7 @@
;; Copyright (C) 2002-2005 by Stefan Reichoer
;; Author: Stefan Reichoer, <stefan@xsteve.at>
;; $Id: psvn.el 16917 2005-10-22 19:26:44Z xsteve $
;; $Id: psvn.el 17921 2005-12-22 23:06:36Z xsteve $
;; psvn.el is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
@ -48,9 +48,10 @@
;; A - svn-status-add-file-recursively run 'svn add'
;; + - svn-status-make-directory run 'svn mkdir'
;; R - svn-status-mv run 'svn mv'
;; C-d - svn-status-rm run 'svn rm'
;; D - svn-status-rm run 'svn rm'
;; M-c - svn-status-cleanup run 'svn cleanup'
;; b - svn-status-blame run 'svn blame'
;; X e - svn-status-export run 'svn export'
;; RET - svn-status-find-file-or-examine-directory
;; ^ - svn-status-examine-parent
;; ~ - svn-status-get-specific-revision
@ -115,16 +116,6 @@
;; Or you can check it out from the subversion repository:
;; svn co http://svn.collab.net/repos/svn/trunk/contrib/client-side/psvn psvn
;; "svn-" is the package prefix used in psvn.el. There are also longer
;; prefixes which clarify the code and help symbol completion, but they
;; are not intended to prevent name clashes with other packages. All
;; interactive commands meant to be used only in a specific mode should
;; have names beginning with the name of that mode: for example,
;; "svn-status-add-file" in "svn-status-mode". "psvn" should be used
;; only in names of files, customization groups, and features. If SVK
;; support is ever added, it should use "svn-svk-" when no existing
;; prefix is applicable.
;; TODO:
;; * shortcut for svn propset svn:keywords "Date" psvn.el
;; * docstrings for the functions
@ -133,6 +124,10 @@
;; * finish svn-status-property-set
;; * Add repository browser
;; * Improve support for svn blame
;; * Get rid of all byte-compiler warnings
;; * SVK working copy support
;; * multiple independent buffers in svn-status-mode
;; There are "TODO" comments in other parts of this file as well.
;; Overview over the implemented/not (yet) implemented svn sub-commands:
;; * add implemented
@ -144,7 +139,7 @@
;; * copy (cp)
;; * delete (del, remove, rm) implemented
;; * diff (di) implemented
;; * export
;; * export implemented
;; * help (?, h)
;; * import
;; * info implemented
@ -170,9 +165,27 @@
;; Comments / suggestions and bug reports are welcome!
;; Development notes
;; -----------------
;; "svn-" is the package prefix used in psvn.el. There are also longer
;; prefixes which clarify the code and help symbol completion, but they
;; are not intended to prevent name clashes with other packages. All
;; interactive commands meant to be used only in a specific mode should
;; have names beginning with the name of that mode: for example,
;; "svn-status-add-file" in "svn-status-mode". "psvn" should be used
;; only in names of files, customization groups, and features. If SVK
;; support is ever added, it should use "svn-svk-" when no existing
;; prefix is applicable.
;; Many of the variables marked as `risky-local-variable' are probably
;; impossible to abuse, as the commands that read them are used only in
;; buffers that are not visiting any files. Better safe than sorry.
;;; Code:
(require 'easymenu)
(require 'diff-mode nil t)
;;; user setable variables
(defcustom svn-status-verbose t
@ -185,6 +198,7 @@ This can be either absolute, or relative to the default directory
of the *svn-log-edit* buffer."
:type 'file
:group 'psvn)
(put 'svn-log-edit-file-name 'risky-local-variable t)
(defcustom svn-log-edit-insert-files-to-commit t
"*Insert the filelist to commit in the *svn-log* buffer"
:type 'boolean
@ -220,6 +234,11 @@ Possible values are: commit, revert."
(const revert))
:group 'psvn)
(defcustom svn-status-preserve-window-configuration nil
"*Try to preserve the window configuration."
:type 'boolean
:group 'psvn)
(defcustom svn-status-negate-meaning-of-arg-commands '()
"*List of operations that should use a negated meaning of the prefix argument.
The supported functions are `svn-status' and `svn-status-set-user-mark'."
@ -233,17 +252,22 @@ This can be either absolute or looked up on `exec-path'."
;; Don't use (file :must-match t). It doesn't know about `exec-path'.
:type 'file
:group 'psvn)
(put 'svn-status-svn-executable 'risky-local-variable t)
(defcustom svn-status-default-export-directory "~/" "*The default directory that is suggested svn export."
:type 'file
:group 'psvn)
;; TODO: bind `process-environment' instead of running env?
;; That would probably work more reliably in Windows.
(defcustom svn-status-svn-environment-var-list '()
"*A list of environment variables that should be set for that svn process.
If you set that variable, svn is called with that environment variables set.
That is done via the env program.
Each element is either a string \"VARIABLE=VALUE\" which will be added to
the environment when svn is run, or just \"VARIABLE\" which causes that
variable to be entirely removed from the environment.
You could set it for example to '(\"LANG=C\")"
:type '(repeat (string :valid-regexp "=" :value "LANG=C"))
You could set this for example to '(\"LANG=C\")"
:type '(repeat string)
:group 'psvn)
(put 'svn-status-svn-environment-var-list 'risky-local-variable t)
(defcustom svn-browse-url-function nil
;; If the user hasn't changed `svn-browse-url-function', then changing
@ -272,6 +296,8 @@ Any non-nil value overrides that variable, with the same syntax."
:value (("." . browse-url-default-browser))))
:link '(emacs-commentary-link "browse-url")
:group 'psvn)
;; (put 'svn-browse-url-function 'risky-local-variable t)
;; already implied by "-function" suffix
(defcustom svn-status-window-alist
'((diff "*svn-diff*") (log "*svn-log*") (info t) (blame t) (proplist t) (update t))
@ -335,6 +361,7 @@ Otherwise: Don't display a header line"
\(used in `svn-status-show-svn-log'; override these by giving prefixes\)."
:type '(repeat string)
:group 'psvn)
(put 'svn-status-default-log-arguments 'risky-local-variable t)
(defcustom svn-status-default-commit-arguments '()
"*List of arguments to pass to svn commit.
@ -345,6 +372,7 @@ Subversion and the operating system may treat that as a file name
equivalent to \".\", so you would commit more than you intended."
:type '(repeat string)
:group 'psvn)
(put 'svn-status-default-commit-arguments 'risky-local-variable t)
(defcustom svn-status-default-diff-arguments '()
"*A list of arguments that is passed to the svn diff command.
@ -352,6 +380,7 @@ If you'd like to suppress whitespace changes use the following value:
'(\"--diff-cmd\" \"diff\" \"-x\" \"-wbBu\")"
:type '(repeat string)
:group 'psvn)
(put 'svn-status-default-diff-arguments 'risky-local-variable t)
(defvar svn-trac-project-root nil
"Path for an eventual existing trac issue tracker.
@ -366,6 +395,9 @@ This can be set with \\[svn-status-set-module-name].")
;;; hooks
(defvar svn-log-edit-mode-hook nil "Hook run when entering `svn-log-edit-mode'.")
(defvar svn-log-edit-done-hook nil "Hook run after commiting files via svn.")
;; (put 'svn-log-edit-mode-hook 'risky-local-variable t)
;; (put 'svn-log-edit-done-hook 'risky-local-variable t)
;; already implied by "-hook" suffix
(defvar svn-status-coding-system nil
"A special coding system is needed for the output of svn.
@ -441,6 +473,9 @@ This is always set together with `svn-status-recursive-commit'.")
(defvar svn-status-recursive-commit nil
"Non-nil if the next commit should be recursive.
This is always set together with `svn-status-files-to-commit'.")
(defvar svn-log-edit-update-log-entry nil
"Revision number whose log entry is being edited.
This is nil if the log entry is for a new commit.")
(defvar svn-status-pre-commit-window-configuration nil)
(defvar svn-status-pre-propedit-window-configuration nil)
(defvar svn-status-head-revision nil)
@ -457,16 +492,49 @@ This is always set together with `svn-status-files-to-commit'.")
(expand-file-name
(or
(when (boundp 'temporary-file-directory) temporary-file-directory) ;emacs
(when (fboundp 'temp-directory) (temp-directory)) ;xemacs
;; XEmacs 21.4.17 can return "/tmp/kalle" from (temp-directory).
;; `file-name-as-directory' adds a slash so we can append a file name.
(when (fboundp 'temp-directory) (file-name-as-directory (temp-directory)))
"/tmp/")) "The directory that is used to store temporary files for psvn.")
;; Because `temporary-file-directory' is not a risky local variable in
;; GNU Emacs 22.0.51, we don't mark `svn-status-temp-dir' as such either.
(defvar svn-temp-suffix (make-temp-name "."))
(put 'svn-temp-suffix 'risky-local-variable t)
(defvar svn-status-temp-file-to-remove nil)
(put 'svn-status-temp-file-to-remove 'risky-local-variable t)
(defvar svn-status-temp-arg-file (concat svn-status-temp-dir "svn.arg" svn-temp-suffix))
(put 'svn-status-temp-arg-file 'risky-local-variable t)
(defvar svn-status-options nil)
(defvar svn-status-remote)
(defvar svn-status-commit-rev-number nil)
(defvar svn-status-operated-on-dot nil)
(defvar svn-status-elided-list nil)
(defvar svn-status-custom-hide-function nil)
;; (put 'svn-status-custom-hide-function 'risky-local-variable t)
;; already implied by "-function" suffix
(defvar svn-status-get-specific-revision-file-info)
(defvar svn-status-last-output-buffer-name)
(defvar svn-transient-buffers)
(defvar svn-ediff-windows)
(defvar svn-ediff-result)
;; Emacs 21 defines these in ediff-init.el but it seems more robust
;; to just declare the variables here than try to load that file.
;; It is Ediff's job to declare these as risky-local-variable if needed.
(defvar ediff-buffer-A)
(defvar ediff-buffer-B)
(defvar ediff-buffer-C)
(defvar ediff-quit-hook)
;; Ditto for log-edit.el.
(defvar log-edit-initial-files)
(defvar log-edit-callback)
(defvar log-edit-listfun)
;; Ediff does not use this variable in GNU Emacs 20.7, GNU Emacs 21.4,
;; nor XEmacs 21.4.17. However, pcl-cvs (a.k.a. pcvs) does.
;; TODO: Check if this should be moved into the "svn-" namespace.
(defvar ediff-after-quit-destination-buffer)
;; That is an example for the svn-status-custom-hide-function:
;; (setq svn-status-custom-hide-function 'svn-status-hide-pyc-files)
@ -587,7 +655,7 @@ Otherwise, return \"\"."
(if (fboundp 'point-at-eol) 'point-at-eol 'line-end-position))
(defalias 'svn-point-at-bol
(if (fboundp 'point-at-bol) 'point-at-bol 'line-beginning-position))
(defalias 'svn-read-directory-name
(defalias 'svn-read-directory-name
(if (fboundp 'read-directory-name) 'read-directory-name 'read-file-name))
(eval-when-compile
@ -643,6 +711,7 @@ Use this instead of `alist', for XEmacs 21.4 compatibility."
(defvar svn-global-keymap nil "Global keymap for psvn.el.
To bind this to a different key, customize `svn-status-prefix-key'.")
(put 'svn-global-keymap 'risky-local-variable t)
(when (not svn-global-keymap)
(setq svn-global-keymap (make-sparse-keymap))
(define-key svn-global-keymap (kbd "s") 'svn-status-this-directory)
@ -651,8 +720,18 @@ To bind this to a different key, customize `svn-status-prefix-key'.")
(define-key svn-global-keymap (kbd "=") 'svn-status-show-svn-diff)
(define-key svn-global-keymap (kbd "c") 'svn-status-commit))
(defvar svn-status-diff-mode-map ()
"Keymap used in `svn-status-diff-mode' for additional commands that are not defined in diff-mode.")
(put 'svn-status-diff-mode-map 'risky-local-variable t) ;for Emacs 20.7
(when (not svn-status-diff-mode-map)
(setq svn-status-diff-mode-map (copy-keymap diff-mode-shared-map))
(define-key svn-status-diff-mode-map [?w] 'svn-status-diff-save-current-defun-as-kill))
(defvar svn-global-trac-map ()
"Subkeymap used in `svn-global-keymap' for trac issue tracker commands.")
(put 'svn-global-trac-map 'risky-local-variable t) ;for Emacs 20.7
(when (not svn-global-trac-map)
(setq svn-global-trac-map (make-sparse-keymap))
(define-key svn-global-trac-map (kbd "t") 'svn-trac-browse-timeline)
@ -752,6 +831,25 @@ If ARG then pass the -u argument to `svn status'."
(svn-status dir)
(error "%s is not a directory" dir))))
(defun svn-process-environment ()
"Construct the environment for the svn process.
It is a combination of `svn-status-svn-environment-var-list' and
the usual `process-environment'."
;; If there are duplicate elements in `process-environment', then GNU
;; Emacs 21.4 guarantees that the first one wins; but GNU Emacs 20.7
;; and XEmacs 21.4.17 don't document what happens. We'll just remove
;; any duplicates ourselves, then. This also gives us an opportunity
;; to handle the "VARIABLE" syntax that none of them supports.
(loop with found = '()
for elt in (append svn-status-svn-environment-var-list
process-environment)
for has-value = (string-match "=" elt)
for name = (substring elt 0 has-value)
unless (member name found)
do (push name found)
and when has-value
collect elt))
(defun svn-run-svn (run-asynchron clear-process-buffer cmdtype &rest arglist)
"Run svn with arguments ARGLIST.
@ -799,20 +897,29 @@ is prompted for give extra arguments, which are appended to ARGLIST."
(setq svn-status-mode-line-process-status (format " running %s" cmdtype))
(svn-status-update-mode-line)
(sit-for 0.1)
(when svn-status-svn-environment-var-list
(setq arglist (append svn-status-svn-environment-var-list
(list svn-status-svn-executable)
arglist))
(setq svn-exe "env"))
(if run-asynchron
(progn
;;(message "running asynchron: %s %S" svn-exe arglist)
(setq svn-proc (apply 'start-process "svn" proc-buf svn-exe arglist))
(let ((process-environment (svn-process-environment))
(process-connection-type nil))
;; Communicate with the subprocess via pipes rather
;; than via a pseudoterminal, so that if the svn+ssh
;; scheme is being used, SSH will not ask for a
;; passphrase via stdio; psvn.el is currently unable
;; to answer such prompts. Instead, SSH will run
;; x11-ssh-askpass if possible. If Emacs is being
;; run on a TTY without $DISPLAY, this will fail; in
;; such cases, the user should start ssh-agent and
;; then run ssh-add explicitly.
(setq svn-proc (apply 'start-process "svn" proc-buf svn-exe arglist)))
(set-process-sentinel svn-proc 'svn-process-sentinel)
(when svn-status-track-user-input
(set-process-filter svn-proc 'svn-process-filter)))
;;(message "running synchron: %s %S" svn-exe arglist)
(apply 'call-process svn-exe nil proc-buf nil arglist)
(let ((process-environment (svn-process-environment)))
;; `call-process' ignores `process-connection-type' and
;; never opens a pseudoterminal.
(apply 'call-process svn-exe nil proc-buf nil arglist))
(setq svn-status-mode-line-process-status "")
(svn-status-update-mode-line)))))
(error "You can only run one svn process at once!")))
@ -1125,14 +1232,22 @@ A and B must be line-info's."
(error (message "psvn: could not install menu")))
(defvar svn-status-mode-map () "Keymap used in `svn-status-mode' buffers.")
(put 'svn-status-mode-map 'risky-local-variable t) ;for Emacs 20.7
(defvar svn-status-mode-mark-map ()
"Subkeymap used in `svn-status-mode' for mark commands.")
(put 'svn-status-mode-mark-map 'risky-local-variable t) ;for Emacs 20.7
(defvar svn-status-mode-property-map ()
"Subkeymap used in `svn-status-mode' for property commands.")
(put 'svn-status-mode-property-map 'risky-local-variable t) ;for Emacs 20.7
(defvar svn-status-mode-options-map ()
"Subkeymap used in `svn-status-mode' for option commands.")
(put 'svn-status-mode-options-map 'risky-local-variable t) ;for Emacs 20.7
(defvar svn-status-mode-trac-map ()
"Subkeymap used in `svn-status-mode' for trac issue tracker commands.")
(put 'svn-status-mode-trac-map 'risky-local-variable t) ;for Emacs 20.7
(defvar svn-status-mode-extension-map ()
"Subkeymap used in `svn-status-mode' for some seldom used commands.")
(put 'svn-status-mode-extension-map 'risky-local-variable t) ;for Emacs 20.7
(when (not svn-status-mode-map)
(setq svn-status-mode-map (make-sparse-keymap))
@ -1203,6 +1318,8 @@ A and B must be line-info's."
(define-key svn-status-mode-map (kbd "C-n") 'svn-status-next-line)
(define-key svn-status-mode-map (kbd "C-p") 'svn-status-previous-line)
(define-key svn-status-mode-map (kbd "n") 'svn-status-next-line)
(define-key svn-status-mode-map (kbd "p") 'svn-status-previous-line)
(define-key svn-status-mode-map (kbd "<down>") 'svn-status-next-line)
(define-key svn-status-mode-map (kbd "<up>") 'svn-status-previous-line)
(define-key svn-status-mode-map (kbd "C-x C-j") 'svn-status-dired-jump)
@ -1240,6 +1357,7 @@ A and B must be line-info's."
(setq svn-status-mode-extension-map (make-sparse-keymap))
(define-key svn-status-mode-extension-map (kbd "v") 'svn-status-resolved)
(define-key svn-status-mode-extension-map (kbd "X") 'svn-status-resolve-conflicts)
(define-key svn-status-mode-extension-map (kbd "e") 'svn-status-export)
(define-key svn-status-mode-map (kbd "X") svn-status-mode-extension-map))
(when (not svn-status-mode-options-map)
(setq svn-status-mode-options-map (make-sparse-keymap))
@ -1276,6 +1394,7 @@ A and B must be line-info's."
["svn mkdir..." svn-status-make-directory t]
["svn mv..." svn-status-mv t]
["svn rm..." svn-status-rm t]
["svn export..." svn-status-export t]
["Up Directory" svn-status-examine-parent t]
["Elide Directory" svn-status-toggle-elide t]
["svn revert" svn-status-revert t]
@ -2374,8 +2493,9 @@ Consider svn-status-window-alist to choose the buffer name."
(when svn-status-last-output-buffer-name
(if window-mode
(progn
(when (string= (buffer-name) svn-status-buffer-name)
(delete-other-windows))
(unless svn-status-preserve-window-configuration
(when (string= (buffer-name) svn-status-buffer-name)
(delete-other-windows)))
(pop-to-buffer "*svn-process*")
(switch-to-buffer (get-buffer-create svn-status-last-output-buffer-name))
(let ((buffer-read-only nil))
@ -2456,7 +2576,9 @@ If ARG then prompt for revision to diff against, else compare working copy with
(when (eq revision :ask)
(setq revision (svn-status-read-revision-string
"Diff with files for version: " "PREV")))
(let ((clear-buf t))
(let ((clear-buf t)
(beginning nil))
(dolist (line-info line-infos)
(svn-run-svn nil clear-buf 'diff "diff" svn-status-default-diff-arguments
"-r" (if (eq revision :auto)
@ -2465,19 +2587,59 @@ If ARG then prompt for revision to diff against, else compare working copy with
revision)
(unless recursive "--non-recursive")
(svn-status-line-info->filename line-info))
(setq clear-buf nil)))
(svn-status-diff-mode))
(setq clear-buf nil)
(defun svn-status-diff-mode ()
;; "svn diff --non-recursive" skips only subdirectories, not files.
;; But a non-recursive diff via psvn should skip files too, because
;; the user would have marked them if he wanted them to be compared.
;; So we'll look for the "Index: foo" line that marks the first file
;; in the diff output, and delete it and everything that follows.
;; This is made more complicated by the fact that `svn-status-activate-diff-mode'
;; expects the output to be left in the *svn-process* buffer.
(unless recursive
;; Check `directory-p' relative to the `default-directory' of the
;; "*svn-status*" buffer, not that of the "*svn-process*" buffer.
(let ((directory-p (svn-status-line-info->directory-p line-info)))
(with-current-buffer "*svn-process*"
(when directory-p
(goto-char (or beginning (point-min)))
(when (re-search-forward "^Index: " nil t)
(delete-region (match-beginning 0) (point-max))))
(goto-char (setq beginning (point-max))))))))
(svn-status-activate-diff-mode))
(defun svn-status-diff-save-current-defun-as-kill ()
"Copy the function name for the change at point to the kill-ring.
That function uses `add-log-current-defun'"
(interactive)
(let ((func-name (add-log-current-defun)))
(if func-name
(progn
(kill-new func-name)
(message "Copied %S" func-name))
(message "No current defun detected."))))
(defun svn-status-activate-diff-mode ()
"Show the *svn-process* buffer, using the diff-mode."
(svn-status-show-process-output 'diff t)
(save-excursion
(set-buffer svn-status-last-output-buffer-name)
(when (fboundp 'diff-mode) ;not in GNU Emacs 20.7
(diff-mode)
(font-lock-fontify-buffer))
(svn-status-diff-mode)
(setq buffer-read-only t)))
(define-derived-mode svn-status-diff-mode fundamental-mode "svn-diff"
"Major mode to display svn diffs. Derives from `diff-mode'.
Commands:
\\{svn-status-diff-mode-map}
"
(let ((diff-mode-shared-map (copy-keymap svn-status-diff-mode-map))
major-mode mode-name)
(diff-mode)))
(defun svn-status-show-process-buffer ()
"Show the content of the *svn-process* buffer"
(interactive)
@ -2662,9 +2824,20 @@ If no files have been marked, commit recursively the file at point."
(setq default-directory dir)
(unless use-existing-buffer
(when (and svn-log-edit-file-name (file-readable-p svn-log-edit-file-name))
(insert-file svn-log-edit-file-name)))
(insert-file-contents svn-log-edit-file-name)))
(svn-log-edit-mode)))
(defun svn-status-export ()
"Run `svn export' for the current working copy.
Ask the user for the destination path.
`svn-status-default-export-directory' is suggested as export directory."
(interactive)
(let* ((src default-directory)
(dir1-name (nth 1 (nreverse (split-string src "/"))))
(dest (read-file-name (format "Export %s to " src) (concat svn-status-default-export-directory dir1-name))))
(svn-run-svn t t 'export "export" (expand-file-name src) (expand-file-name dest))
(message "svn-status-export %s %s" src dest)))
(defun svn-status-cleanup (arg)
"Run `svn cleanup' on all selected files.
See `svn-status-marked-files' for what counts as selected.
@ -3161,6 +3334,7 @@ When called with a prefix argument, it is possible to enter a new property."
;; --------------------------------------------------------------------------------
(defvar svn-prop-edit-mode-map () "Keymap used in `svn-prop-edit-mode' buffers.")
(put 'svn-prop-edit-mode-map 'risky-local-variable t) ;for Emacs 20.7
(when (not svn-prop-edit-mode-map)
(setq svn-prop-edit-mode-map (make-sparse-keymap))
@ -3244,6 +3418,9 @@ Commands:
;; --------------------------------------------------------------------------------
(defvar svn-log-edit-mode-map () "Keymap used in `svn-log-edit-mode' buffers.")
(put 'svn-log-edit-mode-map 'risky-local-variable t) ;for Emacs 20.7
(defvar svn-log-edit-mode-menu) ;really defined with `easy-menu-define' below.
(if svn-log-edit-use-log-edit-mode
(define-derived-mode svn-log-edit-mode log-edit-mode "svn-log-edit"
@ -3293,6 +3470,7 @@ Commands:
["Show files to commit" svn-log-edit-show-files-to-commit t]
["Erase buffer" svn-log-edit-erase-edit-buffer]
["Abort" svn-log-edit-abort t]))
(put 'svn-log-edit-mode-menu 'risky-local-variable t)
(defun svn-log-edit-abort ()
(interactive)
@ -3403,6 +3581,7 @@ If ARG then show diff between some other version of the selected files."
;; --------------------------------------------------------------------------------
(defvar svn-log-view-mode-map () "Keymap used in `svn-log-view-mode' buffers.")
(put 'svn-log-view-mode-map 'risky-local-variable t) ;for Emacs 20.7
(when (not svn-log-view-mode-map)
(setq svn-log-view-mode-map (make-sparse-keymap))
@ -3422,6 +3601,7 @@ If ARG then show diff between some other version of the selected files."
(defvar svn-log-view-font-lock-keywords
'(("^r.+" . font-lock-keyword-face)
"Keywords in svn-log-view-mode."))
(put 'svn-log-view-font-lock-keywords 'risky-local-variable t) ;for Emacs 20.7
(define-derived-mode svn-log-view-mode fundamental-mode "svn-log-view"
@ -3458,7 +3638,7 @@ When called with a prefix argument, ask the user for the revision."
(when arg
(setq rev-arg (read-string "Revision for changeset: " rev-arg)))
(svn-run-svn nil t 'diff "diff" (concat "-r" rev-arg))
(svn-status-diff-mode)))
(svn-status-activate-diff-mode)))
(defun svn-log-edit-log-entry ()
"Edit the given log entry."
@ -3612,7 +3792,7 @@ The conflicts must be marked with rcsmerge conflict markers."
(save-excursion
(set-buffer your-buffer)
(erase-buffer)
(insert-buffer result-buffer)
(insert-buffer-substring result-buffer)
(goto-char (point-min))
(while (re-search-forward "^<<<<<<< .mine\n" nil t)
(setq found t)
@ -3631,7 +3811,7 @@ The conflicts must be marked with rcsmerge conflict markers."
(error "No conflict markers found")))
(set-buffer other-buffer)
(erase-buffer)
(insert-buffer result-buffer)
(insert-buffer-substring result-buffer)
(goto-char (point-min))
(while (re-search-forward "^<<<<<<< .mine\n" nil t)
(let ((start (match-beginning 0)))
@ -3666,7 +3846,7 @@ The conflicts must be marked with rcsmerge conflict markers."
(ediff-cleanup-mess)
(set-buffer result)
(erase-buffer)
(insert-buffer buffer-C)
(insert-buffer-substring buffer-C)
(kill-buffer buffer-A)
(kill-buffer buffer-B)
(kill-buffer buffer-C)

View File

@ -1 +1 @@
95f9b43801b4d9bc071564bca2116763 subversion-1.2.3.tar.gz
0d91a7fe152d0373044c47c54deb2c9a subversion-1.3.0.tar.gz

View File

@ -4,9 +4,9 @@ ensure that executables in the test suite are *not* built using
-pie, since that doesn't work when main() is not itself an
object built with -pie.
--- subversion-1.2.0/build/generator/gen_base.py.pie
+++ subversion-1.2.0/build/generator/gen_base.py
@@ -375,6 +375,9 @@
--- subversion-1.3.0/build/generator/gen_base.py.pie
+++ subversion-1.3.0/build/generator/gen_base.py
@@ -399,6 +399,9 @@
self.manpages = options.get('manpages', '')
self.testing = options.get('testing')
@ -16,7 +16,7 @@ object built with -pie.
def add_dependencies(self):
TargetLinked.add_dependencies(self)
@@ -417,8 +420,11 @@
@@ -441,8 +444,11 @@
self.msvc_fake = options.get('msvc-fake') == 'yes' # has fake target
self.msvc_export = string.split(options.get('msvc-export', ''))
@ -30,9 +30,9 @@ object built with -pie.
class TargetApacheMod(TargetLib):
--- subversion-1.2.0/Makefile.in.pie
+++ subversion-1.2.0/Makefile.in
@@ -145,9 +145,10 @@
--- subversion-1.3.0/Makefile.in.pie
+++ subversion-1.3.0/Makefile.in
@@ -143,9 +143,10 @@
CPPFLAGS = @CPPFLAGS@ $(EXTRA_CPPFLAGS)
LDFLAGS = @LDFLAGS@ $(EXTRA_LDFLAGS)
@ -45,7 +45,7 @@ object built with -pie.
# special compilation for files destined for mod_dav_svn
COMPILE_APACHE_MOD = $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) $(APACHE_INCLUDES) $(INCLUDES) -o $@ -c
@@ -162,8 +163,11 @@
@@ -160,8 +161,11 @@
COMPILE_JAVAHL_JAVAC = $(JAVAC) $(JAVAC_FLAGS)
COMPILE_JAVAHL_JAVAH = $(JAVAH)
@ -59,14 +59,14 @@ object built with -pie.
# special link rule for mod_dav_svn
LINK_APACHE_MOD = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(CFLAGS) $(LDFLAGS) -rpath $(APACHE_LIBEXECDIR) -avoid-version -module
--- subversion-1.2.0/build.conf.pie
+++ subversion-1.2.0/build.conf
@@ -346,7 +346,7 @@
sources = swigutil_py.c
libs = libsvn_subr libsvn_delta aprutil apriconv apr
# need SWIG_LDFLAGS to be able to link swig_runtime
-link-cmd = $(LINK) $(SWIG_LDFLAGS) $(SWIG_PY_LIBS)
+link-cmd = $(LINK_LIB) $(SWIG_LDFLAGS) $(SWIG_PY_LIBS)
--- subversion-1.3.0/build.conf.pie
+++ subversion-1.3.0/build.conf
@@ -356,7 +356,7 @@
lang = python
path = subversion/bindings/swig/python/libsvn_swig_py
libs = libsvn_subr libsvn_delta libsvn_wc aprutil apriconv apr
-link-cmd = $(LINK) $(SWIG_PY_LIBS)
+link-cmd = $(LINK_LIB) $(SWIG_PY_LIBS)
install = swig-py-lib
# need special build rule to include -DSWIGPYTHON
compile-cmd = $(COMPILE_SWIG_PY)

View File

@ -10,8 +10,8 @@
Summary: Modern Version Control System designed to replace CVS
Name: subversion
Version: 1.2.3
Release: 6
Version: 1.3.0
Release: 2
License: BSD
Group: Development/Tools
URL: http://subversion.tigris.org/
@ -19,7 +19,6 @@ Source0: http://subversion.tigris.org/tarballs/subversion-%{version}.tar.gz
Source1: subversion.conf
Source3: filter-requires.sh
Source4: http://www.xsteve.at/prg/emacs/psvn.el
Patch1: subversion-0.24.2-swig.patch
Patch2: subversion-0.20.1-deplibs.patch
Patch3: subversion-0.31.0-rpath.patch
Patch6: subversion-1.0.3-pie.patch
@ -97,7 +96,6 @@ This package includes the Ruby bindings to the Subversion libraries.
%prep
%setup -q
%patch1 -p1 -b .swig
%patch2 -p1 -b .deplibs
%patch3 -p1 -b .rpath
%patch6 -p1 -b .pie
@ -246,6 +244,10 @@ rm -rf ${RPM_BUILD_ROOT}
%endif
%changelog
* Wed Jan 4 2006 Joe Orton <jorton@redhat.com> 1.3.0-2
- update to 1.3.0 (#176833)
- update to psvn.el r17921 Stefan Reichoer
* Mon Dec 12 2005 Joe Orton <jorton@redhat.com> 1.2.3-6
- fix ownership of libsvnjavahl.* (#175289)
- try building javahl on ia64/ppc64 again

View File

@ -1 +1 @@
subversion-1.2.3.tar.gz
subversion-1.3.0.tar.gz

View File

@ -1,161 +1,231 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.6 (GNU/Linux)
Version: GnuPG v1.4.1 (GNU/Linux)
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
=V64X
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
n3XvPxBbvJUFwy3Y7bEr4YW/Cy9f
=4sB1
-----END PGP PUBLIC KEY BLOCK-----