# ============= 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
}