From 65bfbc1fb54850275d4e9842ef2bd333d2081af4 Mon Sep 17 00:00:00 2001
From: Egor Tensin <Egor.Tensin@gmail.com>
Date: Sat, 2 Apr 2022 14:28:37 +0300
Subject: bash best practices & linting

---
 src/db.sh   | 19 +++++++++++++------
 src/path.sh |  4 ++--
 2 files changed, 15 insertions(+), 8 deletions(-)

(limited to 'src')

diff --git a/src/db.sh b/src/db.sh
index b057202..201ad25 100644
--- a/src/db.sh
+++ b/src/db.sh
@@ -57,7 +57,7 @@ add_entry() {
         local shared_var_dir="$shared_root_dir%$var_name%"
         local symlink_var_dir
         symlink_var_dir="$( resolve_variable "$var_name" )"
-        local subpath="${entry#%$var_name%/}"
+        local subpath="${entry#%"$var_name"%/}"
 
         local shared_path="$shared_var_dir"
         [ "$shared_var_dir" != / ] && shared_path="$shared_path/"
@@ -134,7 +134,7 @@ delete_obsolete_dirs() {
 
     [ "$base_dir" = "$dir" ] && return 0
 
-    local subpath="${dir##$base_dir/}"
+    local subpath="${dir##"$base_dir"/}"
 
     if [ "$subpath" = "$dir" ]; then
         dump "base directory: $base_dir"    >&2
@@ -193,10 +193,18 @@ shared_file_present() {
 
 link_all_entries() {
     local shared_var_dir
+
+    find "$shared_root_dir" \
+        -mindepth 1 -maxdepth 1 \
+        -\( -type d -o -type l -\) \
+        -regextype posix-basic \
+        -regex ".*/$var_name_regex\$" \
+        -printf '%P\0' |
     while IFS= read -d '' -r shared_var_dir; do
         dump "shared directory: $shared_root_dir$shared_var_dir"
-
         local shared_path
+
+        find "$shared_root_dir$shared_var_dir/" -\( -type f -o -type l -\) -print0 |
         while IFS= read -d '' -r shared_path; do
             dump "    shared file path: $shared_path"
             local entry="${shared_path:${#shared_root_dir}}"
@@ -214,9 +222,8 @@ link_all_entries() {
                 dump '    ... adding a symlink'
                 is_dry_run || link_entry "$entry"
             fi
-
-        done < <( find "$shared_root_dir$shared_var_dir/" -\( -type f -o -type l -\) -print0 )
-    done < <( find "$shared_root_dir" -regextype posix-basic -mindepth 1 -maxdepth 1 -\( -type d -o -type l -\) -regex ".*/$var_name_regex\$" -printf '%P\0' )
+        done
+    done
 }
 
 unlink_all_entries() {
diff --git a/src/path.sh b/src/path.sh
index bf52a6f..8ac71a9 100644
--- a/src/path.sh
+++ b/src/path.sh
@@ -76,7 +76,7 @@ traverse_path() {
     local -a abs_paths=()
 
     local path
-    while IFS= read -d '' -r path; do
+    readlink -z --canonicalize-missing -- ${paths[@]+"${paths[@]}"} | while IFS= read -d '' -r path; do
         if [ -n "$must_exist" ] && [ ! -e "$path" ]; then
             dump "must exist: $path" >&2
             return 1
@@ -88,7 +88,7 @@ traverse_path() {
         fi
 
         abs_paths+=("$path")
-    done < <( readlink -z --canonicalize-missing -- ${paths[@]+"${paths[@]}"} )
+    done
 
     printf -- "$fmt" ${abs_paths[@]+"${abs_paths[@]}"}
 }
-- 
cgit v1.2.3