diff options
author | Jim Porter <jporterbugs@gmail.com> | 2022-04-01 22:06:02 -0700 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2022-04-17 10:29:07 +0300 |
commit | 3dc73569b405d80e89c2965daba31ea4ee6664f0 (patch) | |
tree | 5962ada86eaaca6c1748b0abdd5dab619150a8eb | |
parent | 6358cbc21a816ac95c2e6e22e087ccd3736874bc (diff) | |
download | emacs-3dc73569b405d80e89c2965daba31ea4ee6664f0.tar.gz |
Add 'G' argument predicate in Eshell
* lisp/eshell/em-pred.el (eshell-predicate-alist): Add 'G' predicate.
(eshell-predicate-help-string): Document it. (Bug#54470)
* test/lisp/eshell/em-pred-tests.el
(em-pred-test/predicate-effective-gid): New test.
* doc/misc/eshell.text (Argument Predication): Document 'G' predicate.
-rw-r--r-- | doc/misc/eshell.texi | 3 | ||||
-rw-r--r-- | lisp/eshell/em-pred.el | 9 | ||||
-rw-r--r-- | test/lisp/eshell/em-pred-tests.el | 8 |
3 files changed, 16 insertions, 4 deletions
diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi index 2d57e48ed81..411e6960699 100644 --- a/doc/misc/eshell.texi +++ b/doc/misc/eshell.texi @@ -1266,6 +1266,9 @@ Matches files with the sticky bit set. @item @samp{U} Matches files owned by the current effective user ID. +@item @samp{G} +Matches files owned by the current effective group ID. + @item @samp{l@option{[+-]}@var{n}} Matches files with @var{n} links. With @option{+} (or @option{-}), matches files with more than (or less than) @var{n} links, diff --git a/lisp/eshell/em-pred.el b/lisp/eshell/em-pred.el index 8afc86dd41a..eb5109b82dc 100644 --- a/lisp/eshell/em-pred.el +++ b/lisp/eshell/em-pred.el @@ -88,10 +88,10 @@ ordinary strings." (if (file-exists-p file) (= (file-attribute-user-id (file-attributes file)) (user-uid))))) - ;; (?G . (lambda (file) ; owned by effective gid - ;; (if (file-exists-p file) - ;; (= (file-attribute-user-id (file-attributes file)) - ;; (user-uid))))) + (?G . (lambda (file) ; owned by effective gid + (if (file-exists-p file) + (= (file-attribute-group-id (file-attributes file)) + (group-gid))))) (?* . (lambda (file) (and (file-regular-p file) (not (file-symlink-p file)) @@ -161,6 +161,7 @@ PERMISSION BITS (for owner/group/world): OWNERSHIP: U owned by effective uid + G owned by effective gid u(UID|\\='user\\=') owned by UID/user g(GID|\\='group\\=') owned by GID/group diff --git a/test/lisp/eshell/em-pred-tests.el b/test/lisp/eshell/em-pred-tests.el index 74dad9f8b87..fbf8945215e 100644 --- a/test/lisp/eshell/em-pred-tests.el +++ b/test/lisp/eshell/em-pred-tests.el @@ -225,6 +225,14 @@ read, write, and execute predicates to query the file's modes." (should (equal (eshell-eval-predicate files "U") '("/fake/uid=1"))))))) +(ert-deftest em-pred-test/predicate-effective-gid () + "Test that \"G\" matches files owned by the effective GID." + (eshell-with-file-attributes-from-name + (cl-letf (((symbol-function 'group-gid) (lambda () 1))) + (let ((files '("/fake/gid=1" "/fake/gid=2"))) + (should (equal (eshell-eval-predicate files "G") + '("/fake/gid=1"))))))) + (ert-deftest em-pred-test/predicate-links () "Test that \"l\" filters by number of links." (eshell-with-file-attributes-from-name |