Some patches to the Emacs interface in 4.1.0

Raymond Scholz <[email protected]> Mon, 07 Nov 2005 12:23:01 +0100
Newsgroups gmane.comp.bug-tracking.gnats.bugs
Organization Verified Systems International GmbH
Message-ID <[email protected]>
Hi,

my colleague spent some time on fixing some shortcomings of the Emacs
interface in 4.1.0. Kudos go to Oli M=F6ller.

Cheers, Ray

1. Killed buffers
------------------------------
Sometimes kill-buffer was invoked with nil argument, killing the
current buffer.

--- SOURCES/gnats-4.1.0/gnats-4.1.0.orig/gnats/gnats.el	2002-08-04 19:16:=
29.000000000 +0200
+++ gnats.el	2005-11-07 11:24:24.497674390 +0100
@@ -1329,7 +1358,8 @@
 	      (switch-to-buffer query-pr-buffer)
 	      (error "Couldn't retrieve server info")))
 	(error "Couldn't retrieve server info from query-pr"))
-      (kill-buffer query-pr-buffer))))
+      (if query-pr-buffer
+	  (kill-buffer query-pr-buffer)))))
=20
 ;;;###autoload
 (defun send-pr (&optional arg)
@@ -1356,7 +1386,8 @@
 	  (setq success t))
       (if (not success)
 	  (progn
-	    (kill-buffer edit-buffer)
+	    (if edit-buffer=20
+		(kill-buffer edit-buffer))
 	    (kill-buffer (get gnats-server-conn 'server-buffer)))
 	(switch-to-buffer edit-buffer)
 	(goto-char (point-min))))))
@@ -1386,7 +1417,8 @@
 		(setq success t))))
       (if (not success)
 	  (progn
-	    (kill-buffer edit-buffer)
+	    (if edit-buffer
+		(kill-buffer edit-buffer))
 	    (kill-buffer (get gnats-server-conn 'server-buffer)))
 	(switch-to-buffer edit-buffer)
 	(goto-char (point-min))))))
@@ -1535,7 +1573,8 @@
 		(setq success t))))
       (if (not success)
 	  (progn
-	    (kill-buffer edit-buffer)
+	    (if edit-buffer
+		(kill-buffer edit-buffer))
 	    (kill-buffer (get gnats-server-conn 'server-buffer)))
 	(switch-to-buffer edit-buffer)
 	(goto-char (point-min))))))
@@ -1600,7 +1645,8 @@
 	  (setq success t))
       (if (not success)
 	  (progn
-	    (kill-buffer query-buffer)
+	    (if query-buffer
+		(kill-buffer query-buffer))
 	    (kill-buffer (get gnats-server-conn 'server-buffer)))
 	(switch-to-buffer query-buffer)
 	(message "%d matching PRs." (count-lines (point-min) (point-max)))

2. Server reponse
-----------------
Response code 300..351 considered "ok".

--- SOURCES/gnats-4.1.0/gnats-4.1.0.orig/gnats/gnats.el	2002-08-04 19:16:=
29.000000000 +0200
+++ gnats.el	2005-11-07 11:24:24.497674390 +0100
@@ -442,7 +454,7 @@
 Return either the error message from the server, or nil if the response
 indicates that the operation was successful."
   (if (and (>=3D (car (car resp)) 200)
-	   (< (car (car resp)) 300))
+	   (<=3D (car (car resp)) 351))
       nil
     (concat (nth 1 (car resp)) "\n")))
=20
@@ -491,7 +503,8 @@
   (let ((field-list (get gnats-server-conn 'field-list))
 	(validate-res (mapconcat 'gnats-validate-field
 				 (get gnats-server-conn 'field-list)
-				 "")))
+				 ""))
+	(server-resp nil))
     (if (not (string=3D validate-res ""))
 	(error validate-res))
     (while field-list


3. Edit and submit
------------------------------------
Switch to view mode after edit and correctly display server response
after submit.  It occurred that the user was unsure about the status
of a submission and unintentionally submitted it again and again...


--- SOURCES/gnats-4.1.0/gnats-4.1.0.orig/gnats/gnats.el	2002-08-04 19:16:=
29.000000000 +0200
+++ gnats.el	2005-11-07 11:24:24.497674390 +0100
@@ -505,7 +518,8 @@
 	(setq field-list (cdr field-list))))
     (gnats-clear-edit-buffer)
     (gnats-get-pr (get gnats-server-conn 'pr-number))
-    (gnats-edit-mode t)))
+    (gnats-view-mode)
+    (message "Changes submitted - switched back to view mode.")))
=20
 (defun gnats-apply-or-submit ()
   "If in edit mode apply the current set of changes, or submit the new P=
R."
@@ -535,17 +549,24 @@
 			"\n")))
 	(setq field-list (cdr field-list)))
       res)))
+(defun gnats-server-resp-to-string (server-resp)
+  "Convert a server respons \(list of lists) to a string."
+  (apply #'concat (mapcar #'cadr server-resp)))
+
=20
 (defun gnats-submit-pr ()
   "Submit the current PR; if successful, the buffer is killed."
   (let* ((pr-contents (gnats-get-pr-contents))
 	 (server-resp
-	  (gnats-server-response-ok
-	   (gnats-send-command-and-text "SUBM" pr-contents))))
-    (if server-resp
-	(error server-resp)
-      ;(kill-buffer (get gnats-server-conn 'server-buffer))
-      (message "PR successfully submitted."))))
+	   (gnats-send-command-and-text "SUBM" pr-contents))
+	 (server-resp-fail
+	  (gnats-server-response-ok server-resp)))
+    (if server-resp-fail
+	(error (gnats-server-resp-to-string server-resp))
+	; (kill-buffer (get gnats-server-conn 'server-buffer))
+	(progn
+	  (kill-buffer nil)=20
+	  (message (format "PR successfully submitted: %s" (gnats-server-resp-t=
o-string server-resp)))))))


4. Missing user name in audit trail
-----------------------------------
Audit trail entries of actions performed via the Emacs interface were
missing the user name.  Something is wrong with the code in
`gnats-get-mail-alias'.  This patch is only a work-around and ALWAYS
uses the username from the server.  The real solution would be to find
out why (gnats-send-command "ADMV" "builtinfield:responsible") returns
an empty string.

--- SOURCES/gnats-4.1.0/gnats-4.1.0.orig/gnats/gnats.el	2002-08-04 19:16:=
29.000000000 +0200
+++ gnats.el	2005-11-07 11:24:24.497674390 +0100
@@ -1225,6 +1247,8 @@
 			 (< (car (car resp)) 400))
 		    (nth 1 (car resp))
 		  user-mail-address)))
+;;    (setq alias user-mail-address)
+    (setq alias (get gnats-server-conn 'server-username))
     (put gnats-server-conn 'mail-alias alias)
     (when alias
       (gnats-send-command "EDITADDR" alias))

5. Additional keys for view-mode
--------------------------------

--- SOURCES/gnats-4.1.0/gnats-4.1.0.orig/gnats/gnats.el	2002-08-04 19:16:=
29.000000000 +0200
+++ gnats.el	2005-11-07 11:24:24.497674390 +0100
@@ -1459,7 +1486,13 @@
   "Keymap for GNATS view mode.")
 (when (null gnats-view-mode-map)
   (setq gnats-view-mode-map (make-keymap))
-  (define-key gnats-view-mode-map "e" 'gnats-view-edit-pr))
+  (define-key gnats-view-mode-map "e" 'gnats-view-edit-pr)
+  (define-key gnats-view-mode-map "D" 'gnats-change-database)
+  (define-key gnats-view-mode-map "g" 'gnats-query-reread)
+  (define-key gnats-view-mode-map "G" 'query-pr)
+  (define-key gnats-view-mode-map "q" 'bury-buffer)
+  )
+
=20
 (defvar gnats-view-mode-hook nil
   "Hook run by `gnats-view-mode'.")


6. Fix for PR508
----------------

--- SOURCES/gnats-4.1.0/gnats-4.1.0.orig/gnats/gnats.el	2002-08-04 19:16:=
29.000000000 +0200
+++ gnats.el	2005-11-07 11:24:24.497674390 +0100
@@ -1626,7 +1667,7 @@
 	 (string-to-number
 	  (read-from-minibuffer "Port: " (if gnats-port
 					     (format "%d" gnats-port)
-					   1529)))
+					   "1529")))
 	 (read-from-minibuffer "User: " (or gnats-user (user-login-name)))))
   (setq gnats-database database
 	gnats-server host