From a73eb47eadd2b5388b5ec8217d9a709c0dceb188 Mon Sep 17 00:00:00 2001 From: jorton Date: Apr 04 2006 09:21:08 +0000 Subject: - update to 1.3.1 - update to psvn.el r19138 (Stefan Reichoer) - build -java on s390 again --- diff --git a/psvn.el b/psvn.el index 80e21a1..7eb5c73 100644 --- a/psvn.el +++ b/psvn.el @@ -1,8 +1,8 @@ ;;; psvn.el --- Subversion interface for emacs -;; Copyright (C) 2002-2005 by Stefan Reichoer +;; Copyright (C) 2002-2006 by Stefan Reichoer ;; Author: Stefan Reichoer, -;; $Id: psvn.el 17921 2005-12-22 23:06:36Z xsteve $ +;; $Id: psvn.el 19138 2006-04-03 19:10:26Z 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 el3 with svn 1.1.1 +;; freebsd5, red hat el3 with svn 1.2.3 ;; psvn.el is an interface for the revision control tool subversion ;; (see http://subversion.tigris.org) @@ -185,7 +185,11 @@ ;;; Code: (require 'easymenu) -(require 'diff-mode nil t) + +(condition-case nil + (progn + (require 'diff-mode)) + (error nil)) ;;; user setable variables (defcustom svn-status-verbose t @@ -220,9 +224,11 @@ This can be toggled with \\[svn-status-toggle-hide-unmodified]." :type 'boolean :group 'psvn) (defcustom svn-status-sort-status-buffer t - "Sort the `svn-status-buffer-name' buffer. -Setting this variable to nil speeds up M-x svn-status. -However, it is possible, that the sorting is wrong in this case. + "*Whether to sort the `svn-status-buffer-name' buffer. + +Setting this variable to nil speeds up \[M-x svn-status], however the +listing may then become incorrect. + This can be toggled with \\[svn-status-toggle-sort-status-buffer]." :type 'boolean :group 'psvn) @@ -387,10 +393,11 @@ If you'd like to suppress whitespace changes use the following value: This can be set with \\[svn-status-set-trac-project-root].") (defvar svn-status-module-name nil - "A nice short name for the actual project. + "*A short name for the actual project. This can be set with \\[svn-status-set-module-name].") -(defvar svn-status-load-state-before-svn-status t "Load the ++psvn.state file, before running svn-status") +(defvar svn-status-load-state-before-svn-status t + "*Whether to automatically restore state from ++psvn.state file before running svn-status.") ;;; hooks (defvar svn-log-edit-mode-hook nil "Hook run when entering `svn-log-edit-mode'.") @@ -401,7 +408,7 @@ This can be set with \\[svn-status-set-module-name].") (defvar svn-status-coding-system nil "A special coding system is needed for the output of svn. -svn-status-coding-system is used in svn-run-svn, if it is not nil.") +svn-status-coding-system is used in svn-run, if it is not nil.") (defcustom svn-status-wash-control-M-in-process-buffers (eq system-type 'windows-nt) @@ -488,6 +495,7 @@ This is nil if the log entry is for a new commit.") (defvar svn-status-mode-line-process-edit-flag "") (defvar svn-status-edit-svn-command nil) (defvar svn-status-update-previous-process-output nil) +(defvar svn-pre-run-asynch-recent-keys nil) (defvar svn-status-temp-dir (expand-file-name (or @@ -579,7 +587,7 @@ See also `svn-status-short-mod-flag-p'." (((class color) (background light)) (:foreground "blue4")) (((class color) (background dark)) (:foreground "lightskyblue1")) (t (:weight bold))) - "Face for directories in svn status buffers. + "Face for directories in *svn-status* buffers. See `svn-status--line-info->directory-p' for what counts as a directory." :group 'psvn-faces) @@ -587,7 +595,7 @@ See `svn-status--line-info->directory-p' for what counts as a directory." (defface svn-status-filename-face '((((class color) (background light)) (:foreground "chocolate")) (((class color) (background dark)) (:foreground "beige"))) - "Face for non-directories in svn status buffers. + "Face for non-directories in *svn-status* buffers. See `svn-status--line-info->directory-p' for what counts as a directory." :group 'psvn-faces) @@ -709,6 +717,9 @@ Use this instead of `alist', for XEmacs 21.4 compatibility." ,value-type))))) widget)) + +;;; keymaps + (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) @@ -718,7 +729,9 @@ To bind this to a different key, customize `svn-status-prefix-key'.") (define-key svn-global-keymap (kbd "l") 'svn-status-show-svn-log) (define-key svn-global-keymap (kbd "u") 'svn-status-update-cmd) (define-key svn-global-keymap (kbd "=") 'svn-status-show-svn-diff) - (define-key svn-global-keymap (kbd "c") 'svn-status-commit)) + (define-key svn-global-keymap (kbd "c") 'svn-status-commit) + (define-key svn-global-keymap (kbd "b") 'svn-status-switch-to-status-buffer) + (define-key svn-global-keymap (kbd "o") 'svn-status-pop-to-status-buffer)) (defvar svn-status-diff-mode-map () "Keymap used in `svn-status-diff-mode' for additional commands that are not defined in diff-mode.") @@ -778,7 +791,9 @@ inside loops." ;;;###autoload (defun svn-status (dir &optional arg) "Examine the status of Subversion working copy in directory DIR. -If ARG then pass the -u argument to `svn status'." +If ARG is -, allow editing of the parameters. One could add -N to +run svn status non recursively to make it faster. +For every other non nil ARG pass the -u argument to `svn status'." (interactive (list (svn-read-directory-name "SVN status directory: " nil default-directory nil) current-prefix-arg)) @@ -805,16 +820,20 @@ If ARG then pass the -u argument to `svn status'." (setq svn-status-initial-window-configuration (current-window-configuration))) (let* ((status-buf (get-buffer-create svn-status-buffer-name)) (proc-buf (get-buffer-create "*svn-process*")) - (status-option (if svn-status-verbose - (if arg "-uv" "-v") - (if arg "-u" "")))) + (want-edit (eq arg '-)) + (status-option (if want-edit + (if svn-status-verbose "-v" "") + (if svn-status-verbose + (if arg "-uv" "-v") + (if arg "-u" "")))) + (svn-status-edit-svn-command (or want-edit svn-status-edit-svn-command))) (save-excursion (set-buffer status-buf) (setq default-directory dir) (set-buffer proc-buf) (setq default-directory dir svn-status-remote (when arg t)) - (svn-run-svn t t 'status "status" status-option))))) + (svn-run t t 'status "status" status-option))))) (defun svn-status-this-directory (arg) "Run `svn-status' for the `default-directory'" @@ -831,6 +850,9 @@ If ARG then pass the -u argument to `svn status'." (svn-status dir) (error "%s is not a directory" dir)))) +(defun svn-had-user-input-since-asynch-run () + (not (equal (recent-keys) svn-pre-run-asynch-recent-keys))) + (defun svn-process-environment () "Construct the environment for the svn process. It is a combination of `svn-status-svn-environment-var-list' and @@ -850,7 +872,7 @@ the usual `process-environment'." and when has-value collect elt)) -(defun svn-run-svn (run-asynchron clear-process-buffer cmdtype &rest arglist) +(defun svn-run (run-asynchron clear-process-buffer cmdtype &rest arglist) "Run svn with arguments ARGLIST. If RUN-ASYNCHRON is t then run svn asynchronously. @@ -866,19 +888,20 @@ for example: '(\"revert\" \"file1\"\) ARGLIST is flattened and any every nil value is discarded. If the variable `svn-status-edit-svn-command' is non-nil then the user -is prompted for give extra arguments, which are appended to ARGLIST." +can edit ARGLIST before running svn." (setq arglist (svn-status-flatten-list arglist)) (if (eq (process-status "svn") nil) (progn (when svn-status-edit-svn-command - (setq arglist (append arglist - (split-string - (read-from-minibuffer - (format "Run `svn %s' with extra arguments: " - (mapconcat 'identity arglist " ")))))) + (setq arglist (append + (list (car arglist)) + (split-string + (read-from-minibuffer + (format "svn %s flags: " (car arglist)) + (mapconcat 'identity (cdr arglist) " "))))) (when (eq svn-status-edit-svn-command t) (svn-status-toggle-edit-cmd-flag t)) - (message "svn-run-svn %s: %S" cmdtype arglist)) + (message "svn-run %s: %S" cmdtype arglist)) (let* ((proc-buf (get-buffer-create "*svn-process*")) (svn-exe svn-status-svn-executable) (svn-proc)) @@ -900,6 +923,7 @@ is prompted for give extra arguments, which are appended to ARGLIST." (if run-asynchron (progn ;;(message "running asynchron: %s %S" svn-exe arglist) + (setq svn-pre-run-asynch-recent-keys (recent-keys)) (let ((process-environment (svn-process-environment)) (process-connection-type nil)) ;; Communicate with the subprocess via pipes rather @@ -924,9 +948,10 @@ is prompted for give extra arguments, which are appended to ARGLIST." (svn-status-update-mode-line))))) (error "You can only run one svn process at once!"))) -(defun svn-process-sentinel-fixup-path-seperators() +(defun svn-process-sentinel-fixup-path-seperators () + "Convert all path separators to UNIX style. +\(This is a no-op unless `system-type' is windows-nt\)" (when (eq system-type 'windows-nt) - ;; convert path separator to UNIX style (save-excursion (goto-char (point-min)) (while (search-forward "\\" nil t) @@ -955,7 +980,9 @@ is prompted for give extra arguments, which are appended to ARGLIST." (setq svn-status-update-previous-process-output nil)) (when svn-status-display-new-status-buffer (set-window-configuration svn-status-initial-window-configuration) - (switch-to-buffer svn-status-buffer-name))) + (if (svn-had-user-input-since-asynch-run) + (message "svn status finished") + (switch-to-buffer svn-status-buffer-name)))) ((eq svn-process-cmd 'log) (svn-status-show-process-output 'log t) (pop-to-buffer svn-status-last-output-buffer-name) @@ -1038,7 +1065,7 @@ is prompted for give extra arguments, which are appended to ARGLIST." (goto-char (point-max)) (insert str) (save-excursion - (goto-char (line-beginning-position)) + (goto-char (svn-point-at-bol)) (when (looking-at "Password for '\\(.+\\)': ") ;(svn-status-show-process-buffer) (let ((passwd (read-passwd @@ -1464,7 +1491,7 @@ A and B must be line-info's." ["svn info" svn-status-info t] ["svn blame" svn-status-blame t])) (svn-status-face-set-temporary-during-popup - 'svn-status-marked-popup-face (line-beginning-position) (line-end-position) + 'svn-status-marked-popup-face (svn-point-at-bol) (svn-point-at-eol) svn-status-actual-popup-menu)))) (defun svn-status-face-set-temporary-during-popup (face begin end menu &optional prefix) @@ -1536,6 +1563,29 @@ in use before `svn-status' was called." (when (string= (buffer-name) svn-status-buffer-name) (bury-buffer)))))) +(defun svn-status-save-some-buffers (&optional tree) + "Save all buffers visiting a file in TREE. +If TREE is not given, try `svn-status-base-dir' as TREE." + (interactive) + (let ((ok t) + (tree (or (svn-status-base-dir) + tree))) + (unless tree + (error "Not in a svn project tree")) + (dolist (buffer (buffer-list)) + (with-current-buffer buffer + (when (buffer-modified-p) + (let ((file (buffer-file-name))) + (when file + (let ((root (svn-status-base-dir (file-name-directory file)))) + (when (and root + (string= root tree) + ;; buffer is modified and in the tree TREE. + (or (y-or-n-p (concat "Save buffer " (buffer-name) "? ")) + (setq ok nil))) + (save-buffer)))))))) + ok)) + (defun svn-status-find-files () "Open selected file(s) for editing. See `svn-status-marked-files' for what counts as selected." @@ -1793,6 +1843,8 @@ When called with the prefix argument 0, use the full path name." (setq tag-string " ")) ((equal action 'deleted) (setq tag-string " ")) + ((equal action 'replaced) + (setq tag-string " ")) ((equal action 'added-wc) (svn-status-line-info->set-filemark line-info ?A) (svn-status-line-info->set-localrev line-info 0)) @@ -1816,7 +1868,6 @@ When called with the prefix argument 0, use the full path name." ;; (svn-status-update-with-command-list '(("++ideas" committed) ("a.txt" committed) ("alf"))) ;; (svn-status-update-with-command-list (svn-status-parse-commit-output)) - (defun svn-status-parse-commit-output () "Parse the output of svn commit. Return a list that is suitable for `svn-status-update-with-command-list'" @@ -1838,6 +1889,8 @@ Return a list that is suitable for `svn-status-update-with-command-list'" (setq action 'added)) ((looking-at "Deleting") (setq action 'deleted)) + ((looking-at "Replacing") + (setq action 'replaced)) ((looking-at "Transmitting file data") (setq skip t)) ((looking-at "Committed revision \\([0-9]+\\)") @@ -1891,6 +1944,16 @@ Return a list that is suitable for `svn-status-update-with-command-list'" ;;(svn-status-parse-ar-output) ;; (svn-status-update-with-command-list (svn-status-parse-ar-output)) +(defun svn-status-line-info->symlink-p (line-info) + "Return non-nil if LINE-INFO refers to a symlink, nil otherwise. +The value is the name of the file to which it is linked. \(See +`file-symlink-p'.\) + +On win32 systems this won't work, even though symlinks are supported +by subversion on such systems." + ;; on win32 would need to see how svn does symlinks + (file-symlink-p (svn-status-line-info->filename line-info))) + (defun svn-status-line-info->directory-p (line-info) "Return t if LINE-INFO refers to a directory, nil otherwise. Symbolic links to directories count as directories (see `file-directory-p')." @@ -1941,7 +2004,24 @@ Symbolic links to directories count as directories (see `file-directory-p')." (svn-status-line-info->directory-p line-info) (svn-status-line-info->filename-nondirectory line-info) 'svn-status-directory-face - 'svn-status-filename-face))) + 'svn-status-filename-face) + ;; if it's a symlkink, add '-> target' + (let ((target (svn-status-line-info->symlink-p line-info))) + (when target + (concat " -> " + ;; add face to target: could maybe + ;; use different faces for + ;; unversioned targets? + (svn-status-choose-face-to-add + (file-directory-p target) + (file-relative-name + target + (svn-status-line-info->directory-containing-line-info + line-info t)); name relative to dir of line-info, not '.' + 'svn-status-directory-face + 'svn-status-filename-face) + ))) + )) (elide-hint (if (svn-status-line-info->show-user-elide-continuation line-info) " ..." ""))) (svn-puthash (svn-status-line-info->filename line-info) (point) @@ -2060,12 +2140,12 @@ Show the repository url after this call in the `svn-status-buffer-name' buffer. When called with the prefix argument 0, reset the information to nil. This hides the repository information again. -When ARG is t, don't update the svn status buffer. This useful for +When ARG is t, don't update the svn status buffer. This is useful for non-interactive use." (interactive "P") (if (eq arg 0) (setq svn-status-base-info nil) - (svn-run-svn nil t 'parse-info "info" ".") + (svn-run nil t 'parse-info "info" ".") (svn-status-parse-info-result)) (unless (eq arg t) (svn-status-update-buffer))) @@ -2167,7 +2247,9 @@ The result may be parsed with the various `svn-status-line-info->...' functions. (defun svn-status-get-file-list (use-marked-files) - "Get either the marked files or the files, where the cursor is on." + "Get either the selected files or the file under point. +USE-MARKED-FILES decides which we do. +See `svn-status-marked-files' for what counts as selected." (if use-marked-files (svn-status-marked-files) (list (svn-status-get-line-information)))) @@ -2176,6 +2258,8 @@ The result may be parsed with the various `svn-status-line-info->...' functions. (mapcar 'svn-status-line-info->filename (svn-status-get-file-list use-marked-files))) (defun svn-status-select-line () + "Return information about the file under point. +\(Only used for debugging\)" (interactive) (let ((info (svn-status-get-line-information))) (if info @@ -2184,6 +2268,7 @@ The result may be parsed with the various `svn-status-line-info->...' functions. (message "No file on this line")))) (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"))) @@ -2506,7 +2591,6 @@ Consider svn-status-window-alist to choose the buffer name." (other-window 1)) (svn-status-show-process-buffer-internal scroll-to-top))))) - (defun svn-status-show-svn-log (arg) "Run `svn log' on selected files. The output is put into the *svn-log* buffer @@ -2523,7 +2607,7 @@ See `svn-status-marked-files' for what counts as selected." (arg '("-v")) (t svn-status-default-log-arguments)))) (svn-status-create-arg-file svn-status-temp-arg-file "" (svn-status-marked-files) "") - (svn-run-svn t t 'log "log" "--targets" svn-status-temp-arg-file switches) + (svn-run t t 'log "log" "--targets" svn-status-temp-arg-file switches) (save-excursion (set-buffer "*svn-process*") (svn-log-view-mode)))) @@ -2533,14 +2617,14 @@ See `svn-status-marked-files' for what counts as selected." See `svn-status-marked-files' for what counts as selected." (interactive) (svn-status-create-arg-file svn-status-temp-arg-file "" (svn-status-marked-files) "") - (svn-run-svn t t 'info "info" "--targets" svn-status-temp-arg-file)) + (svn-run t t 'info "info" "--targets" svn-status-temp-arg-file)) ;; Todo: add possiblity to specify the revision (defun svn-status-blame () "Run `svn blame' on the current file." (interactive) - ;;(svn-run-svn t t 'blame "blame" "-r" "BASE" (svn-status-line-info->filename (svn-status-get-line-information)))) - (svn-run-svn t t 'blame "blame" (svn-status-line-info->filename (svn-status-get-line-information)))) + ;;(svn-run t t 'blame "blame" "-r" "BASE" (svn-status-line-info->filename (svn-status-get-line-information)))) + (svn-run t t 'blame "blame" (svn-status-line-info->filename (svn-status-get-line-information)))) (defun svn-status-show-svn-diff (arg) "Run `svn diff' on the current file. @@ -2580,7 +2664,7 @@ If ARG then prompt for revision to diff against, else compare working copy with (let ((clear-buf t) (beginning nil)) (dolist (line-info line-infos) - (svn-run-svn nil clear-buf 'diff "diff" svn-status-default-diff-arguments + (svn-run nil clear-buf 'diff "diff" svn-status-default-diff-arguments "-r" (if (eq revision :auto) (if (svn-status-line-info->update-available line-info) "HEAD" "BASE") @@ -2639,7 +2723,6 @@ Commands: major-mode mode-name) (diff-mode))) - (defun svn-status-show-process-buffer () "Show the content of the *svn-process* buffer" (interactive) @@ -2653,7 +2736,7 @@ When this function is called with a prefix argument, use the actual file instead (interactive "P") (message "adding: %S" (svn-status-get-file-list-names (not arg))) (svn-status-create-arg-file svn-status-temp-arg-file "" (svn-status-get-file-list (not arg)) "") - (svn-run-svn t t 'add "add" "--targets" svn-status-temp-arg-file)) + (svn-run t t 'add "add" "--targets" svn-status-temp-arg-file)) (defun svn-status-add-file (arg) "Run `svn add' on all selected files. @@ -2664,7 +2747,7 @@ When this function is called with a prefix argument, use the actual file instead (interactive "P") (message "adding: %S" (svn-status-get-file-list-names (not arg))) (svn-status-create-arg-file svn-status-temp-arg-file "" (svn-status-get-file-list (not arg)) "") - (svn-run-svn t t 'add "add" "--non-recursive" "--targets" svn-status-temp-arg-file)) + (svn-run t t 'add "add" "--non-recursive" "--targets" svn-status-temp-arg-file)) (defun svn-status-make-directory (dir) "Run `svn mkdir DIR'." @@ -2674,7 +2757,7 @@ When this function is called with a prefix argument, use the actual file instead (svn-status-directory-containing-point t)))) (unless (string-match "^[^:/]+://" dir) ; Is it a URI? (setq dir (file-relative-name dir))) - (svn-run-svn t t 'mkdir "mkdir" "--" dir)) + (svn-run t t 'mkdir "mkdir" "--" dir)) ;;TODO: write a svn-status-cp similar to this---maybe a common ;;function to do both? @@ -2703,7 +2786,8 @@ itself) before running mv." ;; file into. (setq dest (read-file-name (format "Rename %s to: " (svn-status-line-info->filename (car marked-files))) - (svn-status-directory-containing-point t))) + (svn-status-directory-containing-point t) + (svn-status-line-info->full-path (car marked-files)))) ;;multiple files selected, so prompt for existing directory to mv them into. (setq dest (svn-read-directory-name (format "Move %d files to directory: " num-of-files) (svn-status-directory-containing-point t) nil t)) @@ -2716,7 +2800,7 @@ itself) before running mv." ; ;;do the move: svn mv only lets us move things once at a time, so ;;we need to run svn mv once for each file (hence second arg to - ;;svn-run-svn is nil.) + ;;svn-run is nil.) ;;TODO: before doing any moving, For every marked directory, ;;ensure none of its contents are also marked, since we dont want @@ -2739,7 +2823,7 @@ itself) before running mv." (eq original-propmarks 77)) ;;original has local prop mods: maybe do `svn mv --force' (if (yes-or-no-p (format "%s has local modifications; use `--force' to really move it? " original-name)) - (svn-run-svn nil t 'mv "mv" "--force" "--" original-name dest) + (svn-run nil t 'mv "mv" "--force" "--" original-name dest) (message "Not moving %s" original-name))) ((eq original-filemarks 63) ;;original is unversioned: maybe do plain `mv' (if (yes-or-no-p (format "%s is unversioned. Use plain `mv -i %s %s'? " @@ -2751,12 +2835,12 @@ itself) before running mv." (message "Not moving %s (try committing it first)" original-name)) ((eq original-filemarks 32) ;;original is unmodified: can use `svn mv' - (svn-run-svn nil t 'mv "mv" "--" original-name dest)) + (svn-run nil t 'mv "mv" "--" original-name dest)) ;;file is conflicted in some way? (t (if (yes-or-no-p (format "The status of %s looks scary. Risk moving it anyway? " original-name)) - (svn-run-svn nil t 'mv "mv" "--" original-name dest) + (svn-run nil t 'mv "mv" "--" original-name dest) (message "Not moving %s" original-name)))))) (svn-status-update))) @@ -2772,7 +2856,7 @@ See `svn-status-marked-files' for what counts as selected." (format "Revert %d files? " num-of-files))) (message "reverting: %S" (svn-status-marked-file-names)) (svn-status-create-arg-file svn-status-temp-arg-file "" (svn-status-marked-files) "") - (svn-run-svn t t 'revert "revert" "--targets" svn-status-temp-arg-file)))) + (svn-run t t 'revert "revert" "--targets" svn-status-temp-arg-file)))) (defun svn-status-rm (force) "Run `svn rm' on all selected files. @@ -2788,15 +2872,15 @@ When called with a prefix argument add the command line switch --force." (message "removing: %S" (svn-status-marked-file-names)) (svn-status-create-arg-file svn-status-temp-arg-file "" (svn-status-marked-files) "") (if force - (svn-run-svn t t 'rm "rm" "--force" "--targets" svn-status-temp-arg-file) - (svn-run-svn t t 'rm "rm" "--targets" svn-status-temp-arg-file))))) + (svn-run t t 'rm "rm" "--force" "--targets" svn-status-temp-arg-file) + (svn-run t t 'rm "rm" "--targets" svn-status-temp-arg-file))))) (defun svn-status-update-cmd () "Run svn update." (interactive) (message "Running svn-update for %s" default-directory) ;TODO: use file names also - (svn-run-svn t t 'update "update")) + (svn-run t t 'update "update")) (defun svn-status-commit () "Commit selected files. @@ -2805,6 +2889,7 @@ this is because marking a directory with \\[svn-status-set-user-mark] normally marks all of its files as well. If no files have been marked, commit recursively the file at point." (interactive) + (svn-status-save-some-buffers) (let* ((selected-files (svn-status-marked-files)) (marked-files-p (svn-status-some-files-marked-p))) (setq svn-status-files-to-commit selected-files @@ -2827,6 +2912,16 @@ If no files have been marked, commit recursively the file at point." (insert-file-contents svn-log-edit-file-name))) (svn-log-edit-mode))) +(defun svn-status-switch-to-status-buffer () + "Switch to the `svn-status-buffer-name' buffer." + (interactive) + (switch-to-buffer svn-status-buffer-name)) + +(defun svn-status-pop-to-status-buffer () + "Pop to the `svn-status-buffer-name' buffer." + (interactive) + (pop-to-buffer svn-status-buffer-name)) + (defun svn-status-export () "Run `svn export' for the current working copy. Ask the user for the destination path. @@ -2835,7 +2930,7 @@ Ask the user for the destination path. (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)) + (svn-run 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) @@ -2847,7 +2942,7 @@ When this function is called with a prefix argument, use the actual file instead (if file-names (progn (message "svn-status-cleanup %S" file-names) - (svn-run-svn t t 'cleanup (append (list "cleanup") file-names))) + (svn-run t t 'cleanup (append (list "cleanup") file-names))) (message "No valid file selected - No status cleanup possible")))) (defun svn-status-resolved () @@ -2862,7 +2957,7 @@ See `svn-status-marked-files' for what counts as selected." (format "Resolve %d files? " num-of-files))) (message "resolving: %S" (svn-status-marked-file-names)) (svn-status-create-arg-file svn-status-temp-arg-file "" (svn-status-marked-files) "") - (svn-run-svn t t 'resolved "resolved" "--targets" svn-status-temp-arg-file)))) + (svn-run t t 'resolved "resolved" "--targets" svn-status-temp-arg-file)))) (defun svn-status-svnversion () @@ -3008,7 +3103,7 @@ names are relative to the directory where `svn-status' was run." (file-name-nondirectory file-name) ".svn-base")) (progn - (svn-run-svn nil t 'cat "cat" "-r" revision file-name) + (svn-run nil t 'cat "cat" "-r" revision file-name) ;;todo: error processing ;;svn: Filesystem has no item ;;svn: file not found: revision `15', path `/trunk/file.txt' @@ -3098,12 +3193,12 @@ Note: use C-q C-j to send a line termination character." (let ((file-names (svn-status-marked-file-names))) (if file-names (progn - (svn-run-svn t t 'proplist (append (list "proplist" "-v") file-names))) + (svn-run t t 'proplist (append (list "proplist" "-v") file-names))) (message "No valid file selected - No property listing possible")))) (defun svn-status-proplist-start () (svn-status-ensure-cursor-on-file) - (svn-run-svn t t 'proplist-parse "proplist" (svn-status-line-info->filename + (svn-run t t 'proplist-parse "proplist" (svn-status-line-info->filename (svn-status-get-line-information)))) (defun svn-status-property-edit-one-entry (arg) "Edit a property. @@ -3158,7 +3253,7 @@ When called with a prefix argument, it is possible to enter a new property." (svn-status-marked-file-names)) (let ((file-names (svn-status-marked-file-names))) (when file-names - (svn-run-svn nil t 'propset + (svn-run nil t 'propset (append (list "propset" prop-name prop-value) file-names)) ) ) @@ -3173,7 +3268,7 @@ When called with a prefix argument, it is possible to enter a new property." (let ((file-names (svn-status-marked-file-names))) (when file-names (message "Going to delete prop %s for %s" prop-name file-names) - (svn-run-svn t t 'propdel + (svn-run t t 'propdel (append (list "propdel" prop-name) file-names)))))))))) (defun svn-status-property-edit (file-info-list prop-name &optional new-prop-value) @@ -3183,7 +3278,7 @@ When called with a prefix argument, it is possible to enter a new property." (file-name (svn-status-line-info->filename (car file-info-list))) (prop-value)) (message "Edit property %s for file %s" prop-name file-name) - (svn-run-svn nil t 'propget-parse "propget" prop-name file-name) + (svn-run nil t 'propget-parse "propget" prop-name file-name) (save-excursion (set-buffer "*svn-process*") (setq prop-value (if (> (point-max) 1) @@ -3388,7 +3483,7 @@ Commands: (svn-status-create-arg-file svn-status-temp-arg-file "" svn-status-propedit-file-list "") (setq svn-status-propedit-file-list nil) - (svn-run-svn async t 'propset "propset" + (svn-run async t 'propset "propset" svn-status-propedit-property-name "--targets" svn-status-temp-arg-file "-F" (concat svn-status-temp-dir "svn-prop-edit.txt" svn-temp-suffix)) @@ -3426,7 +3521,6 @@ Commands: (define-derived-mode svn-log-edit-mode log-edit-mode "svn-log-edit" "Wrapper around `log-edit-mode' for psvn.el" (easy-menu-add svn-log-edit-mode-menu) - (run-hooks 'svn-log-edit-mode-hook) (setq svn-log-edit-update-log-entry nil) (set (make-local-variable 'log-edit-callback) 'svn-log-edit-done) (set (make-local-variable 'log-edit-listfun) 'svn-log-edit-files-to-commit) @@ -3479,6 +3573,7 @@ Commands: (defun svn-log-edit-done () (interactive) + (svn-status-save-some-buffers) (save-excursion (set-buffer (get-buffer "*svn-log-edit*")) (when svn-log-edit-insert-files-to-commit @@ -3488,11 +3583,12 @@ Commands: (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))) + (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-svn nil t 'propset "propset" "svn:log" "--revprop" + (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 @@ -3504,7 +3600,7 @@ Commands: (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-svn t t 'commit "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 @@ -3592,18 +3688,38 @@ If ARG then show diff between some other version of the selected files." (define-key svn-log-view-mode-map (kbd "e") 'svn-log-edit-log-entry) (define-key svn-log-view-mode-map (kbd "q") 'bury-buffer)) +(defvar svn-log-view-popup-menu-map () + "Keymap used to show popup menu in `svn-log-view-mode' buffers.") +(put 'svn-log-view-popup-menu-map 'risky-local-variable t) ;for Emacs 20.7 +(when (not svn-log-view-popup-menu-map) + (setq svn-log-view-popup-menu-map (make-sparse-keymap)) + (suppress-keymap svn-log-view-popup-menu-map) + (define-key svn-log-view-popup-menu-map [down-mouse-3] 'svn-log-view-popup-menu)) + (easy-menu-define svn-log-view-mode-menu svn-log-view-mode-map "'svn-log-view-mode' menu" '("SVN-LogView" ["Show Changeset" svn-log-view-diff t] ["Edit log message" svn-log-edit-log-entry t])) +(defun svn-log-view-popup-menu (event) + (interactive "e") + (mouse-set-point event) + (let* ((rev (svn-log-revision-at-point))) + (when rev + (svn-status-face-set-temporary-during-popup + 'svn-status-marked-popup-face (svn-point-at-bol) (svn-point-at-eol) + svn-log-view-mode-menu)))) + (defvar svn-log-view-font-lock-keywords - '(("^r.+" . font-lock-keyword-face) - "Keywords in svn-log-view-mode.")) + '(("^r[0-9]+ .+" (0 `(face + font-lock-keyword-face + mouse-face + highlight + keymap ,svn-log-view-popup-menu-map)))) + "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" "Major Mode to show the output from svn log. Commands: @@ -3637,7 +3753,7 @@ When called with a prefix argument, ask the user for the revision." (rev-arg (concat lower-rev ":" upper-rev))) (when arg (setq rev-arg (read-string "Revision for changeset: " rev-arg))) - (svn-run-svn nil t 'diff "diff" (concat "-r" rev-arg)) + (svn-run nil t 'diff "diff" (concat "-r" rev-arg)) (svn-status-activate-diff-mode))) (defun svn-log-edit-log-entry () @@ -3645,7 +3761,7 @@ When called with a prefix argument, ask the user for the revision." (interactive) (let ((rev (svn-log-revision-at-point)) (log-message)) - (svn-run-svn nil t 'propget-parse "propget" "--revprop" (concat "-r" rev) "svn:log") + (svn-run nil t 'propget-parse "propget" "--revprop" (concat "-r" rev) "svn:log") (save-excursion (set-buffer "*svn-process*") (setq log-message (if (> (point-max) 1) @@ -3663,19 +3779,24 @@ When called with a prefix argument, ask the user for the revision." ;; svn status persistent options ;; -------------------------------------------------------------------------------- -(defun svn-status-base-dir () - (let ((base-dir (expand-file-name default-directory)) - (dot-svn-dir) - (dir-below (expand-file-name default-directory))) - (setq dot-svn-dir (concat base-dir (svn-wc-adm-dir-name))) +(defun svn-status-base-dir (&optional start-directory) + "Find the svn root directory for the current working copy. +Return nil, if not in a svn working copy." + (let* ((base-dir (expand-file-name (or start-directory default-directory))) + (dot-svn-dir (concat base-dir (svn-wc-adm-dir-name))) + (in-tree (file-exists-p dot-svn-dir)) + (dir-below (expand-file-name default-directory))) (while (when (and dir-below (file-exists-p dot-svn-dir)) (setq base-dir (file-name-directory dot-svn-dir)) (string-match "\\(.+/\\).+/" dir-below) - (setq dir-below (match-string 1 dir-below)) + (setq dir-below + (and (string-match "\(.*/\)[^/]+/" dir-below) + (match-string 1 dir-below))) (setq dot-svn-dir (concat dir-below (svn-wc-adm-dir-name))))) - base-dir)) + (and in-tree base-dir))) (defun svn-status-save-state () + "Save psvn persistent options for this working copy to a file." (interactive) (let ((buf (find-file (concat (svn-status-base-dir) "++psvn.state")))) (erase-buffer) ;Widen, because we'll save the whole buffer. @@ -3690,6 +3811,7 @@ When called with a prefix argument, ask the user for the revision." (kill-buffer buf))) (defun svn-status-load-state (&optional no-error) + "Load psvn persistent options for this working copy from a file." (interactive) (let ((file (concat (svn-status-base-dir) "++psvn.state"))) (if (file-readable-p file) @@ -3709,14 +3831,16 @@ When called with a prefix argument, ask the user for the revision." (unless no-error (error "psvn.el: %s is not readable." file))))) (defun svn-status-toggle-sort-status-buffer () - "If you turn off sorting, you can speed up M-x svn-status. -However, the buffer is not correct sorted then. -This function will be removed again, when a faster parsing and -display routine for svn-status is available." + "Toggle sorting of the *svn-status* buffer. + +If you turn off sorting, you can speed up \[svn-status]. However, +the buffer is not correctly sorted then. This function will be +removed again, when a faster parsing and display routine for +`svn-status' is available." (interactive) (setq svn-status-sort-status-buffer (not svn-status-sort-status-buffer)) - (message "The %s buffer will be%s sorted." svn-status-buffer-name - (if svn-status-sort-status-buffer "" " not"))) + (message "The %s buffer will %sbe sorted." svn-status-buffer-name + (if svn-status-sort-status-buffer "" "not "))) (defun svn-status-toggle-display-full-path () "Toggle displaying the full path in the `svn-status-buffer-name' buffer" diff --git a/sources b/sources index 8dd42ab..7b44939 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -0d91a7fe152d0373044c47c54deb2c9a subversion-1.3.0.tar.gz +6d650e918255596ef8b74255b3938547 subversion-1.3.1.tar.gz diff --git a/subversion.spec b/subversion.spec index fe18c1f..1fc615f 100644 --- a/subversion.spec +++ b/subversion.spec @@ -2,8 +2,8 @@ %define make_check 1 %ifarch s390 -# weird gjnih error on s390 -%define with_java 0 +# weird gjnih error on s390? +%define with_java 1 %else %define with_java 1 %endif @@ -15,8 +15,8 @@ Summary: Modern Version Control System designed to replace CVS Name: subversion -Version: 1.3.0 -Release: 5 +Version: 1.3.1 +Release: 3 License: BSD Group: Development/Tools URL: http://subversion.tigris.org/ @@ -24,7 +24,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-1.3.0-neonver.patch Patch2: subversion-0.20.1-deplibs.patch Patch3: subversion-0.31.0-rpath.patch Patch6: subversion-1.0.3-pie.patch @@ -102,7 +101,6 @@ This package includes the Ruby bindings to the Subversion libraries. %prep %setup -q -%patch1 -p1 -b .neonver %patch2 -p1 -b .deplibs %patch3 -p1 -b .rpath %patch6 -p1 -b .pie @@ -253,6 +251,11 @@ rm -rf ${RPM_BUILD_ROOT} %endif %changelog +* Tue Apr 4 2006 Joe Orton 1.3.1-3 +- update to 1.3.1 +- update to psvn.el r19138 (Stefan Reichoer) +- build -java on s390 again + * Thu Feb 16 2006 Florian La Roche - 1.3.0-5 - do not package libs within subversion-ruby, these are already available via the main package diff --git a/upstream b/upstream index d572b24..23bd82a 100644 --- a/upstream +++ b/upstream @@ -1 +1 @@ -subversion-1.3.0.tar.gz +subversion-1.3.1.tar.gz diff --git a/upstream-key.gpg b/upstream-key.gpg index 815f35d..971ac51 100644 --- a/upstream-key.gpg +++ b/upstream-key.gpg @@ -1,5 +1,5 @@ -----BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.1 (GNU/Linux) +Version: GnuPG v1.4.2.2 (GNU/Linux) mQGiBDZHWLsRBACtzInKFFsS4RgRU4NTxvDXWcrasf8Bilpz2+BYqTl+TbKQETkc 181PYu3sApuIuXwlya4X5bCceo+yThdM8dN+4nktDLl3i6E2+tXfAsIR6MEQWzsI @@ -92,140 +92,381 @@ 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 -n3XvPxBbvJUFwy3Y7bEr4YW/Cy9f -=4sB1 +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 +ue5s0DtZ1WJgpzQU +=0Kc2 -----END PGP PUBLIC KEY BLOCK-----