Skip to Content.
Sympa Menu

sm-commit - [SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt@sourcemage.org>

sm-commit AT lists.ibiblio.org

Subject: Source Mage code commit list

List archive

Chronological Thread  
  • From: scm AT mail.sourcemage.org
  • To: sm-commit AT lists.ibiblio.org
  • Subject: [SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt AT sourcemage.org>
  • Date: Tue, 9 May 2006 22:55:07 -0500

------------------------------------------------------------
revno: 28
committer: Andrew Stitt <astitt AT sourcemage.org>
branch nick: devel-hack4
timestamp: Tue 2006-05-09 20:53:20 -0700
message:
add runtime/suggested dependencies bugs 10110 and 10790

=== modified file 'ChangeLog'
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,16 @@
+2006-05-09 Andrew Stitt <astitt AT sourcemage.org>
+ * libapi: add runtime and suggest_depends, bugs 10110 and 10790.
+ Remove altruistic_sub_depends stub.
+ * dispel: add improved messages to handle new dependency states
+ * libdepends: Add new frontend routines for runtime/suggest
+ dependencies. Factor most common message calls into a
+ subroutine. Add controls for compute_install_depends functions
+ to work on either true dependencies as well as the full set.
+ Generalized the way UP_DEPENDS works because runtime/suggest depends
+ need it as well.
+ * libstate: Add new dependency states to sanity check
+ * cast: update to use generalized bonus spell mechanism
+
2006-05-03 Andrew Stitt <astitt AT sourcemage.org>
* gaze: fix bug 10465, gaze allows grimoire selection
* libresurrect: fix bug 10528, install_config_files marks files

=== modified file 'usr/sbin/cast'
--- usr/sbin/cast
+++ usr/sbin/cast
@@ -347,7 +347,7 @@

SPELLS_TO_CAST=$(hash_get_table_fields "to_cast"|tr '\n' ' ')

- SPELLS="$SPELLS ${UP_DEPENDS[*]}"
+ SPELLS="$SPELLS ${BONUS_SPELLS[*]}"

# special case of no spell making it through dependency resolution
# or if DEPS_ONLY is set, there arent any dependent spells to cast

=== modified file 'usr/sbin/dispel'
--- usr/sbin/dispel
+++ usr/sbin/dispel
@@ -256,6 +256,37 @@
}

#---------------------------------------------------------------------
+## Display what dependencies were removed
+#---------------------------------------------------------------------
+function dispel_parents_list_borkers() {
+ local parent=$1
+ local optional_borkers=$2
+ local runtime_borkers=$3
+ local suggested_borkers=$4
+ if [[ "$optional_borkers" ]] ; then
+ message "${SPELL_COLOR}${parent}${DEFAULT_COLOR}${MESSAGE_COLOR}" \
+ "had the following optional dependencies
removed:${DEFAULT_COLOR}"
+ message "${SPELL_COLOR}"
+ echo $optional_borkers | col
+ message "${DEFAULT_COLOR}"
+ fi
+ if [[ "$runtime_borkers" ]] ; then
+ message "${SPELL_COLOR}${parent}${DEFAULT_COLOR}${MESSAGE_COLOR}" \
+ "had the following runtime dependencies removed:${DEFAULT_COLOR}"
+ message "${SPELL_COLOR}"
+ echo $runtime_borkers | col
+ message "${DEFAULT_COLOR}"
+ fi
+ if [[ "$suggested_borkers" ]] ; then
+ message "${SPELL_COLOR}${parent}${DEFAULT_COLOR}${MESSAGE_COLOR}" \
+ "had the following suggested dependencies
removed:${DEFAULT_COLOR}"
+ message "${SPELL_COLOR}"
+ echo $suggested_borkers | col
+ message "${DEFAULT_COLOR}"
+ fi
+}
+
+#---------------------------------------------------------------------
## @param spell to dispel
##
## Frontend to do common things for dispelling (keep a note of what
@@ -494,27 +525,33 @@
# for all borked spells either recast, dispel, or ignore
for parent in $(hash_get_table_fields BORKED_PARENTS) ; do
message "$parent is borked because of $(hash_get BORKED_PARENTS
$parent)"
- recastable=yes
+ local recastable=yes
borkers=$(hash_get BORKED_PARENTS $parent)
- local non_optional_borkers
+ local non_optional_borkers suggested_borkers runtime_borkers type
# if any of the removed children are required depends of the current
# spell, the spell is not recastable
# note: this doesnt take into account the spell changing out from
# under us. Oh well.
for child in $borkers; do
- if [[ $(grep "$parent:$child\(([^:]*)\)\?:on:required"
$DEPENDS_STATUS) ]] ; then
+ type=$(grep -m 1 "$parent:$child\(([^:]*)\)\?:on"
$DEPENDS_STATUS|cut -f4 -d:)
+ if [[ "$type" == required ]]; then
recastable=no
list_add non_optional_borkers $child
+ elif [[ "$type" == "runtime" ]] ; then
+ [[ "$recastable" != no ]] && recastable=NA
+ list_add runtime_borkers $child
+ elif [[ "$type" == "suggest" ]] ; then
+ [[ "$recastable" != no ]] && recastable=NA
+ list_add suggested_borkers $child
+ else
+ list_add optional_borkers $child
fi
done
if [[ $recastable == yes ]] ; then
- message "${SPELL_COLOR}${parent}${DEFAULT_COLOR}${MESSAGE_COLOR}" \
- "had the following optional depends removed:${DEFAULT_COLOR}"
- message "${SPELL_COLOR}"
- echo $borkers | col
- message "${DEFAULT_COLOR}"
- if dispel_parent_query \
- "Re-cast $parent without these optional depends?" \
+ dispel_parents_list_borkers $parent "$optional_borkers" \
+ "$runtime_borkers" "$suggested_borkers"
+ if [[ $optional_borkers ]] && dispel_parent_query \
+ "Re-cast $parent without these non-optional depends?"
\
"$RECAST_PARENT_DEFAULT" ; then
# fix up the abandoned depends data for impending recompile
# this is a bit of a hack but should work:
@@ -541,7 +578,7 @@
done

list_add NEW_CASTS $parent
- elif dispel_parent_query "Dispel $parent instead?" \
+ elif dispel_parent_query "Dispel $parent?" \
"$DISPEL_PARENT_DEFAULT" ; then

foo=$(hash_get down_deps $parent)
@@ -553,12 +590,8 @@
message "Please fix broken dependencies with cleanse --prune"
fi
else
- message "${SPELL_COLOR}${parent}${DEFAULT_COLOR}${MESSAGE_COLOR}" \
- "had the following non-optional depends removed:" \
- "${DEFAULT_COLOR}"
- message "${SPELL_COLOR}"
- echo $non_optional_borkers | col
- message "${DEFAULT_COLOR}"
+ dispel_parents_list_borkers $parent "$optional_borkers" \
+ "$runtime_borkers" "$suggested_borkers"
if dispel_parent_query "Dispel $parent?" \
"$DISPEL_PARENT_DEFAULT"; then

@@ -607,8 +640,8 @@
if [[ $DO_DEPENDS ]] ; then
while [[ $SPELLS ]] ; do
debug dispel "recomputing depends tree"
- compute_installed_depends down_deps
- compute_reverse_installed_depends up_deps
+ compute_installed_depends down_deps all
+ compute_reverse_installed_depends up_deps all
dispel_depends_engine "$SPELLS" SPELLS
debug dispel "SPELLS $SPELLS"
done

=== modified file 'var/lib/sorcery/modules/libapi'
--- var/lib/sorcery/modules/libapi
+++ var/lib/sorcery/modules/libapi
@@ -19,7 +19,6 @@
#---------------------------------------------------------------------
# functions defined in here: (in alphabetical order)
# acquire_src (libsummon)
-# altruistic_sub_depends (libdepends)
# config_query (libmisc)
# config_query_list (libmisc)
# config_query_option (libmisc)
@@ -70,6 +69,7 @@
# query (libmisc)
# query_string (libmisc)
# requires (libdepends)
+# runtime_depends (libdepends)
# rm_source_dir (libgrimoire)
# sedit (libmisc)
# sub_depends (libdepends)
@@ -77,6 +77,7 @@
# spell_held (libstate)
# spell_installed (libstate)
# spell_ok (libstate)
+# suggest_depends (libdepends)
# track_manual (libtrack)
# uncompress (libunpack)
# unpack (libunpack) (deprecated)
@@ -129,19 +130,6 @@
}

#---------------------------------------------------------------------
-## @Type API
-## @params Name of a sub-depends that the current spell is providing.
-## @See <@function
var.lib.sorcery.modules.libdepends.html,real_altruistic_sub_depends> for more
details.
-##
-## Altruistically provide a sub-depends.
-##
-#---------------------------------------------------------------------
-function altruistic_sub_depends() {
- debug "libapi" "$FUNCNAME - $*"
- real_altruistic_sub_depends "$@"
-}
-
-#---------------------------------------------------------------------
## @See <@function var.lib.sorcery.modules.libmisc.html,real_config_query>
for more details.
## @param config file variable
## @param question
@@ -984,6 +972,20 @@

#---------------------------------------------------------------------
## @Type API
+## @param spell/service
+## @param enabled options (optional)
+## @param description (optional)
+## @param grimoires (optional)
+## @See <@function var.lib.sorcery.modules.libdepends.html,real_depends> for
more details.
+## Denotes that a spell requires another spell to work.
+#---------------------------------------------------------------------
+function runtime_depends () {
+ debug "libapi" "runtime_depends - $*"
+ real_runtime_depends "$@"
+}
+
+#---------------------------------------------------------------------
+## @Type API
## @param sed command
## @param file
## @See <@function var.lib.sorcery.modules.libmisc.html,real_sedit> for more
details.
@@ -1063,6 +1065,21 @@

#---------------------------------------------------------------------
## @Type API
+## @param spell/service
+## @param enabled options (optional)
+## @param disabled options (optional)
+## @param description (optional)
+## @param grimoires (optional)
+## @See <@function
var.lib.sorcery.modules.libdepends.html,real_suggest_depends> for more
details.
+## Denotes that a spell can use another spell for additional functionality.
+#---------------------------------------------------------------------
+function suggest_depends () {
+ debug "libapi" "suggest_depends - $*"
+ real_suggest_depends "$@"
+}
+
+#---------------------------------------------------------------------
+## @Type API
## @param file to uncompress
## @See <@function var.lib.sorcery.modules.libunpack.html,real_uncompress>
for more details.
##

=== modified file 'var/lib/sorcery/modules/libdepends'
--- var/lib/sorcery/modules/libdepends
+++ var/lib/sorcery/modules/libdepends
@@ -18,24 +18,24 @@
# -> run PREPARE
# -> run CONFIGURE
# -> run DEPENDS
-# -> depends <spell> (external)
+# -> depends|runtime_depends <spell> (external)
# -> work_depends_spell
# -> private_common_depends -> libstate.add_depends
# -> add to NEW_DEPENDS
# -> libstate.add_depends
-# -> optional_depends <spell> (external)
+# -> optional_depends|suggest_depends <spell> (external)
# -> work_optional_depends_spell
# -> query
# -> private_common_depends -> libstate.add_depends
# -> add to NEW_DEPENDS
# -> libstate.add_depends
-# -> depends <provider> (external)
+# -> depends|runtime_depends <provider> (external)
# -> work_depends_provider
# -> select provider
# -> private_common_depends -> libstate.add_depends
# -> add to NEW_DEPENDS
# -> libstate.add_depends
-# -> optional_depends <provider> (external)
+# -> optional_depends|suggest_depends <provider> (external)
# -> work_optional_depends_provider
# -> select provider
# -> private_common_depends
@@ -82,8 +82,7 @@

debug "cast" "run_prepare() - SPELL = $SPELL SCRIPT_DIRECTORY =
$SCRIPT_DIRECTORY"

- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}preparing environment...${DEFAULT_COLOR}"
+ depends_message "${SPELL}" "preparing environment..."

# these are here so you can source section/grimoire level scripts in
# PREPARE, which by definition runs before the spell is loaded
@@ -139,8 +138,7 @@
local PROTECT_SORCERY=yes
persistent_load &&
if [ -x $SCRIPT_DIRECTORY/CONFIGURE ]; then
- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}running configuration...${DEFAULT_COLOR}"
+ depends_message "${SPELL}" "running configuration..."
. $SCRIPT_DIRECTORY/CONFIGURE
else
default_configure
@@ -166,8 +164,7 @@
local PROTECT_SORCERY=yes
persistent_load &&
if [ -x $SCRIPT_DIRECTORY/DEPENDS ]; then
- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}checking dependencies...${DEFAULT_COLOR}"
+ depends_message "${SPELL}" "checking dependencies..."
. $SCRIPT_DIRECTORY/DEPENDS
else
default_depends
@@ -191,8 +188,7 @@

local PROTECT_SORCERY=yes
if [ -x $SCRIPT_DIRECTORY/UP_TRIGGERS ]; then
- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}checking for reverse triggers...${DEFAULT_COLOR}"
+ depends_message "${SPELL}" "checking for reverse triggers..."
# we need &&'s to preserve the proper return code (persistant_save
# will probably succeed even if PREPARE fails)
persistent_load &&
@@ -251,6 +247,7 @@
run_details
local NEW_SUB_DEPENDEES=""
local NEW_DEPENDS=()
+ local NEW_RUNTIME_DEPENDS=()
process_sub_depends "$this_spell" "$sub_dependee" "$sub_depends" ||
return 1

@@ -314,12 +311,19 @@
local hash=$1
touch $DEPENDS_STATUS $SPELL_STATUS &>/dev/null

+ local pattern
+ if [[ $2 ]] ; then
+ pattern="required|optional|runtime|suggest"
+ else
+ pattern="required|optional"
+ fi
+
# From here forward $1 and $2 are only used to refer to awk variables

# sub(/(.*)/, "", $2) removes a provider name
- eval $(awk -F : 'BEGIN {
+ eval $(awk -v pattern="$pattern" -F : 'BEGIN {
while (getline < ARGV[1] ) {
- if( $3=="on") {
+ if( $3=="on" && ( $4 ~ pattern ) ) {
sub(/\(.*\)/, "", $2);
depmap[$1]=depmap[$1]" "$2" "
}
@@ -343,13 +347,19 @@
#$1==hash table to fill
local hash=$1
touch $DEPENDS_STATUS $SPELL_STATUS &>/dev/null
+ local pattern
+ if [[ $2 ]] ; then
+ pattern="required|optional|runtime|suggest"
+ else
+ pattern="required|optional"
+ fi

# From here forward $1 and $2 are only used to refer to awk variables

# sub(/(.*)/, "", $2) removes a provider name
- eval $(awk -F : 'BEGIN {
+ eval $(awk -v pattern="$pattern" -F : 'BEGIN {
while (getline < ARGV[1] ) {
- if( $3=="on") {
+ if( $3=="on" && ( $4 ~ pattern ) ) {
sub(/\(.*\)/, "", $2);
depmap[$2]=depmap[$2]" "$1" "
}
@@ -393,6 +403,7 @@
local CAST_HASH="$1"
local BACK_CAST_HASH="$2"
local CANNOT_CAST_HASH="$3"
+ BONUS_SPELLS=()
shift 3
local spell spells
spells=( $@ )
@@ -423,6 +434,8 @@

# we need this so processes on the other side of make know whats going on
hash_export uncommitted_hash
+
+ BONUS_SPELLS=( ${BONUS_SPELLS[*]} ${UP_DEPENDS[*]} )
}

#---------------------------------------------------------------------
@@ -438,6 +451,8 @@
# special accumulators for the current spell
local NEW_DEPENDS=""
local NEW_SUB_DEPENDEES=""
+ local NEW_RUNTIME_DEPENDS=""
+ local NEW_UP_DEPENDS=""
local triggerees=""
local spell_depends
local spell_sub_depends
@@ -460,8 +475,7 @@
# have a chance at being fixed, ideally we should check in
# depends/optional_depends and fail there
if spell_exiled $1; then
- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}is exiled and will not be
cast.${DEFAULT_COLOR}"
+ depends_message "${SPELL}" "is exiled and will not be cast."
return 1
fi
get_uncommitted_depends_file $SPELL spell_depends
@@ -491,13 +505,17 @@
# no point in keeping the file around if its empty...
test -s $spell_depends || rm -f $spell_depends $spell_sub_depends

+ if echo "${RUNTIME_DEPENDS[*]}"| tr " " "\n" | grep -x -q "$SPELL" ; then
+ local k=${#BONUS_SPELLS[@]}
+ BONUS_SPELLS[$k]=$SPELL
+ fi
+
# this processes any sub-depends we requested and the sub-dependee
# has already been processed, so we must process them on their behalf
# this must be done after everything else!
run_other_sub_depends "$SPELL" || return 1
else
- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}No work to do.${DEFAULT_COLOR}"
+ depends_message "${SPELL}" "No work to do."
hash_put "depends_looked_at" "$SPELL" "ignore"
fi

@@ -506,10 +524,9 @@
}

#---------------------------------------------------------------------
-## Decides if a spell should be case. Check if the spell is installed
-## if it matters, etc...
-## Perhaps this function is overly splayed out in elif's but its
-## easier to add to later than what we had before...
+## Decides if a spell should be cast, or if we can leave it alone.
+## Check if the spell is installed, or if theres some other reason to
+## rebuild it.
## @param Spell
#---------------------------------------------------------------------
function private_should_cast()
@@ -558,10 +575,10 @@
# and/or move the weird pattern into library functions...
# (afrayedknot 2005-10-02)
tmp=$(grep "^.*:$1\(([^:]*)\)\?" $DEPENDS_STATUS|cut -f1 -d:|tr "\n" " ")
- local j each
- let j=${#UP_DEPENDS[*]}
+ local j k each
+ let j=${#NEW_UP_DEPENDS[*]}
for each in $tmp; do
- UP_DEPENDS[$j]=$each
+ NEW_UP_DEPENDS[$j]=$each
let j++
done
spells=( ${spells[*]} ${tmp} )
@@ -575,14 +592,12 @@
function private_recast_optionals() {
if [[ $RECAST_OPTIONALS ]] && [[ $RECAST_OPTIONALS != ignore ]] ; then
local spell j enabled
- let j=${#UP_DEPENDS[*]}
+ let j=${#NEW_UP_DEPENDS[*]}
for spell in $(search_depends_status_exact $DEPENDS_STATUS \
'.*' "$1\(([^:]*)\)\?" off optional '.*' '.*'|cut -f1 -d:);
do

enabled=""
- message "${SPELL_COLOR}$spell${DEFAULT_COLOR}${CHECK_COLOR}" \
- "has a disabled optional depends on${DEFAULT_COLOR}" \
- "${SPELL_COLOR}$1${DEFAULT_COLOR}"
+ message "$spell" "has a disabled optional dependency on" "$1"
if [[ $RECAST_OPTIONALS == always ]] ; then
enabled=yes
else
@@ -593,7 +608,7 @@
fi
fi
if [[ $enabled ]] ; then
- UP_DEPENDS[$j]=$each
+ NEW_UP_DEPENDS[$j]=$each
let j++
remove_depends_status $DEPENDS_STATUS $each "${1}\(([^:]*)\)\?"
fi
@@ -611,9 +626,17 @@
## @param grimoires to look in
## Delegates provider and spell cases to different worker functions.
## and gets grimoires if necessary for cross grimoire depends
-#---------------------------------------------------------------------
-function real_depends()
+##
+## Called by real_depends and real_runtime_depends
+#---------------------------------------------------------------------
+function real_generic_required_depends()
{
+ local failure_ok=$1
+ local article=$2
+ local query_term=$3
+ local database_term=$4
+ shift 4
+
if [[ "$1" == "-sub" ]] ; then
local requested_sub_depends=$2
shift 2
@@ -684,24 +707,46 @@
fi
if [[ ! $here ]] && [[ ! $current ]] ; then
message "${PROBLEM_COLOR}no grimoire for $1 was
retrieved${DEFAULT_COLOR}"
- return 1
+ if [[ $failure_ok == "no" ]] || ! query "Build $1 anyway?" y; then
+ return 1
+ fi
fi
fi

local target_spell
if ! codex_does_spell_exist $1 &> /dev/null; then
- work_depends_provider "$@" &&
+ work_depends_provider "$failure_ok" "$article" \
+ "$query_term" "$databse_term" "$@" &&
if [[ "$requested_sub_depends" ]]; then
target_spell=$(get_spell_provider "$SPELL" "$1")
fi
else
- work_depends_spell "$@" &&
+ work_depends_spell "$failure_ok" "$article" \
+ "$query_term" "$databse_term" "$@" &&
target_spell=$1
fi &&
for sub_depend in $requested_sub_depends; do
sub_depends "$target_spell" "$sub_depend" || return 1
done
}
+
+
+#---------------------------------------------------------------------
+## Passthrough to real_generic_required_depends, specifies the
+## parts that differ from runtime depends
+#---------------------------------------------------------------------
+function real_depends() {
+ real_generic_required_depends "no" "a" "dependency" "required" "$@"
+}
+
+#---------------------------------------------------------------------
+## Passthrough to real_generic_required_depends, specifies the
+## parts that differ from required depends
+#---------------------------------------------------------------------
+function real_runtime_depends() {
+ real_generic_required_depends "yes" "a" "runtime dependency" "runtime" "$@"
+}
+

#---------------------------------------------------------------------
## @param spell or provider name
@@ -710,9 +755,17 @@
## @param description
## @param grimoires to look in
## Delegates provider and spell cases to different worker functions.
-#---------------------------------------------------------------------
-function real_optional_depends()
+##
+## Called by real_depends and real_runtime_depends
+#---------------------------------------------------------------------
+function real_generic_optional_depends()
{
+ local failure_ok=$1
+ local article=$2
+ local query_term=$3
+ local database_term=$4
+ shift 4
+
if [[ "$1" == "-sub" ]] ; then
local requested_sub_depends=$2
shift 2
@@ -781,18 +834,20 @@
if [[ ! $here ]] && [[ ! $current ]] ; then
message "${PROBLEM_COLOR}no grimoire for $1 was
retrieved${DEFAULT_COLOR}"
message "Assuming dependency is off because it could not be met"
- private_common_depends "$1" "off" "optional" "$2" "$3"
+ private_common_depends "$1" "off" "$database_term" "$2" "$3"
fi
fi

local target_spell
if ! codex_does_spell_exist $1 &> /dev/null; then
- work_optional_depends_provider "$@" &&
+ work_optional_depends_provider "$failure_ok" "$article" \
+ "$query_term" "$databse_term" "$@" &&
if [[ "$requested_sub_depends" ]]; then
target_spell=$(get_spell_provider "$SPELL" "$1")
fi
else
- work_optional_depends_spell "$@" &&
+ work_optional_depends_spell "$failure_ok" "$article" \
+ "$query_term" "$databse_term" "$@" &&
target_spell=$1
fi &&
if [[ "$requested_sub_depends" ]] &&
@@ -806,6 +861,23 @@
}

#---------------------------------------------------------------------
+## Passthrough to real_generic_optional_depends, specifies the
+## parts that differ from suggest depends
+#---------------------------------------------------------------------
+function real_optional_depends() {
+ real_generic_optional_depends "no" "an" "optional dependency" "optional"
"$@"
+}
+
+#---------------------------------------------------------------------
+## Passthrough to real_generic_required_depends, specifies the
+## parts that differ from optional depends
+#---------------------------------------------------------------------
+function real_suggest_depends() {
+ real_generic_optional_depends "yes" "a" "suggested dependency" "suggest"
"$@"
+}
+
+
+#---------------------------------------------------------------------
## Asks the user what provider for a depends is desired if a choice
## has not ben made before.
## @param Service
@@ -819,14 +891,16 @@
local default tmp installed=no
local status=()

+ local failure_ok=$1
+ local article=$2
+ local query_term=$3
+ local database_term=$4
+ shift 4
+
if [[ $3 ]] ; then
- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}requires some${DEFAULT_COLOR}" \
- "${SPELL_COLOR}${1}${DEFAULT_COLOR} ($3)."
+ depends_message "${SPELL}" "has $article $query_term on some" "${1}"
"($3)."
else
- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}requires some${DEFAULT_COLOR}" \
- "${SPELL_COLOR}${1}${DEFAULT_COLOR}."
+ depends_message "$SPELL" "has $article $query_term on some" "${1}."
fi

local CANDIDATES=$( find_providers $1)
@@ -834,7 +908,9 @@
message "${PROBLEM_COLOR}No providers of${DEFAULT_COLOR}" \
"${SPELL_COLOR}$1${DEFAULT_COLOR}" \
"${PROBLEM_COLOR} can be found!${DEFAULT_COLOR}"
- return 1
+ if [[ $failure_ok == "no" ]] || ! query "Build $1 anyway?" y; then
+ return 1
+ fi
fi

# if not reconfiguring check if theres already an answer in DEPENDS_STATUS
@@ -847,7 +923,7 @@
tmp=${status[1]%(*} # Name of spell which provides $1
if spell_ok $tmp &&
query "Continue to use ${SPELL_COLOR}$tmp${DEFAULT_COLOR}?" y; then
- private_common_depends "$tmp($1)" "on" "required" "$2" "$3"
+ private_common_depends "$tmp($1)" "on" "$database_term" "$2" "$3"
return 0
fi
fi
@@ -881,7 +957,7 @@

select_provider "provider" "$default" 0 $CANDIDATES

- private_common_depends "$provider($1)" "on" "required" "$2" ""
+ private_common_depends "$provider($1)" "on" "$database_term" "$2" ""
}

#---------------------------------------------------------------------
@@ -889,23 +965,27 @@
## on to the common dependency function, <@function private_common_depends>
## @param Spell
## @param enabled options
-## @param disabled options (useless, but included for some reason)
-## @param grimoire the spell is in, if its different than the current one
#---------------------------------------------------------------------
function work_depends_spell()
{
debug "libdepends" "$FUNCNAME - $@"

- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}depends on" \
- "${SPELL_COLOR}${1}${DEFAULT_COLOR}"
+ local failure_ok=$1
+ local article=$2
+ local query_term=$3
+ local database_term=$4
+ shift 4
+
+ depends_message "${SPELL}" "has $article $query_term on" "$1"

if spell_exiled $1 ; then
- hash_put $CANNOT_CAST_HASH "$1" "Exiled"
- message "${SPELL_COLOR}${1}${DEFAULT_COLOR} has been exiled!"
- return 1
- fi
- private_common_depends "$1" "on" "required" "$2" ""
+ depends_message "${1}" "has been exiled!"
+ if [[ $failure_ok == "no" ]] || ! query "Build $1 anyway?" y; then
+ hash_put $CANNOT_CAST_HASH "$1" "Exiled"
+ return 1
+ fi
+ fi
+ private_common_depends "$1" "on" "$database_term" "$2" ""

}

@@ -923,14 +1003,16 @@
local default tmp installed=no
local status=()

+ local failure_ok=$1
+ local article=$2
+ local query_term=$3
+ local database_term=$4
+ shift 4
+
if [[ $4 ]] ; then
- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}optionally requires some${DEFAULT_COLOR}" \
- "${SPELL_COLOR}${1}${DEFAULT_COLOR} ($4)."
+ depends_message "${SPELL}" "has $article $query_term on some" "${1}"
"($4)."
else
- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}optionally requires some${DEFAULT_COLOR}" \
- "${SPELL_COLOR}${1}${DEFAULT_COLOR}."
+ depends_message "${SPELL}" "has $article $query_term on some" "${1}."
fi

local CANDIDATES=$( find_providers $1)
@@ -940,7 +1022,7 @@
local tmp=${status[1]%(*} # Name of spell which provides $1
if spell_ok $tmp &&
query "Continue to use ${SPELL_COLOR}$tmp${DEFAULT_COLOR}?" y; then
- private_common_depends "$tmp($1)" "on" "required" "$2" "$3"
+ private_common_depends "$tmp($1)" "on" "$database_term" "$2" "$3"
return 0
fi
fi
@@ -990,9 +1072,9 @@
select_provider "provider" "$default" 1 $CANDIDATES

if [ $provider == "none" ] ; then
- private_common_depends "($1)" "off" "optional" "$2" "$3"
+ private_common_depends "($1)" "off" "$database_term" "$2" "$3"
else
- private_common_depends "$provider($1)" "on" "optional" "$2" "$3"
+ private_common_depends "$provider($1)" "on" "$database_term" "$2" "$3"
fi

}
@@ -1009,12 +1091,18 @@

debug "libdepends" "$FUNCNAME - $@"
local default
+
+ local failure_ok=$1
+ local article=$2
+ local query_term=$3
+ local database_term=$4
+ shift 4

# if $1 optionally depends on something exiled we always say no
if spell_exiled $1 ; then
- message "${SPELL_COLOR}${1}${DEFAULT_COLOR} has been exiled! not using
as a depends"
+ depends_message "${1}" "has been exiled! not using as $article
$query_term"
hash_put $CANNOT_CAST_HASH "$1" "Exiled"
- private_common_depends "$1" "off" "optional" "$2" "$3"
+ private_common_depends "$1" "off" "$database_term" "$2" "$3"
return 0
fi

@@ -1028,18 +1116,25 @@
if [[ ${status[2]} ]] ; then
# ah there are! use them
if [[ ${status[2]} == "on" ]] ; then
- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}optionally depends on" \
- "${SPELL_COLOR}${1}${DEFAULT_COLOR}"
+ depends_message "${SPELL}" "has an enabled $query_term on" "${1}"
else
- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}has a disabled optional depends on" \
- "${SPELL_COLOR}${1}${DEFAULT_COLOR}"
+ depends_message "${SPELL}" "has a disabled $query_term on" "${1}"
fi
- private_common_depends "$1" "${status[2]}" "optional" "$2" "$3"
+ private_common_depends "$1" "${status[2]}" "$database_term" "$2" "$3"
return 0
fi
fi
+ # colors differ from depends_message
+ if [[ $4 ]]; then
+ message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
+ "has $article $query_term on" \
+ "${SPELL_COLOR}$1${DEFAULT_COLOR} ($4)"
+ else
+ message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
+ "has $article $query_term on" \
+ "${SPELL_COLOR}$1${DEFAULT_COLOR}"
+ fi
+

# check for abandoned answers
if [ -e $ABANDONED_DEPENDS/$SPELL ] ; then
@@ -1086,10 +1181,6 @@

local stuff
[[ $default == off ]] && stuff=n || stuff=y
-
- message "${SPELL_COLOR}${1}${DEFAULT_COLOR}" \
- "is an optional dependency for" \
- "${SPELL_COLOR}$SPELL${DEFAULT_COLOR} ($4)"

if spell_ok $1 ; then
query "Do you want to use ${SPELL_COLOR}$1${DEFAULT_COLOR}?" "$stuff"
&&
@@ -1099,7 +1190,7 @@
install="on"
fi

- private_common_depends "$1" "$install" "optional" "$2" "$3"
+ private_common_depends "$1" "$install" "$database_term" "$2" "$3"
}

#---------------------------------------------------------------------
@@ -1209,10 +1300,8 @@
local sub_dependee=$1
local sub_depends=$2

- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}requests" \
- "${SPELL_COLOR}$sub_dependee${DEFAULT_COLOR}${CHECK_COLOR}" \
- "with ${SPELL_COLOR}$sub_depends${DEFAULT_COLOR}"
+ message "${SPELL}${DEFAULT_COLOR}" "requests" "$sub_dependee" \
+ "${CHECK_COLOR} with ${SPELL_COLOR}$sub_depends${DEFAULT_COLOR}"

# Check if the sub-depends is already known
if spell_ok $sub_dependee; then
@@ -1233,7 +1322,6 @@
test -x $SCRIPT_DIRECTORY/PRE_SUB_DEPENDS || return 1
persistent_load &&
source $SCRIPT_DIRECTORY/PRE_SUB_DEPENDS; rc=$?
-echo $rc
persistent_save
return $rc
) && {
@@ -1278,9 +1366,7 @@
debug "libdepends" "$FUNCNAME - $SPELL - $@"
local check=$(hash_get "depends_looked_at" "$1")

- message "${SPELL_COLOR}${SPELL}${DEFAULT_COLOR}" \
- "${CHECK_COLOR}is forcing a recast of" \
- "${SPELL_COLOR}${1}${DEFAULT_COLOR}"
+ message "${SPELL}" "is forcing a recast of" "${1}"

if [[ "$check" == "ignore" ]] ; then
hash_put "depends_looked_at" "$1" ""
@@ -1298,12 +1384,18 @@
{
debug "libdepends" "$FUNCNAME - $SPELL - $@"
add_depends $spell_depends "$SPELL" "$@"
-
+
+ # runtime and suggested depends have no formal dependency info
if [[ $2 == on ]] ; then
# ${1%(*} = spell name (strips potential provider name)
local spell_name=${1%(*}
- NEW_DEPENDS=( ${NEW_DEPENDS[*]} $spell_name )
- fi
+ case $3 in
+ runtime|suggest)
+ NEW_RUNTIME_DEPENDS=( ${NEW_RUNTIME_DEPENDS[*]} $spell_name ) ;;
+ *) NEW_DEPENDS=( ${NEW_DEPENDS[*]} $spell_name ) ;;
+ esac
+ fi
+

return 0
}
@@ -1389,10 +1481,16 @@
hash_append "$BACK_CAST_HASH" "basesystem" "$SPELL"
fi

- spells=( ${spells[*]} ${NEW_DEPENDS[*]} ${NEW_SUB_DEPENDEES[*]} )
+ spells=( ${spells[*]} ${NEW_DEPENDS[*]}
+ ${NEW_SUB_DEPENDEES[*]}
+ ${NEW_RUNTIME_DEPENDS[*]} )
+
+ RUNTIME_DEPENDS=( ${RUNTIME_DEPENDS[*]} ${NEW_RUNTIME_DEPENDS[*]} )

TRIGGEREES=( ${TRIGGEREES[*]} ${triggerees[*]} )
spells=( ${spells[*]} ${triggerees[*]} )
+
+ UP_DEPENDS=( ${UP_DEPENDS[*]} ${NEW_UP_DEPENDS[*]} )

hash_put "depends_looked_at" "$SPELL" "done"

@@ -1405,8 +1503,7 @@
function want_lazy_update() {
if [[ $LAZY_DEPENDS_UPDATES ]] && [[ $LAZY_DEPENDS_UPDATES != ignore ]] ;
then
if does_spell_need_update "$1" ; then
- message "${SPELL_COLOR}$1${DEFAULT_COLOR}${CHECK_COLOR}" \
- "needs updating${DEFAULT_COLOR}"
+ depends_message "$1" "needs updating"
if [[ "$LAZY_DEPENDS_UPDATES" == always ]] ; then
return 0
else
@@ -1417,6 +1514,20 @@
fi
fi
return 1
+}
+
+function depends_message() {
+ if [[ $# -ge 2 ]] ; then
+ message -n "${SPELL_COLOR}${1}${DEFAULT_COLOR}" \
+ "${CHECK_COLOR}${2}${DEFAULT_COLOR}"
+ fi
+ if [[ $# -ge 3 ]] ; then
+ message -n " ${SPELL_COLOR}${3}${DEFAULT_COLOR}"
+ fi
+ if [[ $# -ge 4 ]] ; then
+ message -n " ($4)"
+ fi
+ message ""
}



=== modified file 'var/lib/sorcery/modules/libstate'
--- var/lib/sorcery/modules/libstate
+++ var/lib/sorcery/modules/libstate
@@ -40,7 +40,8 @@

#ensure the info is valid (perhaps add check that spells exist?)
if ( [[ $3 != on ]] && [[ $3 != off ]] ) ||
- ( [[ $4 != required ]] && [[ $4 != optional ]] ); then
+ ( [[ $4 != required ]] && [[ $4 != optional ]] &&
+ [[ $4 != runtime ]] && [[ $4 != suggest ]]; ); then
return 1
fi






Archive powered by MHonArc 2.6.24.

Top of Page