diff --git a/.cvsignore b/.cvsignore index f4336d8..ce22413 100644 --- a/.cvsignore +++ b/.cvsignore @@ -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 diff --git a/mirrors b/mirrors index 4ffcd1d..bb12745 100644 --- a/mirrors +++ b/mirrors @@ -1 +1 @@ -http://subversion.tigris.org/tarballs +http://subversion.tigris.org/downloads diff --git a/psvn.el b/psvn.el index 59383e2..80e21a1 100644 --- a/psvn.el +++ b/psvn.el @@ -2,7 +2,7 @@ ;; Copyright (C) 2002-2005 by Stefan Reichoer ;; Author: Stefan Reichoer, -;; $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 "") 'svn-status-next-line) (define-key svn-status-mode-map (kbd "") '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) diff --git a/sources b/sources index 0068dc0..8dd42ab 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -95f9b43801b4d9bc071564bca2116763 subversion-1.2.3.tar.gz +0d91a7fe152d0373044c47c54deb2c9a subversion-1.3.0.tar.gz diff --git a/subversion-1.0.3-pie.patch b/subversion-1.0.3-pie.patch index 936502a..388f51e 100644 --- a/subversion-1.0.3-pie.patch +++ b/subversion-1.0.3-pie.patch @@ -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) diff --git a/subversion.spec b/subversion.spec index a548784..558cf83 100644 --- a/subversion.spec +++ b/subversion.spec @@ -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 1.3.0-2 +- update to 1.3.0 (#176833) +- update to psvn.el r17921 Stefan Reichoer + * Mon Dec 12 2005 Joe Orton 1.2.3-6 - fix ownership of libsvnjavahl.* (#175289) - try building javahl on ia64/ppc64 again diff --git a/upstream b/upstream index ca90399..d572b24 100644 --- a/upstream +++ b/upstream @@ -1 +1 @@ -subversion-1.2.3.tar.gz +subversion-1.3.0.tar.gz diff --git a/upstream-key.gpg b/upstream-key.gpg index bf6cfc9..815f35d 100644 --- a/upstream-key.gpg +++ b/upstream-key.gpg @@ -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-----