Преглед на файлове

Separate alternate linking code from other operations

Tim Byrne преди 6 години
родител
ревизия
f3ae31f1c2
променени са 1 файла, в които са добавени 57 реда и са изтрити 53 реда
  1. 57 53
      yadm

+ 57 - 53
yadm

@@ -142,10 +142,60 @@ function alt() {
   local local_user
   set_local_alt_values
 
+  # only be noisy if the "alt" command was run directly
+  local loud=
+  [ "$YADM_COMMAND" = "alt" ] && loud="YES"
+
+  # decide if a copy should be done instead of a symbolic link
+  local do_copy=0
+  [[ $OPERATING_SYSTEM == CYGWIN* ]] &&
+    [ "$(config --bool yadm.cygwin-copy)" == "true" ] &&
+      do_copy=1
+
+  cd_work "Alternates" || return
+
+  # determine all tracked files
+  local tracked_files
+  tracked_files=()
+  local IFS=$'\n'
+  for tracked_file in $("$GIT_PROGRAM" ls-files | LC_ALL=C sort); do
+    tracked_files+=("$tracked_file")
+  done
+
+  # generate data for removing stale links
+  local possible_alts
+  possible_alts=()
+  local IFS=$'\n'
+  for possible_alt in "${tracked_files[@]}" "${ENCRYPT_INCLUDE_FILES[@]}"; do
+    if [[ $possible_alt =~ .\#\#. ]]; then
+      possible_alts+=("$YADM_WORK/${possible_alt%##*}")
+    fi
+  done
+  local alt_linked
+  alt_linked=()
+
   if [ "$YADM_COMPATIBILITY" = "1" ]; then
-    alt_past
+    alt_past_linking
   else
-    alt_future
+    alt_future_linking
+  fi
+
+  # review alternate candidates for stale links
+  # if a possible alt IS linked, but it's target is not part of alt_linked,
+  # remove it.
+  if readlink_available; then
+    for stale_candidate in "${possible_alts[@]}"; do
+      if [ -L "$stale_candidate" ]; then
+        link_target=$(readlink "$stale_candidate" 2>/dev/null)
+        if [ -n "$link_target" ]; then
+          removal=yes
+          for review_link in "${alt_linked[@]}"; do
+            [ "$link_target" = "$review_link" ] && removal=no
+          done
+          [ "$removal" = "yes" ] && rm -f "$stale_candidate"
+        fi
+      fi
+    done
   fi
 
 }
@@ -172,12 +222,14 @@ function set_local_alt_values() {
 
 }
 
-function alt_future() {
-  # Future alternate processing, not implemented yet
+function alt_future_linking() {
+
+
   return
+
 }
 
-function alt_past() {
+function alt_past_linking() {
 
   if [ -z "$local_class" ] ; then
     match_class="%"
@@ -193,36 +245,6 @@ function alt_past() {
   match1="^(.+)##(()|$match_system|$match_system\.$match_host|$match_system\.$match_host\.$match_user)$"
   match2="^(.+)##($match_class|$match_class\.$match_system|$match_class\.$match_system\.$match_host|$match_class\.$match_system\.$match_host\.$match_user)$"
 
-  cd_work "Alternates" || return
-
-  # only be noisy if the "alt" command was run directly
-  [ "$YADM_COMMAND" = "alt" ] && loud="YES"
-
-  # decide if a copy should be done instead of a symbolic link
-  local do_copy=0
-  if [[ $OPERATING_SYSTEM == CYGWIN* ]] ; then
-    if [[ $(config --bool yadm.cygwin-copy) == "true" ]] ; then
-      do_copy=1
-    fi
-  fi
-
-  # process the files tracked by yadm once, this info is used multiple times
-  tracked_files=()
-  local IFS=$'\n'
-  for tracked_file in $("$GIT_PROGRAM" ls-files | LC_ALL=C sort); do
-    tracked_files+=("$tracked_file")
-  done
-
-  # generate a list of possible alt files
-  possible_alts=()
-  local IFS=$'\n'
-  for possible_alt in "${tracked_files[@]}" "${ENCRYPT_INCLUDE_FILES[@]}"; do
-    if [[ $possible_alt =~ .\#\#. ]]; then
-      possible_alts+=("$YADM_WORK/${possible_alt%##*}")
-    fi
-  done
-  alt_linked=()
-
   # loop over all "tracked" files
   # for every file which matches the above regex, create a symlink
   for match in $match1 $match2; do
@@ -253,24 +275,6 @@ function alt_past() {
     done
   done
 
-  # review alternate candidates for stale links
-  # if a possible alt IS linked, but it's target is not part of alt_linked,
-  # remove it.
-  if readlink_available; then
-    for stale_candidate in "${possible_alts[@]}"; do
-      if [ -L "$stale_candidate" ]; then
-        link_target=$(readlink "$stale_candidate" 2>/dev/null)
-        if [ -n "$link_target" ]; then
-          removal=yes
-          for review_link in "${alt_linked[@]}"; do
-            [ "$link_target" = "$review_link" ] && removal=no
-          done
-          [ "$removal" = "yes" ] && rm -f "$stale_candidate"
-        fi
-      fi
-    done
-  fi
-
   # loop over all "tracked" files
   # for every file which is a *##yadm.j2 create a real file
   local match="^(.+)##yadm\\.j2$"