diff --git a/psvn.el b/psvn.el index 643afa3..6af3a2b 100644 --- a/psvn.el +++ b/psvn.el @@ -1,8 +1,8 @@ ;;; psvn.el --- Subversion interface for emacs -;; Copyright (C) 2002-2008 by Stefan Reichoer +;; Copyright (C) 2002-2009 by Stefan Reichoer ;; Author: Stefan Reichoer -;; $Id: psvn.el 33557 2008-10-08 20:01:12Z xsteve $ +;; $Id: psvn.el 40299 2009-10-29 19:38:54Z 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 @@ -22,7 +22,7 @@ ;;; Commentary ;; psvn.el is tested with GNU Emacs 21.3 on windows, debian linux, -;; freebsd5, red hat el4, ubuntu edgy with svn 1.4.0 +;; freebsd5, red hat el4, ubuntu intrepid with svn 1.5.1 ;; psvn.el needs at least svn 1.1.0 ;; if you upgrade to a higher version, you need to do a fresh checkout @@ -73,6 +73,7 @@ ;; e - svn-status-toggle-edit-cmd-flag ;; ? - svn-status-toggle-hide-unknown ;; _ - svn-status-toggle-hide-unmodified +;; z - svn-status-toggle-hide-externals ;; m - svn-status-set-user-mark ;; u - svn-status-unset-user-mark ;; $ - svn-status-toggle-elide @@ -103,6 +104,7 @@ ;; P i - svn-status-property-ignore-file ;; P I - svn-status-property-ignore-file-extension ;; P C-i - svn-status-property-edit-svn-ignore +;; P X e - svn-status-property-edit-svn-externals ;; P k - svn-status-property-set-keyword-list ;; P K i - svn-status-property-set-keyword-id ;; P K d - svn-status-property-set-keyword-date @@ -245,6 +247,7 @@ (eval-when-compile (require 'dired)) (eval-when-compile (require 'ediff-util)) (eval-when-compile (require 'ediff-wind)) +(eval-when-compile (require 'vc-hooks)) (eval-when-compile (require 'elp)) (eval-when-compile (require 'pp)) @@ -253,7 +256,7 @@ (require 'diff-mode)) (error nil)) -(defconst svn-psvn-revision "$Id: psvn.el 33557 2008-10-08 20:01:12Z xsteve $" +(defconst svn-psvn-revision "$Id: psvn.el 40299 2009-10-29 19:38:54Z xsteve $" "The revision number of psvn.") ;;; user setable variables @@ -302,6 +305,11 @@ This can be toggled with \\[svn-status-toggle-hide-unknown]." This can be toggled with \\[svn-status-toggle-hide-unmodified]." :type 'boolean :group 'psvn) +(defcustom svn-status-hide-externals nil + "*Hide external files in `svn-status-buffer-name' buffer. +This can be toggled with \\[svn-status-toggle-hide-externals]." + :type 'boolean + :group 'psvn) (defcustom svn-status-sort-status-buffer t "*Whether to sort the `svn-status-buffer-name' buffer. @@ -414,6 +422,12 @@ Any non-nil value overrides that variable, with the same syntax." ;; (put 'svn-browse-url-function 'risky-local-variable t) ;; already implied by "-function" suffix +(defcustom svn-log-edit-header + "## Lines starting with '## ' will be removed from the log message.\n" + "*Header content of the *svn-log* buffer" + :type 'string + :group 'psvn) + (defcustom svn-status-window-alist '((diff "*svn-diff*") (log "*svn-log*") (info t) (blame t) (proplist t) (update t)) "An alist to specify which windows should be used for svn command outputs. @@ -562,7 +576,7 @@ These link handlers must be registered via `svn-log-register-link-handler'") ;; (put 'svn-log-edit-done-hook 'risky-local-variable t) ;; already implied by "-hook" suffix -(defvar svn-post-process-svn-output-hook nil "Hook that can be used to preprocess the output from svn. +(defvar svn-post-process-svn-output-hook 'svn-fixup-tramp-output-maybe "Hook that can be used to preprocess the output from svn. The function `svn-status-remove-control-M' can be useful for that hook") (when (eq system-type 'windows-nt) @@ -936,7 +950,7 @@ If POS is nil, use current buffer location." (defun svn-substring-no-properties (string &optional from to) (if (fboundp 'substring-no-properties) (substring-no-properties string from to) - (substring string from to))) + (substring string (or from 0) to))) ; xemacs ;; Evaluate the defsubst at compile time, so that the byte compiler @@ -948,6 +962,14 @@ If POS is nil, use current buffer location." (defsubst svn-match-string-no-properties (match) (buffer-substring-no-properties (match-beginning match) (match-end match))))) +; XEmacs doesn't have a function `help-buffer' +(eval-and-compile + (if (fboundp 'help-buffer) + (defalias 'svn-help-buffer 'help-buffer) ; FSF Emacs + (defun svn-help-buffer () + (buffer-name (get-buffer-create (help-buffer-name "SVN")))))) ; XEmacs + + ;; XEmacs 21.4.17 does not have an `alist' widget. Define a replacement. ;; To find out whether the `alist' widget exists, we cannot check just ;; (get 'alist 'widget-type), because GNU Emacs 21.4 defines it in @@ -1010,7 +1032,8 @@ To bind this to a different key, customize `svn-status-prefix-key'.") (define-key svn-global-keymap (kbd "f r") 'svn-file-revert) (define-key svn-global-keymap (kbd "c") 'svn-status-commit) (define-key svn-global-keymap (kbd "S") 'svn-status-switch-to-status-buffer) - (define-key svn-global-keymap (kbd "o") 'svn-status-pop-to-status-buffer)) + (define-key svn-global-keymap (kbd "o") 'svn-status-pop-to-status-buffer) + (define-key svn-global-keymap (kbd "C-k") 'svn-process-kill)) (defvar svn-status-diff-mode-map () "Keymap used in `svn-status-diff-mode' for additional commands that are not defined in diff-mode.") @@ -1161,13 +1184,14 @@ If there is no .svn directory, examine if there is CVS and run (if arg "-u" ""))))) (save-excursion (set-buffer status-buf) + (buffer-disable-undo) (setq default-directory dir) (set-buffer proc-buf) (setq default-directory dir svn-status-remote (when arg t)) (set-buffer cur-buf) (if want-edit - (let (svn-status-edit-svn-command t) + (let ((svn-status-edit-svn-command t)) (svn-run t t 'status "status" svn-status-default-status-arguments status-option)) (svn-run t t 'status "status" svn-status-default-status-arguments status-option))))) @@ -1196,6 +1220,19 @@ If there is no .svn directory, examine if there is CVS and run (defun svn-had-user-input-since-asynch-run () (not (equal (recent-keys) svn-pre-run-asynch-recent-keys))) +(defun svn-expand-filename-for-remote-access (file-name) + "Convert the given local part of a filename to a full file name to allow accessing remote files" + ;; when running svn on a remote host: expand local file names to get full names to access the file on the remote host via emacs + (if (and (fboundp 'file-remote-p) (file-remote-p default-directory)) + (concat (file-remote-p default-directory) file-name) + file-name)) + +(defun svn-local-filename-for-remote-access (file-name) + "Convert a full file name to a local file name that can be used for a local svn invocation." + (if (and (fboundp 'file-remote-p) (file-remote-p file-name)) + (tramp-file-name-localname (tramp-dissect-file-name file-name)) + file-name)) + (defun svn-process-environment () "Construct the environment for the svn process. It is a combination of `svn-status-svn-environment-var-list' and @@ -1272,7 +1309,7 @@ The hook svn-pre-run-hook allows to monitor/modify the ARGLIST." (setq svn-status-last-commit-author nil) (setq svn-status-mode-line-process-status (format " running %s" cmdtype)) (svn-status-update-mode-line) - (sit-for 0.1) + (save-excursion (sit-for 0.1)) (ring-insert svn-last-cmd-ring (list (current-time-string) arglist default-directory)) (if run-asynchron (progn @@ -1320,8 +1357,8 @@ The hook svn-pre-run-hook allows to monitor/modify the ARGLIST." (replace-match "/"))))) (defun svn-process-sentinel (process event) + "Called after a svn process has finished." ;;(princ (format "Process: %s had the event `%s'" process event))) - ;;(save-excursion (let ((act-buf (current-buffer))) (when svn-pre-run-mode-line-process (with-current-buffer svn-status-pre-run-svn-buffer @@ -1452,17 +1489,30 @@ The hook svn-pre-run-hook allows to monitor/modify the ARGLIST." (while (accept-process-output process 0 100)) ;; find last error message and show it. (goto-char (point-max)) - (if (re-search-backward "^svn: \\(.*\\)" nil t) - (svn-process-handle-error (match-string 1)) + (if (re-search-backward "^svn: " nil t) + (let ((error-strings) + (beginning-of-buffer)) + (while (and (looking-at "^svn: ") (not beginning-of-buffer)) + (setq error-strings (append error-strings (list (buffer-substring-no-properties (+ 5 (svn-point-at-bol)) (svn-point-at-eol))))) + (setq beginning-of-buffer (bobp)) + (forward-line -1)) + (svn-process-handle-error (mapconcat 'identity (reverse error-strings) "\n"))) (message "svn failed: %s" event))) (t (message "svn process had unknown event: %s" event)) (svn-status-show-process-output nil t)))) (defvar svn-process-handle-error-msg nil) +(defvar svn-handle-error-function nil + "A function that will be called with an error string received from the svn client. +When this function resets `svn-process-handle-error-msg' to nil, the default error handling +(just show the error message) is not executed.") (defun svn-process-handle-error (error-msg) (let ((svn-process-handle-error-msg error-msg)) - (electric-helpify 'svn-process-help-with-error-msg))) + (when (functionp svn-handle-error-function) + (funcall svn-handle-error-function error-msg)) + (when svn-process-handle-error-msg + (electric-helpify 'svn-process-help-with-error-msg)))) (defun svn-process-help-with-error-msg () (interactive) @@ -1471,9 +1521,9 @@ The hook svn-pre-run-hook allows to monitor/modify the ARGLIST." "Please unmark all files and position point at the directory you would like to remove.\nThen run commit again.")))))) (if help-msg (save-excursion - (with-output-to-temp-buffer (help-buffer) + (with-output-to-temp-buffer (svn-help-buffer) (princ (format "svn failed: %s\n\n%s" svn-process-handle-error-msg help-msg)))) - (message "svn failed: %s" svn-process-handle-error-msg)))) + (message "svn failed:\n%s" svn-process-handle-error-msg)))) (defun svn-process-filter (process str) @@ -1485,17 +1535,17 @@ The hook svn-pre-run-hook allows to monitor/modify the ARGLIST." (insert str) (save-excursion (goto-char (svn-point-at-bol)) - (when (looking-at "Password for '\\(.+\\)': ") + (when (looking-at "Password for '\\(.*\\)': ") ;(svn-status-show-process-buffer) (let ((passwd (read-passwd (format "Enter svn password for %s: " (match-string 1))))) (svn-process-send-string-and-newline passwd t))) (when (looking-at "Username: ") - (let ((user-name (read-string "Username for svn operation: "))) + (let ((user-name (with-local-quit (read-string "Username for svn operation: ")))) (svn-process-send-string-and-newline user-name))) (when (looking-at "(R)eject, accept (t)emporarily or accept (p)ermanently") (svn-status-show-process-buffer) - (let ((answer (read-string "(R)eject, accept (t)emporarily or accept (p)ermanently? "))) + (let ((answer (with-local-quit (read-string "(R)eject, accept (t)emporarily or accept (p)ermanently? ")))) (svn-process-send-string (substring answer 0 1))))))) (defun svn-revert-some-buffers (&optional tree) @@ -1696,10 +1746,10 @@ The results are used to build the `svn-status-info' variable." svn-property-mark (elt svn-marks 1) ; 2nd column - M,C (properties) svn-wc-locked-mark (elt svn-marks 2) ; 3rd column - L or blank svn-with-history-mark (elt svn-marks 3) ; 4th column - + or blank - svn-switched-mark (elt svn-marks 4) ; 5th column - S or blank + svn-switched-mark (elt svn-marks 4) ; 5th column - S,X or blank svn-repo-locked-mark (elt svn-marks 5)) ; 6th column - K,O,T,B or blank (when svn-status-remote - (setq svn-update-mark (elt svn-marks 7))) ; 8th column - * or blank + (setq svn-update-mark (elt svn-marks 7))) ; 8th column - * or blank (when (eq svn-property-mark ?\ ) (setq svn-property-mark nil)) (when (eq svn-wc-locked-mark ?\ ) (setq svn-wc-locked-mark nil)) (when (eq svn-with-history-mark ?\ ) (setq svn-with-history-mark nil)) @@ -1783,7 +1833,7 @@ The results are used to build the `svn-status-info' variable." (setq svn-status-info (sort svn-status-info 'svn-status-sort-predicate)))))) ;;(string-lessp "." "%") => nil -;(svn-status-sort-predicate '(t t t ".") '(t t t "%")) => t +;;(svn-status-sort-predicate '(t t t ".") '(t t t "%")) => t (defun svn-status-sort-predicate (a b) "Return t if A should appear before B in the `svn-status-buffer-name' buffer. A and B must be line-info's." @@ -1809,6 +1859,21 @@ A and B must be line-info's." (while (re-search-forward "\r$" (point-max) t) (replace-match "" nil nil)))))) +(defun svn-fixup-tramp-exit () + "Helper function to handle tramp connections stopping with an exit output." + (goto-char (point-max)) + (when (eq (svn-point-at-bol) (svn-point-at-eol)) + (forward-line -1)) + (beginning-of-line) + (when (looking-at "exit") + (delete-region (point) (svn-point-at-eol)))) + +(defun svn-fixup-tramp-output-maybe () + "Fixup leftover output when running via tramp" + (when (fboundp 'file-remote-p) + (when (file-remote-p default-directory) + (svn-fixup-tramp-exit)))) + (condition-case nil ;;(easy-menu-add-item nil '("tools") ["SVN Status" svn-status t] "PCL-CVS") (easy-menu-add-item nil '("tools") ["SVN Status" svn-status t]) @@ -1877,10 +1942,10 @@ A and B must be line-info's." ;; XEmacs allows simultaneous connections to multiple devices with ;; different keyboards. (define-key svn-status-mode-map - (if (member (kbd "DEL") '([(delete)] [delete])) - [(backspace)] ; XEmacs - (kbd "DEL")) ; GNU Emacs - 'svn-status-unset-user-mark-backwards) + (if (member (kbd "DEL") '([(delete)] [delete])) + [(backspace)] ; XEmacs + (kbd "DEL")) ; GNU Emacs + 'svn-status-unset-user-mark-backwards) (define-key svn-status-mode-map (kbd "$") 'svn-status-toggle-elide) (define-key svn-status-mode-map (kbd "w") 'svn-status-copy-current-line-info) (define-key svn-status-mode-map (kbd ".") 'svn-status-goto-root-or-return) @@ -1888,6 +1953,7 @@ A and B must be line-info's." (define-key svn-status-mode-map (kbd "V") 'svn-status-svnversion) (define-key svn-status-mode-map (kbd "?") 'svn-status-toggle-hide-unknown) (define-key svn-status-mode-map (kbd "_") 'svn-status-toggle-hide-unmodified) + (define-key svn-status-mode-map (kbd "z") 'svn-status-toggle-hide-externals) (define-key svn-status-mode-map (kbd "a") 'svn-status-add-file) (define-key svn-status-mode-map (kbd "A") 'svn-status-add-file-recursively) (define-key svn-status-mode-map (kbd "+") 'svn-status-make-directory) @@ -1954,6 +2020,7 @@ A and B must be line-info's." ;; reducing clutter in `where-is'. (define-key svn-status-mode-property-map [(control ?i)] 'svn-status-property-edit-svn-ignore) (define-key svn-status-mode-property-map (kbd "TAB") 'svn-status-property-edit-svn-ignore) + (define-key svn-status-mode-property-map (kbd "Xe") 'svn-status-property-edit-svn-externals) (define-key svn-status-mode-property-map (kbd "k") 'svn-status-property-set-keyword-list) (define-key svn-status-mode-property-map (kbd "Ki") 'svn-status-property-set-keyword-id) (define-key svn-status-mode-property-map (kbd "Kd") 'svn-status-property-set-keyword-date) @@ -2045,6 +2112,8 @@ A and B must be line-info's." ["svn:ignore File Extension..." svn-status-property-ignore-file-extension t] ["Edit svn:ignore Property" svn-status-property-edit-svn-ignore t] "---" + ["Edit svn:externals Property" svn-status-property-edit-svn-externals t] + "---" ["Edit svn:keywords List" svn-status-property-set-keyword-list t] ["Add/Remove Id to/from svn:keywords" svn-status-property-set-keyword-id t] ["Add/Remove Date to/from svn:keywords" svn-status-property-set-keyword-date t] @@ -2100,6 +2169,8 @@ A and B must be line-info's." :style toggle :selected svn-status-hide-unknown] ["Hide Unmodified" svn-status-toggle-hide-unmodified :style toggle :selected svn-status-hide-unmodified] + ["Hide Externals" svn-status-toggle-hide-externals + :style toggle :selected svn-status-hide-externals] ["Show Client versions" svn-status-version t] ["Prepare bug report" svn-prepare-bug-report t] )) @@ -2145,7 +2216,7 @@ PREFIX is passed to `popup-menu'." (progn (setq o (make-overlay begin end)) (overlay-put o 'face face) - (sit-for 0) + (save-excursion (sit-for 0)) (popup-menu menu prefix)) (delete-overlay o)))) @@ -2332,7 +2403,7 @@ history, when it will be \"+\"." (defun svn-status-line-info->switched (line-info) "Return whether LINE-INFO is switched relative to its parent. This is column five of the output from `svn status'. -The result will be nil or \"S\"." +The result will be \"S\", \"X\" or nil." (nth 10 line-info)) (defun svn-status-line-info->repo-locked (line-info) "Return whether LINE-INFO contains some locking information. @@ -2349,6 +2420,7 @@ This list holds currently only one element: "Return whether the line is visible or not" (or (not (or (svn-status-line-info->hide-because-unknown line-info) (svn-status-line-info->hide-because-unmodified line-info) + (svn-status-line-info->hide-because-externals line-info) (svn-status-line-info->hide-because-custom-hide-function line-info) (svn-status-line-info->hide-because-user-elide line-info))) (svn-status-line-info->update-available line-info) ;; show the line, if an update is available @@ -2359,6 +2431,10 @@ This list holds currently only one element: (and svn-status-hide-unknown (eq (svn-status-line-info->filemark line-info) ??))) +(defun svn-status-line-info->hide-because-externals (line-info) + (and svn-status-hide-externals + (eq (svn-status-line-info->filemark line-info) ?X))) + (defun svn-status-line-info->hide-because-custom-hide-function (line-info) (and svn-status-custom-hide-function (apply svn-status-custom-hide-function (list line-info)))) @@ -2491,26 +2567,27 @@ When called with a prefix argument, toggle the hiding of all subdirectories for (len-test) (elided-list) (elide-mark)) - (while st-info - (setq fname (svn-status-line-info->filename (car st-info))) - (setq len-fname (length fname)) - (setq elided-list svn-status-elided-list) - (setq elide-mark nil) - (while elided-list - (setq test (car elided-list)) - (when (string= test ".") - (setq test "")) - (setq len-test (length test)) - (when (and (>= len-fname len-test) - (string= (substring fname 0 len-test) test)) - (setq elide-mark t) - (when (or (string= fname ".") - (and (= len-fname len-test) (svn-status-line-info->directory-p (car st-info)))) - (setq elide-mark 'directory))) - (setq elided-list (cdr elided-list))) - ;;(message "fname: %s elide-mark: %S" fname elide-mark) - (setcar (nthcdr 1 (svn-status-line-info->ui-status (car st-info))) elide-mark) - (setq st-info (cdr st-info)))) + (when svn-status-elided-list + (while st-info + (setq fname (svn-status-line-info->filename (car st-info))) + (setq len-fname (length fname)) + (setq elided-list svn-status-elided-list) + (setq elide-mark nil) + (while elided-list + (setq test (car elided-list)) + (when (string= test ".") + (setq test "")) + (setq len-test (length test)) + (when (and (>= len-fname len-test) + (string= (substring fname 0 len-test) test)) + (setq elide-mark t) + (when (or (string= fname ".") + (and (= len-fname len-test) (svn-status-line-info->directory-p (car st-info)))) + (setq elide-mark 'directory))) + (setq elided-list (cdr elided-list))) + ;;(message "fname: %s elide-mark: %S" fname elide-mark) + (setcar (nthcdr 1 (svn-status-line-info->ui-status (car st-info))) elide-mark) + (setq st-info (cdr st-info))))) (svn-status-update-buffer)) (defun svn-status-update-with-command-list (cmd-list) @@ -2794,7 +2871,8 @@ Symbolic links to directories count as directories (see `file-directory-p')." (filename ;; file or /path/to/file (concat (if (or svn-status-display-full-path - svn-status-hide-unmodified) + svn-status-hide-unmodified + svn-status-hide-externals) (svn-add-face (let ((dir-name (file-name-as-directory (svn-status-line-info->directory-containing-line-info @@ -2859,7 +2937,7 @@ Symbolic links to directories count as directories (see `file-directory-p')." ((eq flag ?B) " [ REPO-LOCK-BROKEN ]") (t " [ REPO-LOCK-UNKNOWN ]"))) 'svn-status-locked-face) - (svn-status-maybe-add-string (svn-status-line-info->switched line-info) + (svn-status-maybe-add-string (eq (svn-status-line-info->switched line-info) ?S) " (switched)" 'svn-status-switched-face) elide-hint) 'svn-status-marked-face) @@ -2891,6 +2969,7 @@ Additionally clear the psvn-extra-info field in all line-info lists." (overlay) (unmodified-count 0) ;how many unmodified files are hidden (unknown-count 0) ;how many unknown files are hidden + (externals-count 0) ;how many svn:externals files are hidden (custom-hide-count 0) ;how many files are hidden via svn-status-custom-hide-function (marked-count 0) ;how many files are elided (user-elide-count 0) @@ -2920,12 +2999,15 @@ Additionally clear the psvn-extra-info field in all line-info lists." (setq unknown-count (1+ unknown-count))) ((svn-status-line-info->hide-because-unmodified (car st-info)) (setq unmodified-count (1+ unmodified-count))) + ((svn-status-line-info->hide-because-externals (car st-info)) + (setq externals-count (1+ externals-count))) (t (svn-insert-line-in-status-buffer (car st-info)))) (when (svn-status-line-info->has-usermark (car st-info)) (setq marked-count (+ marked-count 1))) (setq overlay (make-overlay start-pos (point))) (overlay-put overlay 'svn-info (car st-info)) + (overlay-put overlay 'evaporate t) (setq st-info (cdr st-info))) ;; Insert status information at the buffer beginning (goto-char (point-min)) @@ -2949,6 +3031,10 @@ Additionally clear the psvn-extra-info field in all line-info lists." (insert (format "%d Unmodified file(s) are hidden - press `_' to toggle hiding\n" unmodified-count))) + (when svn-status-hide-externals + (insert + (format "%d Externals file(s) are hidden - press `z' to toggle hiding\n" + externals-count))) (when (> custom-hide-count 0) (insert (format "%d file(s) are hidden via the svn-status-custom-hide-function\n" @@ -3188,7 +3274,7 @@ When called from a file buffer provide a structure that contains the filename." (cond ((eq major-mode 'svn-status-mode) (svn-status-get-line-information)) (t - ;; a fake strukture that contains the buffername for the current buffer + ;; a fake structure that contains the buffername for the current buffer (svn-status-make-line-info (buffer-file-name (current-buffer)))))) (defun svn-status-select-line () @@ -3197,12 +3283,12 @@ When called from a file buffer provide a structure that contains the filename." (interactive) (let ((info (svn-status-get-line-information))) (if info - (message "%S hide-because-unknown: %S hide-because-unmodified: %S" info + (message "%S hide-because-unknown: %S hide-because-unmodified: %S hide-because-externals: %S" info (svn-status-line-info->hide-because-unknown info) - (svn-status-line-info->hide-because-unmodified info)) + (svn-status-line-info->hide-because-unmodified info) + (svn-status-line-info->hide-because-externals info)) (message "No file on this line")))) - -(defun svn-status-ensure-cursor-on-file () + (defun svn-status-ensure-cursor-on-file () "Raise an error unless point is on a valid file." (unless (svn-status-get-line-information) (error "No file on the current line"))) @@ -3390,13 +3476,15 @@ This means we mark * all modified files * all files scheduled for addition * all files scheduled for deletion +* all files with modified properties The last two categories include all copied and moved files. If called with a prefix ARG, unmark all such files." (interactive "P") (svn-status-mark-added arg) (svn-status-mark-modified arg) - (svn-status-mark-deleted arg)) + (svn-status-mark-deleted arg) + (svn-status-mark-modified-properties arg)) (defun svn-status-unset-all-usermarks () (interactive) @@ -3455,6 +3543,11 @@ If the function is called with a prefix arg, unmark all these files." (setq svn-status-hide-unmodified (not svn-status-hide-unmodified)) (svn-status-update-buffer)) +(defun svn-status-toggle-hide-externals () + (interactive) + (setq svn-status-hide-externals (not svn-status-hide-externals)) + (svn-status-update-buffer)) + (defun svn-status-get-file-name-buffer-position (name) "Find the buffer position for a file. If the file is not found, return nil." @@ -3551,6 +3644,10 @@ if no files have been marked." (defun svn-status-create-arg-file (file-name prefix file-info-list postfix) + "Create an svn client argument file" + ;; create the arg file on the remote host when we will run svn on this host! + (setq file-name (svn-expand-filename-for-remote-access file-name)) + ;; (message "svn-status-create-arg-file %s: %s" default-directory file-name) (with-temp-file file-name (insert prefix) (let ((st-info file-info-list)) @@ -4099,22 +4196,29 @@ When called with a prefix argument, ask the user for the revision to update to. When called with a negative prefix argument, only update the selected files." (interactive "P") (let* ((selective-update (or (and (numberp arg) (< arg 0)) (eq arg '-))) + (update-extra-arg) (rev (when arg (svn-status-read-revision-string (if selective-update (format "Selected entries: Run svn update -r ") (format "Directory: %s: Run svn update -r " default-directory)) (if selective-update "HEAD" nil))))) + (unless svn-client-version + (svn-status-version)) + (if (and (<= (car svn-client-version) 1) (< (cadr svn-client-version) 5)) + (setq update-extra-arg (list "--non-interactive")) ;; svn version < 1.5 + (setq update-extra-arg (list "--accept" "postpone"))) ;; svn version >= 1.5 (if selective-update (progn (message "Running svn-update for %s" (svn-status-marked-file-names)) (svn-run t t 'update "update" (when rev (list "-r" rev)) - (list "--non-interactive") + update-extra-arg (svn-status-marked-file-names))) (message "Running svn-update for %s" default-directory) (svn-run t t 'update "update" (when rev (list "-r" rev)) - (list "--non-interactive") (expand-file-name default-directory))))) + update-extra-arg + (svn-local-filename-for-remote-access (expand-file-name default-directory)))))) (defun svn-status-commit () "Commit selected files. @@ -4332,7 +4436,11 @@ static char * data[] = { (defsubst svn-status-in-vc-mode? () "Is vc-svn active?" - (and vc-mode (string-match "^ SVN" (svn-substring-no-properties vc-mode)))) + (cond + ((fboundp 'vc-backend) + (eq 'SVN (vc-backend buffer-file-name))) + ((and (boundp 'vc-mode) vc-mode) + (string-match "^ SVN" (svn-substring-no-properties vc-mode))))) (when svn-status-fancy-file-state-in-modeline (defadvice vc-find-file-hook (after svn-status-vc-svn-find-file-hook activate) @@ -4831,6 +4939,17 @@ When called with a prefix argument, it is possible to enter a new property." (message "Edit svn:ignore on %s" dir))) +(defun svn-status-property-edit-svn-externals () + (interactive) + (let* ((line-info (svn-status-get-line-information)) + (dir (if (svn-status-line-info->directory-p line-info) + (svn-status-line-info->filename line-info) + (svn-status-get-directory line-info)))) + (svn-status-property-edit + (list (svn-status-find-info-for-file-name dir)) "svn:externals") + (message "Edit svn:externals on %s" dir))) + + (defun svn-status-property-set-keyword-list () "Edit the svn:keywords property on the marked files." (interactive) @@ -4943,22 +5062,22 @@ Commands: (set-buffer (get-buffer "*svn-property-edit*")) (when (fboundp 'set-buffer-file-coding-system) (set-buffer-file-coding-system svn-status-svn-file-coding-system nil)) - (setq svn-status-temp-file-to-remove - (concat svn-status-temp-dir "svn-prop-edit.txt" svn-temp-suffix)) - (write-region (point-min) (point-max) svn-status-temp-file-to-remove nil 1)) - (when svn-status-propedit-file-list ; there are files to change properties - (svn-status-create-arg-file svn-status-temp-arg-file "" - svn-status-propedit-file-list "") - (setq svn-status-propedit-file-list nil) - (svn-run async t 'propset "propset" - svn-status-propedit-property-name - "--targets" svn-status-temp-arg-file - (when (eq svn-status-svn-file-coding-system 'utf-8) - '("--encoding" "UTF-8")) - "-F" (concat svn-status-temp-dir "svn-prop-edit.txt" svn-temp-suffix)) - (unless async (svn-status-remove-temp-file-maybe))) - (when svn-status-pre-propedit-window-configuration - (set-window-configuration svn-status-pre-propedit-window-configuration))) + (let ((svn-propedit-file-name (concat svn-status-temp-dir "svn-prop-edit.txt" svn-temp-suffix))) + (setq svn-status-temp-file-to-remove (svn-expand-filename-for-remote-access svn-propedit-file-name)) + (write-region (point-min) (point-max) svn-status-temp-file-to-remove nil 1) + (when svn-status-propedit-file-list ; there are files to change properties + (svn-status-create-arg-file svn-status-temp-arg-file "" + svn-status-propedit-file-list "") + (setq svn-status-propedit-file-list nil) + (svn-run async t 'propset "propset" + svn-status-propedit-property-name + "--targets" svn-status-temp-arg-file + (when (eq svn-status-svn-file-coding-system 'utf-8) + '("--encoding" "UTF-8")) + "-F" svn-propedit-file-name) + (unless async (svn-status-remove-temp-file-maybe))) + (when svn-status-pre-propedit-window-configuration + (set-window-configuration svn-status-pre-propedit-window-configuration))))) (defun svn-prop-edit-svn-diff (arg) (interactive "P") @@ -5050,41 +5169,41 @@ Commands: "Finish editing the log message and run svn commit." (interactive) (svn-status-save-some-buffers) - (save-excursion - (set-buffer (get-buffer svn-log-edit-buffer-name)) - (when svn-log-edit-insert-files-to-commit - (svn-log-edit-remove-comment-lines)) - (when (fboundp 'set-buffer-file-coding-system) - (set-buffer-file-coding-system svn-status-svn-file-coding-system nil)) - (when (or svn-log-edit-update-log-entry svn-status-files-to-commit) - (setq svn-status-temp-file-to-remove - (concat svn-status-temp-dir "svn-log-edit.txt" svn-temp-suffix)) - (write-region (point-min) (point-max) svn-status-temp-file-to-remove nil 1)) - (bury-buffer)) - (if svn-log-edit-update-log-entry - (when (y-or-n-p "Update the log entry? ") - ;; svn propset svn:log --revprop -r11672 -F file - (svn-run nil t 'propset "propset" "svn:log" "--revprop" - (concat "-r" svn-log-edit-update-log-entry) - "-F" svn-status-temp-file-to-remove) - (save-excursion - (set-buffer svn-process-buffer-name) - (message "%s" (buffer-substring (point-min) (- (point-max) 1))))) - (when svn-status-files-to-commit ; there are files to commit - (setq svn-status-operated-on-dot - (and (= 1 (length svn-status-files-to-commit)) - (string= "." (svn-status-line-info->filename (car svn-status-files-to-commit))))) - (svn-status-create-arg-file svn-status-temp-arg-file "" - svn-status-files-to-commit "") - (svn-run t t 'commit "commit" - (unless svn-status-recursive-commit "--non-recursive") - "--targets" svn-status-temp-arg-file - "-F" svn-status-temp-file-to-remove - (when (eq svn-status-svn-file-coding-system 'utf-8) - '("--encoding" "UTF-8")) - svn-status-default-commit-arguments)) - (set-window-configuration svn-status-pre-commit-window-configuration) - (message "svn-log editing done"))) + (let ((svn-logedit-file-name)) + (save-excursion + (set-buffer (get-buffer svn-log-edit-buffer-name)) + (when svn-log-edit-insert-files-to-commit + (svn-log-edit-remove-comment-lines)) + (when (fboundp 'set-buffer-file-coding-system) + (set-buffer-file-coding-system svn-status-svn-file-coding-system nil)) + (when (or svn-log-edit-update-log-entry svn-status-files-to-commit) + (setq svn-log-edit-file-name (concat svn-status-temp-dir "svn-log-edit.txt" svn-temp-suffix)) + (setq svn-status-temp-file-to-remove (svn-expand-filename-for-remote-access svn-log-edit-file-name)) + (write-region (point-min) (point-max) svn-status-temp-file-to-remove nil 1)) + (bury-buffer)) + (if svn-log-edit-update-log-entry + (when (y-or-n-p "Update the log entry? ") + ;; svn propset svn:log --revprop -r11672 -F file + (svn-run nil t 'propset "propset" "svn:log" "--revprop" + (concat "-r" svn-log-edit-update-log-entry) + "-F" svn-log-edit-file-name) + (save-excursion + (set-buffer svn-process-buffer-name) + (message "%s" (buffer-substring (point-min) (- (point-max) 1))))) + (when svn-status-files-to-commit ; there are files to commit + (setq svn-status-operated-on-dot + (and (= 1 (length svn-status-files-to-commit)) + (string= "." (svn-status-line-info->filename (car svn-status-files-to-commit))))) + (svn-status-create-arg-file svn-status-temp-arg-file "" svn-status-files-to-commit "") + (svn-run t t 'commit "commit" + (unless svn-status-recursive-commit "--non-recursive") + "--targets" svn-status-temp-arg-file + "-F" svn-log-edit-file-name + (when (eq svn-status-svn-file-coding-system 'utf-8) + '("--encoding" "UTF-8")) + svn-status-default-commit-arguments)) + (set-window-configuration svn-status-pre-commit-window-configuration) + (message "svn-log editing done")))) (defun svn-log-edit-svn-diff (arg) "Show the diff we are about to commit. @@ -5136,7 +5255,7 @@ If ARG then show diff between some other version of the selected files." (let ((buf-size (- (point-max) (point-min)))) (save-excursion (goto-char (point-min)) - (insert "## Lines starting with '## ' will be removed from the log message.\n") + (insert svn-log-edit-header) (insert "## File(s) to commit" (if svn-status-recursive-commit " recursively" "") ":\n") (let ((file-list svn-status-files-to-commit)) @@ -5359,7 +5478,8 @@ Commands: "Mark the revision at point to be used as diff against revision." (interactive) (let ((start-pos) - (point-at-partner-rev)) + (point-at-partner-rev) + (overlay)) (dolist (ov (overlays-in (point-min) (point-max))) (when (overlay-get ov 'svn-log-partner-revision) (setq point-at-partner-rev (and (>= (point) (overlay-start ov)) @@ -5803,23 +5923,33 @@ The optional prefix argument ARG determines which switches are passed to `svn lo "Show statistics for the current blame buffer." (interactive) (let ((author-map (make-hash-table :test 'equal)) + (revision-map (make-hash-table :test 'equal)) + (rev-info) (author-list) - (author)) + (author) + (revision-list) + (revision)) (save-excursion (goto-char (point-min)) (while (not (eobp)) (dolist (ov (overlays-in (svn-point-at-bol) (line-end-position))) (when (overlay-get ov 'svn-blame-line-info) - (setq author (cadr (overlay-get ov 'rev-info))) - (svn-puthash author - (+ (gethash author author-map 0) 1) - author-map))) + (setq rev-info (overlay-get ov 'rev-info)) + (setq author (cadr rev-info)) + (setq revision (string-to-number (car rev-info))) + (svn-puthash author (+ (gethash author author-map 0) 1) author-map) + (svn-puthash revision (+ (gethash revision revision-map 0) 1) revision-map))) (forward-line)) (maphash '(lambda (key value) (add-to-list 'author-list (list key value))) author-map) + (maphash '(lambda (key value) (add-to-list 'revision-list (list key value))) revision-map) (pop-to-buffer (get-buffer-create (replace-regexp-in-string "svn-blame:" "svn-blame-statistics:" (buffer-name)))) (erase-buffer) + (insert (propertize "Authors:\n" 'face 'font-lock-function-name-face)) (dolist (line (sort author-list '(lambda (v1 v2) (> (cadr v1) (cadr v2))))) (insert (format "%s: %s line%s\n" (car line) (cadr line) (if (eq (cadr line) 1) "" "s")))) + (insert (propertize "\nRevisions:\n" 'face 'font-lock-function-name-face)) + (dolist (line (sort revision-list '(lambda (v1 v2) (< (car v1) (car v2))))) + (insert (format "%s: %s line%s\n" (car line) (cadr line) (if (eq (cadr line) 1) "" "s")))) (goto-char (point-min))))) (defun svn-blame-highlight-author-field (ov) diff --git a/sources b/sources index cfb214d..7be3354 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -e5109da756d74c7d98f683f004a539af subversion-1.6.6.tar.bz2 +75419159b50661092c4137449940b5cc subversion-1.6.11.tar.bz2 diff --git a/subversion-1.6.6-kwallet.patch b/subversion-1.6.6-kwallet.patch index f9de586..5c8edf8 100644 --- a/subversion-1.6.6-kwallet.patch +++ b/subversion-1.6.6-kwallet.patch @@ -19,7 +19,7 @@ kde4-config to report the directory which contains the .so files. LIBS="$LIBS $SVN_KWALLET_LIBS" qt_lib_dirs="`$PKG_CONFIG --libs-only-L QtCore QtDBus QtGui`" - LDFLAGS="$old_LDFLAGS $qt_lib_dirs -L$kde_dir/lib`$kde4_config --libsuffix`" -+ LDFLAGS="$old_LDFLAGS $qt_lib_dirs -L/usr/lib`$kde4_config --libsuffix`/kde4/devel" ++ LDFLAGS="$old_LDFLAGS $qt_lib_dirs -L$libdir/kde4/devel" AC_LANG(C++) AC_LINK_IFELSE([ #include diff --git a/subversion.spec b/subversion.spec index fb17988..a5f8bed 100644 --- a/subversion.spec +++ b/subversion.spec @@ -16,11 +16,11 @@ Summary: A Modern Concurrent Version Control System Name: subversion -Version: 1.6.6 +Version: 1.6.11 Release: 1%{?dist} License: ASL 1.1 Group: Development/Tools -URL: http://subversion.tigris.org/ +URL: http://subversion.apache.org/ Source0: http://subversion.tigris.org/downloads/subversion-%{version}.tar.bz2 Source1: subversion.conf Source3: filter-requires.sh @@ -170,6 +170,8 @@ if [ "$v" != "%{svn2cl_version}" ]; then exit 1 fi +mv tools/client-side/bash_completion . + %build # Regenerate the buildsystem, so that: # 1) patches applied to configure.in take effect @@ -192,7 +194,8 @@ export CC=gcc CXX=g++ JAVA_HOME=%{jdk_path} CFLAGS="$RPM_OPT_FLAGS" --disable-static --with-sasl=%{_prefix} \ --disable-neon-version-check \ --with-gnome-keyring \ - --with-kwallet + --with-kwallet \ + --with-berkeley-db || (cat config.log; exit 1) make %{?_smp_mflags} all make swig-py swig-py-lib %{swigdirs} make swig-pl swig-pl-lib swig-rb swig-rb-lib @@ -259,10 +262,11 @@ install -m 644 $RPM_SOURCE_DIR/psvn-init.el \ # Rename authz_svn INSTALL doc for docdir ln -f subversion/mod_authz_svn/INSTALL mod_authz_svn-INSTALL -# Trim exported dependencies to SVN and APR libraries only: +# Trim exported dependencies to APR libraries only: sed -i "/^dependency_libs/{ s, -l[^ ']*, ,g; - s,%{_libdir}/lib[^sa][^vp][^nr].*.la, ,g; + s, -L[^ ']*, ,g; + s,%{_libdir}/lib[^a][^p][^r][^ ']*.la, ,g; }" $RPM_BUILD_ROOT%{_libdir}/*.la # Install svn2cl @@ -274,7 +278,7 @@ install -Dpm 644 svn2cl.1 $RPM_BUILD_ROOT%{_mandir}/man1/svn2cl.1 popd # Install bash completion -install -Dpm 644 tools/client-side/bash_completion \ +install -Dpm 644 bash_completion \ $RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d/%{name} %find_lang %{name} @@ -318,8 +322,10 @@ rm -rf ${RPM_BUILD_ROOT} %doc contrib/client-side/svnmerge/*.{README,py} %doc contrib/client-side/wcgrep %{_bindir}/* +%exclude %{_bindir}/svn2cl %{_libdir}/libsvn_*.so.* %{_mandir}/man*/* +%exclude %{_mandir}/man1/svn2cl.1* %{python_sitearch}/svn %{python_sitearch}/libsvn %{_datadir}/emacs/site-lisp/*.el @@ -385,6 +391,31 @@ rm -rf ${RPM_BUILD_ROOT} %{_mandir}/man1/svn2cl.1* %changelog +* Sat Apr 17 2010 Joe Orton - 1.6.11-1 +- update to 1.6.11 + +* Sat Feb 13 2010 Joe Orton - 1.6.9-2 +- fix detection of libkdecore + +* Mon Feb 8 2010 Joe Orton - 1.6.9-1 +- update to 1.6.9 (#561810) +- fix comments in subversion.conf (#551484) +- update to psvn.el r40299 + +* Mon Jan 25 2010 Ville Skyttä - 1.6.6-5 +- Include svn2cl and its man page only in the -svn2cl subpackage (#558598). +- Do not include bash completion in docs, it's installed. + +* Mon Dec 7 2009 Stepan Kasal - 1.6.6-4 +- rebuild against perl 5.10.1 + +* Thu Nov 26 2009 Joe Orton - 1.6.6-3 +- rebuild for new db4 +- trim libsvn_* from dependency_libs in *.la + +* Wed Nov 25 2009 Kevin Kofler 1.6.6-2 +- rebuild for Qt 4.6.0 RC1 in F13 (was built against Beta 1 with unstable ABI) + * Sun Nov 8 2009 Joe Orton - 1.6.6-1 - update to 1.6.6 diff --git a/upstream-key.gpg b/upstream-key.gpg index 29b0207..2d68594 100644 --- a/upstream-key.gpg +++ b/upstream-key.gpg @@ -1259,3 +1259,599 @@ ePMv0mMRDHwkFCGAYG3VNPTu3kxjqXenc6CArh5UH7q2p44t6zdSJ4cfIyJrrREF 9ccVt/By4ioL6XI/gINS5/JCAJ4ixpserlf0PeelTtVrkLpHylWyhg== =/QO8 -----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.10 (GNU/Linux) + +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 +7er0at7C8YwwLvB0aEONMR81 +=RMom +-----END PGP PUBLIC KEY BLOCK-----