]> git.eshelyaron.com Git - emacs.git/commitdiff
Add 'G' argument predicate in Eshell
authorJim Porter <jporterbugs@gmail.com>
Sat, 2 Apr 2022 05:06:02 +0000 (22:06 -0700)
committerEli Zaretskii <eliz@gnu.org>
Sun, 17 Apr 2022 07:29:07 +0000 (10:29 +0300)
* 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.

doc/misc/eshell.texi
lisp/eshell/em-pred.el
test/lisp/eshell/em-pred-tests.el

index 2d57e48ed81203a43090409cabcc37dfe71355cf..411e69606992303a0201a8a6fba02437406c50ad 100644 (file)
@@ -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,
index 8afc86dd41af01efc6a118603b72bbf7554dd9f6..eb5109b82dc661c39a351de2ec8f1e4231884eda 100644 (file)
@@ -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
 
index 74dad9f8b87c119fe9f10bb977606a81038001dd..fbf8945215ea2c7108685ed82cf32fba9334abb4 100644 (file)
@@ -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