OSDN Git Service

Version 3.0.1+toward_3.0.2_20130629222028
[portsreinstall/current.git] / lib / libpkgsys.sh
index edaf807..22f99ee 100644 (file)
@@ -239,6 +239,10 @@ pkgsys_def_pkgtools ()
                {
                        which -a pkg | grep -v '^/usr/sbin/pkg$' | grep -q '/sbin/pkg$'
                }
+               pkg_info_Ea ()
+               {
+                       pkg info -qa 2> /dev/null
+               }
                pkg_info_qoa ()
                {
                        pkg info -qoa 2> /dev/null
@@ -283,6 +287,16 @@ pkgsys_def_pkgtools ()
                {
                        pkg info -Ex "$@" 2> /dev/null
                }
+               pkg_info_qL ()
+               {
+                       pkg info -ql "$@" 2> /dev/null
+               }
+               pkg_check_sanity ()
+               {
+                       local pkg
+                       pkg=$1
+                       pkg check -s "$pkg" 2> /dev/null
+               }
                pkg_info_gen_pkg_origin_table ()
                {
                        pkg query -g '%n-%v\t%o' \* 2> /dev/null > ${DBDIR}/installed_ports:pkg_vs_origin.tbl
@@ -458,6 +472,10 @@ pkgsys_def_pkgtools ()
                {
                        :
                }
+               pkg_info_Ea ()
+               {
+                       pkg_info -Ea 2> /dev/null
+               }
                pkg_info_qoa ()
                {
                        pkg_info -qoa 2> /dev/null
@@ -502,6 +520,16 @@ pkgsys_def_pkgtools ()
                {
                        pkg_info -Ex "$@" 2> /dev/null
                }
+               pkg_info_qL ()
+               {
+                       pkg_info -qL "$@" 2> /dev/null
+               }
+               pkg_check_sanity ()
+               {
+                       local pkg
+                       pkg=$1
+                       pkg_info -qg "$pkg" 2> /dev/null
+               }
                pkg_info_gen_pkg_origin_table ()
                {
                        pkg_info -aE 2> /dev/null | while read pkg
@@ -868,10 +896,10 @@ pkgsys_eval_installed_pkgs_globs ()
        done < $tmp_evaluated
 }
 
-# ============= Get conflicting packages of a port =============
-pkgsys_get_conflicting_pkgs ()
+# ============= Get glob patterns of conflicting packages of a port =============
+pkgsys_get_conflicting_pkgs_patterns ()
 {
-       local origin mode conflicts
+       local mode origin conflicts
        mode=$1
        origin=$2
        conflicts=`database_query_get_makevar_val "$origin" CONFLICTS`
@@ -883,7 +911,52 @@ pkgsys_get_conflicting_pkgs ()
                conflicts=$conflicts' '`database_query_get_makevar_val "$origin" CONFLICTS_INSTALL`
                ;;
        esac
-       pkg_info_Eg $conflicts > ${TMPDIR}/pkgsys_get_conflicting_pkgs::conflicts || :
-       cat "${TMPDIR}/pkgsys_get_conflicting_pkgs::conflicts"
-       [ `wc -l < ${TMPDIR}/pkgsys_get_conflicting_pkgs::conflicts` -gt 0 ]
+       echo "$conflicts"
 }      
+
+# ============= Get conflicting installed packages of a port =============
+pkgsys_get_conflicting_installed_pkgs ()
+{
+       local mode origin tmp_conflicts
+       mode=$1
+       origin=$2
+       tmp_conflicts=${TMPDIR}/pkgsys_get_conflicting_installed_pkgs::conflicts
+       pkg_info_Eg `pkgsys_get_conflicting_pkgs_patterns "$mode" "$origin"` > $tmp_conflicts || :
+       cat "$tmp_conflicts"
+       [ `wc -l < $tmp_conflicts` -gt 0 ]
+}      
+
+# ============= Check whether a package conflicts with a port =============
+pkgsys_chk_conflict_by_a_pkg ()
+{
+       local mode origin pkg tmp_conflicts_ptn
+       mode=$1
+       origin=$2
+       pkg=$2
+       tmp_conflicts_ptn=${TMPDIR}/pkgsys_chk_conflict_by_a_pkg::conflicts_ptn
+       pkgsys_get_conflicting_pkgs_patterns "$mode" "$origin" \
+               | str_convert_glob_to_regexp_pattern > $tmp_conflicts_ptn
+       echo "$pkg" | grep -q -E -f "$tmp_conflicts_ptn"
+}      
+
+# ============= Check whether installed files are lost or broken for a package =============
+pkgsys_sanitychk_pkgcontents ()
+{
+       local pkg tmp_sanity origin
+       pkg=$1
+       tmp_sanity=${TMPDIR}/pkgsys_sanitychk_pkgcontents:sanity
+       pkg_check_sanity "$pkg" > $tmp_sanity || :
+       [ `wc -l < $tmp_sanity` -eq 0 ] && return
+       origin=`pkg_info_qo "$pkg"`
+       if [ $opt_batch_mode = no ]
+       then
+               message_echo "[$pkg ($origin)]"
+               sed 's/^/  /' "$tmp_sanity"
+               message_echo
+       else
+               pkg_replace=`str_escape_replaceval "$pkg"`
+               origin_replace=`str_escape_replaceval "$origin"`
+               sed "s/^/$pkg_replace\\\\$origin_replace\\\\/" "$tmp_sanity" | tr '\\' '\t'
+       fi
+       return 1
+}