[Lunar-commits] r21957 - lunar/trunk/var/lib/lunar/functions

Auke Kok sofar at lunar-linux.org
Thu Oct 26 18:16:17 CEST 2006


Author: sofar
Date: 2006-10-26 18:16:17 +0200 (Thu, 26 Oct 2006)
New Revision: 21957

Modified:
   lunar/trunk/var/lib/lunar/functions/aliases.lunar
Log:
[PATCH] new alias code

This new alias algorithm stores the users' choice when asked for %X
as LUNAR_ALIAS_X in the local config. This speeds up lookups later
and eliminates the need to detect aliases on the fly. We can delete
all the detection code and the user will only once ever get asked.

unsetting an alias choice is as easy as `lunar unset LUANR_ALIAS_X`


Modified: lunar/trunk/var/lib/lunar/functions/aliases.lunar
===================================================================
--- lunar/trunk/var/lib/lunar/functions/aliases.lunar	2006-10-26 16:07:14 UTC (rev 21956)
+++ lunar/trunk/var/lib/lunar/functions/aliases.lunar	2006-10-26 16:16:17 UTC (rev 21957)
@@ -12,13 +12,20 @@
 # translate %ALIAS if needed to a module name that is installed
 # and add it to the dependency chain if needed
 unalias() {
-  local TARGET TARGETS TARGETBYNUM N CHOICE
+  local TARGET TARGETS TARGETBYNUM N CHOICE CACHED_ALIAS
   # quick exit code
   if [ "${1:0:1}" != "%" ] ; then
     echo $1
     return
   fi
 
+  # lookup in cache
+  CACHED_ALIAS=$(get_local_config `echo LUNAR_ALIAS_${1:1}`)
+  if [ -n "$CACHED_ALIAS" ]; then
+    echo $CACHED_ALIAS
+    return
+  fi
+
   debug_msg "unalias($@)"
   # try to figure out where the aliases file is:
   if [[ -z "$ALIASES" ]] || [[ ! -f "$ALIASES" ]]; then
@@ -28,47 +35,8 @@
       ALIASES="/var/lib/lunar/aliases"
     fi
   fi
-  
+
   TARGETS=$(awk -F: -v mod=$1 '{if ($1==mod){print $2}}' $ALIASES)
-  # dumb algorithm: pick the first installed one
-  for TARGET in $TARGETS ; do
-    if module_installed $TARGET ; then
-      debug_msg "unaliased \"$1\"->\"$TARGET\""
-      echo $TARGET
-      return
-    fi
-  done
-  # shortcut out: in the satisfy_depends stage we should NOT ask this again
-  if [[ -z "$DEPS_ONLY" ]] ; then
-    # first we check if this dependency is already existant in the exact
-    # way: does this MODULE depends on TARGET already ?
-    for TARGET in $TARGETS ; do
-      if in_depends $MODULE $TARGET ; then
-        debug_msg "unaliased \"$1\"->\"$TARGET\""
-        echo $TARGET
-        return
-      fi
-    done
-    # not so... other possibility is that something else already depends
-    # on TARGET?
-    for TARGET in $TARGETS ; do
-      if is_depends $TARGET ; then
-        debug_msg "unaliased \"$1\"->\"$TARGET\""
-        echo $TARGET
-        return
-      fi
-    done
-    # also not so. our last attempt is for a DISABLED dependency, but
-    # we can only use this method for OPTIONAL dependencies
-    for TARGET in $TARGETS ; do
-      # there's no function for this yet
-      if grep -q ":$TARGET:off:" $DEPENDS_STATUS ; then
-        debug_msg "unaliased \"$1\"->\"$TARGET\""
-        echo $TARGET
-        return
-      fi
-    done
-  fi
 
   # shortcut out when explicitly instructed so
   if [[ -n "$NEVER_ASK" ]] ; then
@@ -90,10 +58,14 @@
     read CHOICE
     # test directly first
     if echo $TARGETS | grep -qw "$CHOICE" ; then
+      verbose_msg "Stored alias mapping $1 -> $TARGET"
+      set_local_config `echo LUNAR_ALIAS_${1:1}` $TARGET
       echo $TARGET
       return
     # then the number
     elif [[ -n "$CHOICE" ]] && [[ -n "${TARGETBYNUM[$CHOICE]}" ]] ; then
+      verbose_msg "Stored alias mapping $1 -> ${TARGETBYNUM[$CHOICE]}"
+      set_local_config `echo LUNAR_ALIAS_${1:1}` ${TARGETBYNUM[$CHOICE]}
       echo ${TARGETBYNUM[$CHOICE]}
       return
     fi



More information about the Lunar-commits mailing list