diff options
Diffstat (limited to 'lisp/net/tramp.el')
-rw-r--r-- | lisp/net/tramp.el | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 28fc9c748bb..e3755533b9d 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -774,6 +774,12 @@ Derived from `tramp-postfix-host-format'.") (defconst tramp-localname-regexp ".*$" "Regexp matching localnames.") +(defconst tramp-unknown-id-string "UNKNOWN" + "String used to denote an unknown user or group") + +(defconst tramp-unknown-id-integer -1 + "Integer used to denote an unknown user or group") + ;;; File name format: (defconst tramp-remote-file-name-spec-regexp @@ -2861,11 +2867,21 @@ User is always nil." (error "tramp-handle-file-name-completion invoked on non-tramp directory `%s'" directory)) - (try-completion - filename - (mapcar 'list (file-name-all-completions filename directory)) - (when predicate - (lambda (x) (funcall predicate (expand-file-name (car x) directory)))))) + (let (hits-ignored-extensions) + (or + (try-completion + filename (file-name-all-completions filename directory) + (lambda (x) + (when (funcall (or predicate 'identity) (expand-file-name x directory)) + (not + (and + completion-ignored-extensions + (string-match + (concat (regexp-opt completion-ignored-extensions 'paren) "$") x) + ;; We remember the hit. + (push x hits-ignored-extensions)))))) + ;; No match. So we try again for ignored files. + (try-completion filename hits-ignored-extensions)))) (defun tramp-handle-file-name-directory (file) "Like `file-name-directory' but aware of Tramp files." @@ -3834,7 +3850,10 @@ be granted." vec (concat "uid-" suffix) nil)) (remote-gid (tramp-get-connection-property - vec (concat "gid-" suffix) nil))) + vec (concat "gid-" suffix) nil)) + (unknown-id + (if (string-equal suffix "string") + tramp-unknown-id-string tramp-unknown-id-integer))) (and file-attr (or @@ -3847,12 +3866,14 @@ be granted." ;; User accessible and owned by user. (and (eq access (aref (nth 8 file-attr) offset)) - (equal remote-uid (nth 2 file-attr))) + (or (equal remote-uid (nth 2 file-attr)) + (equal unknown-id (nth 2 file-attr)))) ;; Group accessible and owned by user's ;; principal group. (and (eq access (aref (nth 8 file-attr) (+ offset 3))) - (equal remote-gid (nth 3 file-attr))))))))))) + (or (equal remote-gid (nth 3 file-attr)) + (equal unknown-id (nth 3 file-attr)))))))))))) ;;;###tramp-autoload (defun tramp-local-host-p (vec) |