Browse Source

fix(perms)!: change function name from `fixperms` to `resetperms` and document caution (#10686)

BREAKING CHANGE: function `fixperms` has been renamed to the more accurate `resetperms`.
Please read the README carefully before using it as it may badly reset the permissions.

Fixes #10648
Closes #10686
Carlo Sala 2 years ago
parent
commit
62929263fa
2 changed files with 29 additions and 14 deletions
  1. 13 3
      plugins/perms/README.md
  2. 16 11
      plugins/perms/perms.plugin.zsh

+ 13 - 3
plugins/perms/README.md

@@ -10,6 +10,16 @@ plugins=(... perms)
 
 
 ## Usage
 ## Usage
 
 
-* `set755` recursively sets all given directories (default to .) to octal 755.
-* `set644` recursively sets all given files (default to .) to octal 644.
-* `fixperms` is a wrapper around `set755` and `set644` applied to a specified directory or the current directory otherwise. It also prompts prior to execution unlike the other two aliases.
+> **CAUTION:** these functions are harmful if you don't know what they do.
+
+- `set755`: sets the permission to octal 755 for all given directories and their child directories (by default, starting from the current directory).
+
+- `set644`: sets the permission to octal 644 for all files of the given directory (by default, the current directory), recursively. It will only affect regular files (no symlinks).
+
+- `resetperms` is a wrapper around `set755` and `set644` applied to a specified directory or the current directory otherwise.
+  It will set the permissions to 755 for directories, and 644 for files.
+
+## Reference
+
+- octal 644: _read and write_ for the owner, _read_ for the group and others users.
+- octal 755: _read, write and execute_ permissions for the owner, and _read and execute_ for the group and others users.

+ 16 - 11
plugins/perms/perms.plugin.zsh

@@ -6,25 +6,25 @@
 ### Aliases
 ### Aliases
 
 
 # Set all files' permissions to 644 recursively in a directory
 # Set all files' permissions to 644 recursively in a directory
-set644() {
+function set644 {
 	find "${@:-.}" -type f ! -perm 644 -print0 | xargs -0 chmod 644
 	find "${@:-.}" -type f ! -perm 644 -print0 | xargs -0 chmod 644
 }
 }
 
 
 # Set all directories' permissions to 755 recursively in a directory
 # Set all directories' permissions to 755 recursively in a directory
-set755() {
+function set755 {
 	find "${@:-.}" -type d ! -perm 755 -print0 | xargs -0 chmod 755
 	find "${@:-.}" -type d ! -perm 755 -print0 | xargs -0 chmod 755
 }
 }
 
 
 ### Functions
 ### Functions
 
 
-# fixperms - fix permissions on files and directories, with confirmation
+# resetperms - fix permissions on files and directories, with confirmation
 # Returns 0 on success, nonzero if any errors occurred
 # Returns 0 on success, nonzero if any errors occurred
-fixperms () {
+function resetperms {
   local opts confirm target exit_status chmod_opts use_slow_mode
   local opts confirm target exit_status chmod_opts use_slow_mode
   zparseopts -E -D -a opts -help -slow v+=chmod_opts
   zparseopts -E -D -a opts -help -slow v+=chmod_opts
   if [[ $# > 1 || -n "${opts[(r)--help]}" ]]; then
   if [[ $# > 1 || -n "${opts[(r)--help]}" ]]; then
     cat <<EOF
     cat <<EOF
-Usage: fixperms [-v] [--help] [--slow] [target]
+Usage: resetperms [-v] [--help] [--slow] [target]
 
 
   target  is the file or directory to change permissions on. If omitted,
   target  is the file or directory to change permissions on. If omitted,
           the current directory is taken to be the target.
           the current directory is taken to be the target.
@@ -40,7 +40,7 @@ EOF
     return $exit_status
     return $exit_status
   fi
   fi
 
 
-  if [[ $# == 0 ]]; then
+  if [[ $# -eq 0 ]]; then
     target="."
     target="."
   else
   else
     target="$1"
     target="$1"
@@ -49,7 +49,7 @@ EOF
 
 
   # Because this requires confirmation, bail in noninteractive shells
   # Because this requires confirmation, bail in noninteractive shells
   if [[ ! -o interactive ]]; then
   if [[ ! -o interactive ]]; then
-    echo "fixperms: cannot run in noninteractive shell"
+    echo "resetperms: cannot run in noninteractive shell"
     return 1
     return 1
   fi
   fi
 
 
@@ -68,15 +68,20 @@ EOF
   if [[ $use_slow == true ]]; then
   if [[ $use_slow == true ]]; then
     # Process directories first so non-traversable ones are fixed as we go
     # Process directories first so non-traversable ones are fixed as we go
     find "$target" -type d ! -perm 755 -exec chmod $chmod_opts 755 {} \;
     find "$target" -type d ! -perm 755 -exec chmod $chmod_opts 755 {} \;
-    if [[ $? != 0 ]]; then exit_status=$?; fi
+    if [[ $? -ne 0 ]]; then exit_status=$?; fi
     find "$target" -type f ! -perm 644 -exec chmod $chmod_opts 644 {} \;
     find "$target" -type f ! -perm 644 -exec chmod $chmod_opts 644 {} \;
-    if [[ $? != 0 ]]; then exit_status=$?; fi
+    if [[ $? -ne 0 ]]; then exit_status=$?; fi
   else
   else
     find "$target" -type d ! -perm 755 -print0 | xargs -0 chmod $chmod_opts 755
     find "$target" -type d ! -perm 755 -print0 | xargs -0 chmod $chmod_opts 755
-    if [[ $? != 0 ]]; then exit_status=$?; fi
+    if [[ $? -ne 0 ]]; then exit_status=$?; fi
     find "$target" -type f ! -perm 644 -print0 | xargs -0 chmod $chmod_opts 644
     find "$target" -type f ! -perm 644 -print0 | xargs -0 chmod $chmod_opts 644
-    if [[ $? != 0 ]]; then exit_status=$?; fi
+    if [[ $? -ne 0 ]]; then exit_status=$?; fi
   fi
   fi
   echo "Complete"
   echo "Complete"
   return $exit_status
   return $exit_status
 }
 }
+
+function fixperms {
+  print -ru2 "fixperms has been deprecated. Use resetperms instead"
+  return 1
+}