]> Kevux Git Server - tkis/commitdiff
Update: Do not try to copy non-existent documentation.
authorKevin Day <Kevin@kevux.org>
Thu, 14 May 2026 02:21:57 +0000 (21:21 -0500)
committerKevin Day <Kevin@kevux.org>
Thu, 14 May 2026 02:29:07 +0000 (21:29 -0500)
Avoid trying to copy non-directory or non-existent files.

Loop through each directory being removed rather than trying to delete all in one line.

Add some debug and warning statements.

Also update the documentation script to use braces around all variables.

scripts/programs/documentation

index 5ff07ba8d65a5c4e17bad8dc4524f54648e85c70..560c5e519f7e3ebc4e7ffa3b81e7c2d4e4254d83 100755 (executable)
 #!/bin/bash
 
 tkis_handle_documentation(){
-  local doc_type=$1
-  local classification=$2
-  local documentation=$(echo $* | sed -e "s|^$doc_type[[:space:]]*$classification[[:space:]]*||")
+  local doc_type=${1}
+  local classification=${2}
+  local documentation=$(echo ${*} | sed -e "s|^${doc_type}[[:space:]]*${classification}[[:space:]]*||")
   local test_case=
   local doc_type_list="man, doc, info, html, kevux"
   local classification_list="core, standard, network, servers, multimedia, games, xorg, compilation, applications"
   local i=
   local what_to_do=
 
-  if [[ $doc_type == "" ]] ; then
-    error "tkis_handle_documentation(): $color_reset${color_notice}tkis_handle_documentation$color_error requires a doc_type: $doc_type_list"
+  if [[ ${doc_type} == "" ]] ; then
+    error "tkis_handle_documentation(): ${color_reset}${color_notice}tkis_handle_documentation${color_error} requires a doc_type: ${doc_type_list}"
   else
     test_case="fail"
 
-    for i in $(echo $doc_type_list | sed -e 's|,||g') ; do
-      if [[ $doc_type == $i ]] ; then
+    for i in $(echo ${doc_type_list} | sed -e 's|,||g') ; do
+      if [[ ${doc_type} == ${i} ]] ; then
         test_case="pass"
         break
-      fi      
+      fi
     done
 
-    if [[ $test_case == "fail" ]] ; then
-      error "tkis_handle_documentation(): You specified $color_reset${color_notice}$doc_type$color_error for doc_type, but doc_type can only be one of the following: $doc_type_list"
+    if [[ ${test_case} == "fail" ]] ; then
+      error "tkis_handle_documentation(): You specified ${color_reset}${color_notice}${doc_type}${color_error} for doc_type, but doc_type can only be one of the following: ${doc_type_list}"
     fi
   fi
 
-  if [[ $classification == "" ]] ; then
-    error "tkis_handle_documentation(): $color_reset${color_notice}tkis_handle_documentation$color_error requires a classification: $classification_list"
+  if [[ ${classification} == "" ]] ; then
+    error "tkis_handle_documentation(): ${color_reset}${color_notice}tkis_handle_documentation${color_error} requires a classification: ${classification_list}"
   else
     test_case="fail"
 
-    for i in $(echo $classification_list | sed -e 's|,||g'); do
-      if [[ $classification == $i ]] ; then
+    for i in $(echo ${classification_list} | sed -e 's|,||g'); do
+      if [[ ${classification} == ${i} ]] ; then
         test_case="pass"
         break
-      fi      
+      fi
     done
 
-    if [[ $test_case == "fail" ]] ; then
-      error "tkis_handle_documentation(): You specified $color_reset${color_notice}$classification$color_error for classification, but classification can only be one of the following: $classification_list"
+    if [[ ${test_case} == "fail" ]] ; then
+      error "tkis_handle_documentation(): You specified ${color_reset}${color_notice}${classification}${color_error} for classification, but classification can only be one of the following: ${classification_list}"
     fi
   fi
 
   unset test_case
 
-  # Make sure that nothing dangerous is present in the $documentation variable
-  for i in $documentation ; do
-    tkis_security_check_remove $i
+  # Make sure that nothing dangerous is present in the ${documentation} variable
+  for i in ${documentation} ; do
+    tkis_security_check_remove ${i}
   done
 
-  if [[ $(echo $desired_documentation_doc_types | grep -s "[[:space:]]*$doc_type[[:space:]]*") == "" ]] ; then
-    debug "The doc_type '$doc_type' was not found in the desired_documentation_doc_types '$desired_documentation_doc_types'"
+  if [[ $(echo ${desired_documentation_doc_types} | grep -s "[[:space:]]*${doc_type}[[:space:]]*") == "" ]] ; then
+    debug "The doc_type '${doc_type}' was not found in the desired_documentation_doc_types '${desired_documentation_doc_types}'"
     what_to_do="delete"
   else
-    debug "The doc_type '$doc_type' is in '$desired_documentation_doc_types'"
+    debug "The doc_type '${doc_type}' is in '${desired_documentation_doc_types}'"
     what_to_do="keep"
   fi
 
-  if [[ $what_to_do != "delete" ]] ; then
-    if [[ $(echo $desired_documentation_classifications | grep -s "[[:space:]]*$classification[[:space:]]*") == "" ]] ; then
-      debug "The classification '$classification' was not found in the desired_documentation_classifications '$desired_documentation_classifications'"
+  if [[ ${what_to_do} != "delete" ]] ; then
+    if [[ $(echo ${desired_documentation_classifications} | grep -s "[[:space:]]*${classification}[[:space:]]*") == "" ]] ; then
+      debug "The classification '${classification}' was not found in the desired_documentation_classifications '${desired_documentation_classifications}'"
       what_to_do="delete"
     else
-      debug "The classification '$classification' is in '$desired_documentation_classifications'"
+      debug "The classification '${classification}' is in '${desired_documentation_classifications}'"
       what_to_do="keep"
     fi
   fi
 
-  # To delete or not to delete
-  if [[ $what_to_do == "delete" ]] ; then
-    rm -Rf $documentation
+  # To delete or not to delete.
+  if [[ ${what_to_do} == "delete" ]] ; then
+    for i in ${documentation} ; do
+      if [[ -d ${i} ]] ; then
+        rm -Rf ${i}
+      fi
+    done
   else
     mkdir -vp ${documentation_directory}${doc_type}
 
-    # If the documentation_directory cannot be written to, just quit and consider this a non-error
-    # Also remove the documentation that was to be moved
-    if [ $? -ne 0 ] ; then
-      warning "The directory '$color_reset$color_notice$documentation_directory$doc_type$color_reset$color_warning' could not be created."
-      rm -Rf $documentation
+    # If the documentation_directory cannot be written to, just quit and consider this a non-error.
+    # Also remove the documentation that was to be moved.
+    if [ ${?} -ne 0 ] ; then
+      warning "The directory '${color_reset}${color_notice}${documentation_directory}${doc_type}${color_reset}${color_warning}' could not be created."
+
+      for i in ${documentation} ; do
+        if [[ -d ${i} ]] ; then
+          rm -Rf ${i}
+        fi
+      done
+
       return 0;
     fi
 
-    for i in $documentation ; do
-      # Do not attempt to copy from the same directory to the same directory
-      # Do no attempt to do anything if the documentation_directory is a subdirectory of what we are told to handle
-      if [[ $i != $documentation_directory && $(echo $documentation_directory | grep -s "^$i/") == "" ]] ; then
-        if [[ $doc_type == "man" && $(echo $i | grep -s "/man[/]*$") != "" ]] ; then
-          cp -vR $i/* ${documentation_directory}${doc_type}
-          rm -Rf $i
-        elif [[ $doc_type == "doc" ]] ; then
-          if [[ $(echo $i | grep -s "/doc[/]*$") != "" || $(echo $i | grep -s "/docs[/]*$") != "" || $(echo $i | grep -s "/gtk-doc[/]*$") != "" ]] ; then
-            cp -vR $i/* ${documentation_directory}${doc_type}
+    for i in ${documentation} ; do
+
+      # Skip directories that do not exist.
+      if [[ ! -d ${i} ]] ; then
+        if [[ -e ${i} ]] ; then
+          warning "The documentation path '${color_reset}${color_notice}${i}${color_reset}${color_warning}' exists but is not a directory."
+        else
+          debug "The documentation path '${color_reset}${color_notice}${i}${color_reset}${color_warning}' does not exist, skipping."
+        fi
+
+        continue
+      fi
+
+      # Do not attempt to copy from the same directory to the same directory.
+      # Do no attempt to do anything if the documentation_directory is a subdirectory of what we are told to handle.
+      if [[ ${i} != ${documentation_directory} && $(echo ${documentation_directory} | grep -s "^${i}/") == "" ]] ; then
+        if [[ ${doc_type} == "man" && $(echo ${i} | grep -s "/man[/]*$") != "" ]] ; then
+          cp -vR ${i}/* ${documentation_directory}${doc_type}
+          rm -Rf ${i}
+        elif [[ ${doc_type} == "doc" ]] ; then
+          if [[ $(echo ${i} | grep -s "/doc[/]*$") != "" || $(echo ${i} | grep -s "/docs[/]*$") != "" || $(echo ${i} | grep -s "/gtk-doc[/]*$") != "" ]] ; then
+            cp -vR ${i}/* ${documentation_directory}${doc_type}
           else
-            cp -vR $i ${documentation_directory}${doc_type}
+            cp -vR ${i} ${documentation_directory}${doc_type}
           fi
-          rm -Rf $i
-        elif [[ $doc_type == "info" && $(echo $i | grep -s "/info[/]*$") != "" ]] ; then
-          cp -vR $i/* ${documentation_directory}${doc_type}
-          rm -Rf $i
-        elif [[ $doc_type == "html" ]] ; then
-          if [[ $(echo $i | grep -s "/html[/]*$") != "" || $(echo $i | grep -s "/htm[/]*$") != "" ]] ; then
-            cp -vR $i/* ${documentation_directory}${doc_type}
+          rm -Rf ${i}
+        elif [[ ${doc_type} == "info" && $(echo ${i} | grep -s "/info[/]*$") != "" ]] ; then
+          cp -vR ${i}/* ${documentation_directory}${doc_type}
+          rm -Rf ${i}
+        elif [[ ${doc_type} == "html" ]] ; then
+          if [[ $(echo ${i} | grep -s "/html[/]*$") != "" || $(echo ${i} | grep -s "/htm[/]*$") != "" ]] ; then
+            cp -vR ${i}/* ${documentation_directory}${doc_type}
           else
-            cp -vR $i ${documentation_directory}${doc_type}
+            cp -vR ${i} ${documentation_directory}${doc_type}
           fi
-          rm -Rf $i
-        elif [[ $doc_type == "kevux" && $(echo $i | grep -s "/kevux[/]*$") != "" ]] ; then
-          cp -vR $i/* ${documentation_directory}${doc_type}
-          rm -Rf $i
+          rm -Rf ${i}
+        elif [[ ${doc_type} == "kevux" && $(echo ${i} | grep -s "/kevux[/]*$") != "" ]] ; then
+          cp -vR ${i}/* ${documentation_directory}${doc_type}
+          rm -Rf ${i}
         else
-          cp -vR $i ${documentation_directory}${doc_type}
-          rm -Rf $i
+          cp -vR ${i} ${documentation_directory}${doc_type}
+          rm -Rf ${i}
         fi
       fi
     done
 
-    chown 0:d_documentation -R $documentation_directory
-    chmod o-rx -R $documentation_directory
+    chown 0:d_documentation -R ${documentation_directory}
+    chmod o-rx -R ${documentation_directory}
   fi
 
   return 0