OSDN Git Service

[NEW] Commands of show inst_built_default and show inst_built_custom are added.
[portsreinstall/current.git] / lib / libdeinstall.sh
index b87a298..92ea92f 100644 (file)
@@ -208,69 +208,67 @@ deinstall_restore ()
 # ============= Deinstallation of a package for a flavored origin =============
 deinstall_exec ()
 {
-       local origin origin_regexp currentpkg backup_pkgdir backup_pkg pkg
-       origin=$1
-       origin_regexp=`str_escape_regexp "$origin"`
-       grep -v -E "^${origin_regexp}[[:space:]]" "${DBDIR}/deleted_conflicts" > ${DBDIR}/deleted_conflicts.tmp 2> /dev/null || :
-       mv "${DBDIR}/deleted_conflicts.tmp" "${DBDIR}/deleted_conflicts"
-       currentpkg=`pkgsys_get_installed_pkg_from_origin "$origin" | tr '\n' ' ' | sed 's/ *$//'`
-       [ -n "$currentpkg" ] || return 0
-       temp_set_msg_current_stage "a ${_MSG_CURRENT_STAGE_general} process for $origin ($currentpkg) $PROGRAM_STEP_COUNTER"
-       database_query_get_target_attributes currentorigin "$origin"
-       if [ -z "${currentorigin_is_relevant}" ]
-       then
-               message_echo "-- (Skipping an irrelevant package for obsolete port $origin as $currentpkg)"
-               message_echo
-               temp_set_msg_current_stage "${_MSG_CURRENT_STAGE_general}"
-               return
-       fi
-       if database_query_is_a_port_suppressed "$origin"
-       then
-               message_echo "-- (Skipped because being suppressed)"
-               message_echo
-               temp_set_msg_current_stage "${_MSG_CURRENT_STAGE_general}"
-               return
-       fi
-       message_stage_title "$PROGRAM_STEP_COUNTER $origin ($currentpkg)"
-       message_target_relations "$origin"
-       if [ $opt_dry_run = yes ]
-       then
-               message_dry_run
-               message_echo
-               temp_set_msg_current_stage "${_MSG_CURRENT_STAGE_general}"
-               return
-       fi
-       message_echo "-- (Creating backup package for $origin as $currentpkg)"
-       if ! pkgsys_get_backup_pkg "$origin" > /dev/null
-       then
-               if [ -d "${DBDIR}/requires/$origin" ]
+       local origin_master origin origin_regexp currentpkg backup_pkgdir backup_pkg pkg
+       origin_master=$1
+       currentpkg=`pkgsys_get_installed_pkg_from_origin "$origin_master" | tr '\n' ' ' | sed 's/ *$//'`
+       [ -n "$currentpkg" ] || currentpkg='deinstalled'
+       message_stage_title "$PROGRAM_STEP_COUNTER $origin_master ($currentpkg)"
+       message_target_relations "$origin_master"
+       for origin in `{ echo "$origin_master"; database_query_initial_orgins "$origin_master"; } | sort -u`
+       do
+               origin_regexp=`str_escape_regexp "$origin"`
+               grep -v -E "^${origin_regexp}[[:space:]]" "${DBDIR}/deleted_conflicts" > ${DBDIR}/deleted_conflicts.tmp 2> /dev/null || :
+               mv "${DBDIR}/deleted_conflicts.tmp" "${DBDIR}/deleted_conflicts"
+               currentpkg=`pkgsys_get_installed_pkg_from_origin "$origin" | tr '\n' ' ' | sed 's/ *$//'`
+               [ -n "$currentpkg" ] || continue
+               temp_set_msg_current_stage "a ${_MSG_CURRENT_STAGE_general} process for $origin ($currentpkg) $PROGRAM_STEP_COUNTER"
+               database_query_get_target_attributes currentorigin "$origin"
+               if [ -z "${currentorigin_is_relevant}" ]
                then
-                       backup_pkgdir=${DBDIR}/backup_packages
-               else
-                       backup_pkgdir=${PKGREPOSITORY}
+                       message_echo "-- (Skipping an non-target package for obsolete port $origin as $currentpkg)"
+                       continue
                fi
-               mkdir -p "$backup_pkgdir"
-               pkg=`echo "$currentpkg" | tr ' ' '\n' | grep -v '^$' | tail -n 1`
-               backup_pkg=`pkgsys_create_backup_pkg "$pkg" "$backup_pkgdir"` || :
-               if [ -n "$backup_pkg" ]
+               if database_query_is_a_port_suppressed "$origin"
                then
-                       message_echo "INFO: The backup is saved at $backup_pkg."
-                       message_echo
-               else
-                       message_echo "*** Continuating forcibly by keeping the installed package"
-                       message_echo
-                       temp_set_msg_current_stage "${_MSG_CURRENT_STAGE_general}"
-                       return
+                       message_echo "-- (Skipped for $origin as $currentpkg because being suppressed)"
+                       continue
                fi
-       fi
-       message_echo "-- (Deleting package for $origin as $currentpkg)"
-       echo "$currentpkg" | tr ' ' '\n' | grep -v '^$' | while read pkg
-       do
-               if ! pkg_delete_f "$currentpkg"
+               if [ $opt_dry_run = yes ]
                then
-                       message_echo "*** Continuating forcibly by hoping success..."
+                       message_echo "-- (Create backup package for $origin as $currentpkg)"
+                       continue
                fi
+               message_echo "-- (Creating backup package for $origin as $currentpkg)"
+               if ! pkgsys_get_backup_pkg "$origin" > /dev/null
+               then
+                       if [ -d "${DBDIR}/requires/$origin" ]
+                       then
+                               backup_pkgdir=${DBDIR}/backup_packages
+                       else
+                               backup_pkgdir=${PKGREPOSITORY}
+                       fi
+                       mkdir -p "$backup_pkgdir"
+                       pkg=`echo "$currentpkg" | tr ' ' '\n' | grep -v '^$' | tail -n 1`
+                       backup_pkg=`pkgsys_create_backup_pkg "$pkg" "$backup_pkgdir"` || :
+                       if [ -n "$backup_pkg" ]
+                       then
+                               message_echo "INFO: The backup is saved at $backup_pkg."
+                               message_echo
+                       else
+                               message_echo "*** Continuating forcibly by keeping the installed package"
+                               continue
+                       fi
+               fi
+               message_echo "-- (Deleting package for $origin as $currentpkg)"
+               echo "$currentpkg" | tr ' ' '\n' | grep -v '^$' | while read pkg
+               do
+                       if ! pkg_delete_f "$currentpkg"
+                       then
+                               message_echo "*** Continuating forcibly by hoping success..."
+                       fi
+               done
        done
+       [ $opt_dry_run = yes ] && message_dry_run
        temp_set_msg_current_stage "${_MSG_CURRENT_STAGE_general}"
        message_echo
 }