You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Shun-ichi GOTO <go...@taiyo.co.jp> on 2003/06/07 14:07:56 UTC

psvn.el, some patches

Hi,

I've started using subversion mainly instead of cvs.
I'm living on Windows and using Meadow (yet another Emacs for Windows).

There's some patch for psvn.el.

ChangeLog:
2003-06-06  Shun-ichi GOTO  <go...@taiyo.co.jp>

	* psvn.el (svn-process-sentinel): For windows environment, convert
	path separator as UNIX (Emacs) style.
	(svn-process-sentinel): Do not show event symbol name reporting
	except not handled.
	(svn-parse-status-result): Parse status line with format not using
	`split-string' to treat a filename which contains spaces. And also
        "A  +" status line format can be handled correctly.


I think the modification about `svn-parse-status-result' clears a one 
of TODO.

 ;; * Parse the following line correct:
 ;;  A  +            -       ?          ?    ./psvn.el -- show the + also


Index: psvn.el
===================================================================
RCS file: /usr/home/gotoh/Repository/lisp/psvn.el,v
retrieving revision 1.3
diff -u -u -F^.def -r1.3 psvn.el
--- psvn.el	5 Jun 2003 16:41:21 -0000	1.3
+++ psvn.el	7 Jun 2003 14:07:09 -0000
@@ -202,7 +202,7 @@ (defun svn-status (dir &optional arg)
   (setq svn-status-directory-history (delete dir svn-status-directory-history))
   (add-to-list 'svn-status-directory-history dir)
   (unless (string= (buffer-name) "*svn-status*")
-    (message "psvn: Saving initial window configuration")
+    ;;(message "psvn: Saving initial window configuration")
     (setq svn-status-initial-window-configuration (current-window-configuration)))
   (let* ((status-buf (get-buffer-create "*svn-status*"))
          (proc-buf (get-buffer-create "*svn-process*")))
@@ -271,6 +271,12 @@ (defun svn-process-sentinel (process eve
         (progn
           (cond ((eq svn-process-cmd 'status)
                  ;;(message "svn status finished")
+                 (if (eq system-type 'windows-nt)
+                     ;; convert path separator as UNIX style
+                     (save-excursion
+                       (goto-char 1)
+                       (while (search-forward "\\" nil t)
+                         (replace-match "/"))))
                  (svn-parse-status-result)
                  (set-buffer act-buf)
                  (svn-status-update-buffer))
@@ -319,75 +325,72 @@ (defun svn-process-sentinel (process eve
                 ((eq svn-process-cmd 'propset)
                  (svn-status-update))
                 ((eq svn-process-cmd 'propdel)
-                 (svn-status-update)))
-          (message "svn-process had event: %s" event))
+                 (svn-status-update))
+                (t
+                 (message "svn-process had event: %s" event))))
       ;;(message (format "SVN Error: :%s:" event))
       (svn-status-show-process-buffer-internal t))))
 
+(defun svn-parse-rev-num (str)
+  (if (and str (stringp str) 
+           (save-match-data (string-match "^[0-9]+" str)))
+      (string-to-number str)
+    -1))
+
 (defun svn-parse-status-result ()
   (setq svn-status-head-revision nil)
   (save-excursion
     (let ((old-marked-files (svn-status-marked-file-names))
           (line-string)
           (user-mark)
-          (file-svn-info)
+          (svn-marks)
           (svn-file-mark)
           (svn-property-mark)
+          (svn-update-mark)             ; to be update?
           (local-rev)
           (last-change-rev)
-          (modified-external)
           (author)
           (path))
       (set-buffer "*svn-process*")
       (setq svn-status-info nil)
       (goto-char (point-min))
       (while (> (- (point-at-eol) (point-at-bol)) 0)
-        (setq modified-external nil)
-        (setq line-string (buffer-substring-no-properties
-                           (point-at-bol)
-                           (point-at-eol)))
-        (if (string-match "Head revision:[ ]+\\([0-9]+\\)" line-string)
-            (setq svn-status-head-revision (match-string 1 line-string))
-          (setq file-svn-info (append (list (substring line-string 0 4))
-                                      (if svn-xemacsp
-                                          (cdr (split-string (substring line-string 5)))
-                                        (split-string (substring line-string 5)))))
-          (when (string= (nth 1 file-svn-info) "*")
-            (setq modified-external t)
-            ; remove the (nth 1) entry
-            (setq file-svn-info (append
-                                 (list (car file-svn-info))
-                                 ; nth 1 removed
-                                 (cddr file-svn-info))))
-          (setq svn-file-mark (string-to-char (car file-svn-info)))
-          (setq svn-property-mark (string-to-char (substring (car file-svn-info) 1)))
-          (when (eq svn-property-mark 0) (setq svn-property-mark nil))
-          ;is this necessary?
+        (if (looking-at "Head revision:[ ]+\\([0-9]+\\)")
+            (setq svn-status-head-revision (match-string 1))
+          (setq svn-marks (buffer-substring (point) (+ (point) 8))
+                svn-file-mark (elt svn-marks 0) ; 1st column
+                svn-property-mark (elt svn-marks 1)) ; 2nd column
           (when (eq svn-property-mark ?\ ) (setq svn-property-mark nil))
-          (cond ((eq svn-file-mark ??)
-                 (setq path (nth 1 file-svn-info)
-                       local-rev -1
-                       last-change-rev -1
-                       author "?"))
-                (t
-                 (setq path (nth 4 file-svn-info)
-                       local-rev (string-to-number (nth 1 file-svn-info))
-                       last-change-rev (string-to-number (nth 2 file-svn-info))
-                       author (nth 3 file-svn-info))))
+          (when (eq svn-update-mark ?\ ) (setq svn-update-mark nil))
+          (forward-char 8)
+          (skip-chars-forward " ")
+          (cond
+           ((looking-at "\\([-?]\\|[0-9]+\\) +\\([-?]\\|[0-9]+\\) +\\([^ ]+\\) *\\(.+\\)")
+            (setq local-rev (svn-parse-rev-num (match-string 1))
+                  last-change-rev (svn-parse-rev-num (match-string 2))
+                  author (match-string 3)
+                  path (match-string 4)))
+           ((looking-at "\\(.*\\)")
+            (setq path (match-string 1)
+                  local-rev -1
+                  last-change-rev -1
+                  author "?"))
+           (t
+            (error "Unknown status line format."))))
           (unless path (setq path "."))
           (setq user-mark (not (not (member path old-marked-files))))
-          (setq svn-status-info (append svn-status-info
-                                        (list
-                                         (list user-mark
-                                               svn-file-mark
-                                               svn-property-mark
-                                               path
-                                               local-rev
-                                               last-change-rev
-                                               author
-                                               modified-external)))))
+          (setq svn-status-info (cons (list user-mark
+                                            svn-file-mark
+                                            svn-property-mark
+                                            path
+                                            local-rev
+                                            last-change-rev
+                                            author
+                                            svn-update-mark)
+                                      svn-status-info))
                                                ;;file-svn-info
-          (next-line 1)))))
+          (forward-line 1))
+      (setq svn-status-info (nreverse svn-status-info)))))
 
 (condition-case nil
     ;;(easy-menu-add-item nil '("tools") ["SVN Status" svn-status t] "PCL-CVS")

--- Regards,
 Shun-ichi Goto  <go...@taiyo.co.jp>
   R&D Group, TAIYO Corp., Tokyo, JAPAN

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: psvn.el, some patches

Posted by Stefan Reichör <xs...@riic.at>.
On Sat, 07 Jun 2003, Shun-ichi GOTO uttered the following:

>  Hi,
>  
>  I've started using subversion mainly instead of cvs. I'm living on
>  Windows and using Meadow (yet another Emacs for Windows).
>  
>  There's some patch for psvn.el.
>  
>  ChangeLog:
>  2003-06-06  Shun-ichi GOTO  <go...@taiyo.co.jp>
>  
>  	* psvn.el (svn-process-sentinel): For windows environment, convert
>  	path separator as UNIX (Emacs) style.
>  	(svn-process-sentinel): Do not show event symbol name reporting
>  	except not handled.
>  	(svn-parse-status-result): Parse status line with format not using
>  	`split-string' to treat a filename which contains spaces. And also
>          "A  +" status line format can be handled correctly.
>  
>  
>  I think the modification about `svn-parse-status-result' clears a
>  one of TODO.
>  
>   ;; * Parse the following line correct: A + - ? ? ./psvn.el -- show
>   ;;  the + also
>  

Thanks for your patch!

I will look at it and I will incorporate your changes in the next days.

Stefan.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org