emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Rewrite of vc-user-login-name


From: Andre Spiegel
Subject: Rewrite of vc-user-login-name
Date: Sun, 22 Jan 2006 17:19:48 +0100

Here's a patch that closes a long standing issue, removing the need for
Tramp to advise vc-user-login-name.  I'm not quite sure how to install
it, though: should I just remove the advice in tramp-vc.el?  Is that
guaranteed not to break anything if people simply update from CVS?
(Since the argument list changed, the tramp advice no longer works with
this patch.)

Apart from that, if anybody sees any issues with the new code, feel free
to suggest improvements.  If I don't hear anything, I'll install it and
simply remove the Tramp advice tomorrow.  (I have already installed a
related patch that makes `vc-user-login-name UID' unnecessary, hence the
change in the argument list.)

--- vc-hooks.el 20 Aug 2005 09:13:19 +0200      1.176
+++ vc-hooks.el 22 Jan 2006 13:51:14 +0100      
@@ -410,14 +410,22 @@
           (vc-file-setprop file 'vc-checkout-model
                            (vc-call checkout-model file)))))
 
-(defun vc-user-login-name (&optional uid)
-  "Return the name under which the user is logged in, as a string.
-\(With optional argument UID, return the name of that user.)
-This function does the same as function `user-login-name', but unlike
-that, it never returns nil.  If a UID cannot be resolved, that
-UID is returned as a string."
-  (or (user-login-name uid)
-      (number-to-string (or uid (user-uid)))))
+(defun vc-user-login-name (file)
+  "Return the name under which the user accesses the given FILE."
+  (or (and (eq (string-match tramp-file-name-regexp file) 0)
+           ;; tramp case: execute "whoami" via tramp
+           (let ((default-directory (file-name-directory file)))
+             (with-temp-buffer
+               (if (not (zerop (process-file "whoami" nil t)))
+                   ;; fall through if "whoami" didn't work
+                   nil
+                 ;; remove trailing newline
+                 (delete-region (1- (point-max)) (point-max))
+                 (buffer-string)))))
+      ;; normal case
+      (user-login-name)
+      ;; if user-login-name is nil, return the UID as a string
+      (number-to-string (user-uid))))
 
 (defun vc-state (file)
   "Return the version control state of FILE.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]