Skip to Content.
Please activate JavaScript in your web browser
List archive
Re: [SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt AT sourcemage.org>
Chronological
Thread
<
Chronological
>
<
Thread
>
From
: Andrew Stitt <afrayedknot AT thefrayedknot.armory.com>
To
: sm-commit AT lists.ibiblio.org
Subject
: Re: [SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt AT sourcemage.org>
Date
: Wed, 10 May 2006 10:06:43 -0700
Can someone working in the grimoire please add libcompat stubs for
runtime_depends and suggest_depends for backwards compatibility.
Thanks.
On Tue, May 09, 2006 at 10:55:07PM -0500, scm AT mail.sourcemage.org wrote:
>
------------------------------------------------------------
>
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
>
>
>
_______________________________________________
>
SM-Commit mailing list
>
SM-Commit AT lists.ibiblio.org
>
http://lists.ibiblio.org/mailman/listinfo/sm-commit
[SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt AT sourcemage.org>
,
scm, 05/09/2006
Re: [SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt AT sourcemage.org>
,
Andrew Stitt, 05/10/2006
Re: [SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt AT sourcemage.org>
,
Arwed von Merkatz, 05/10/2006
Re: [SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt AT sourcemage.org>
,
Andrew, 05/10/2006
Re: [SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt AT sourcemage.org>
,
Arwed von Merkatz, 05/10/2006
Re: [SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt AT sourcemage.org>
,
Andrew, 05/10/2006
Re: [SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt AT sourcemage.org>
,
seth, 05/10/2006
Re: [SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt AT sourcemage.org>
,
Andrew, 05/10/2006
Re: [SM-Commit] BZR Change 28 to devel sorcery by Andrew Stitt <astitt AT sourcemage.org>
,
seth, 05/10/2006
Archive powered by
MHonArc 2.6.24
.