OSDN Git Service

Version 3.0.5+toward_3.1.0_20140712053146
[portsreinstall/current.git] / lib / libpkgsys.sh
index 65e4045..b2bc37e 100644 (file)
@@ -2,7 +2,7 @@
 # ==============================================================================
 # portsreinstall library script
 # - Wrappers for hiding version differences in the Ports/Packages system -
-# Copyright (C) 2013 Mamoru Sakaue, MwGhennndo, All Rights Reserved.
+# Copyright (C) 2013-2014 Mamoru Sakaue, MwGhennndo, All Rights Reserved.
 # This software is distributed under the 2-Clause BSD License.
 # ==============================================================================
 
@@ -15,6 +15,22 @@ PKGSYS_CMD_PKG_ADD='pkg add' # Corresponding command for pkg_add
 PKGSYS_AVR_REFETCH_TIMES_PER_SITE=1    # Average number (integer) of retrials for retrieving package or distfiles per mirror site
 PKGSYS_AVR_REFETCH_TIMES_FOR_CHKSUMERR=2       #  Number (integer) of retrials for check sum error in retrieving a package
 
+# ============= Check implementation of the ports tree =============
+pkgsys_chk_ports_tree_implementation ()
+{
+       local var tmp_work
+       if [ ! -d "${PORTSDIR}" ]
+       then
+               message_echo "ERROR: Ports directory ${PORTSDIR} is not found." >&2
+               exit 1
+       fi
+       if [ ! -e "${PORTSDIR}/Makefile" -o ! -e "${PORTSDIR}/Mk/bsd.port.mk" ]
+       then
+               message_echo "ERROR: Ports tree ${PORTSDIR} is missing, broken or incompatible." >&2
+               exit 1
+       fi
+}
+
 # ============= System defined value for the ports/packages =============
 pkgsys_sysvar ()
 {
@@ -147,12 +163,22 @@ pkgsys_fetch_legacy_remote ()
        [ -d "${PKGREPOSITORY}" ] || mkdir -p "${PKGREPOSITORY}"
        if [ -e "${PKGREPOSITORY}/$pkg.tbz" ]
        then
-               fetchedMD5=`md5 "${PKGREPOSITORY}/$pkg.tbz" | sed -E "s/^[^=]*=[[:space:]]*(.*)/\1/"`
-               if [ "x$fetchedMD5" = "x$validMD5" ]
+               if [ -e "${PKGREPOSITORY}/$pkg.md5=$validMD5.tbz" ]
+               then
+                       fetchedMD5=`md5 "${PKGREPOSITORY}/$pkg.md5=$validMD5.tbz" | sed -E "s/^[^=]*=[[:space:]]*(.*)/\1/"`
+                       [ "x$fetchedMD5" = "x$validMD5" ] || rm "${PKGREPOSITORY}/$pkg.md5=$fetchedMD5.tbz"
+               fi
+               if [ -e "${PKGREPOSITORY}/$pkg.md5=$validMD5.tbz" ]
                then
-                       needs_fetch=no
+                       ln -f "${PKGREPOSITORY}/$pkg.md5=$fetchedMD5.tbz" "${PKGREPOSITORY}/$pkg.tbz"
                else
-                       mv "${PKGREPOSITORY}/$pkg.tbz" "${PKGREPOSITORY}/$pkg.md5=$fetchedMD5.tbz"
+                       fetchedMD5=`md5 "${PKGREPOSITORY}/$pkg.tbz" | sed -E "s/^[^=]*=[[:space:]]*(.*)/\1/"`
+                       if [ "x$fetchedMD5" = "x$validMD5" ]
+                       then
+                               needs_fetch=no
+                       else
+                               mv "${PKGREPOSITORY}/$pkg.tbz" "${PKGREPOSITORY}/$pkg.md5=$fetchedMD5.tbz"
+                       fi
                fi
        fi
        if [ $needs_fetch = yes ]
@@ -266,7 +292,7 @@ pkgsys_def_pkgtools ()
 #              }
                pkg_info_qoX ()
                {
-                       pkg info -qoX "$@" 2> /dev/null
+                       pkg info -qox "$@" 2> /dev/null
                }
                pkg_info_qO ()
                {
@@ -649,8 +675,8 @@ pkgsys_pkg_info_qO_init ()
        origin=$1
        tmppkg=${TMPDIR}/pkgsys_pkg_info_qO_init::pkg
        origin_regexp=`str_escape_regexp "$origin"`
-       { sed -n -E "/[[:space:]]$origin_regexp$/p" "${DBDIR}/installed_ports:pkg_vs_origin.tbl" 2> /dev/null || :; } \
-               | cut -f 1 > $tmppkg
+       sed -n -E "/[[:space:]]$origin_regexp$/p" "${DBDIR}/installed_ports:pkg_vs_origin.tbl" 2> /dev/null \
+               | cut -f 1 > $tmppkg || :
        npkgs=`wc -l < $tmppkg`
        if [ $npkgs -gt 0 ]
        then
@@ -754,7 +780,7 @@ pkgsys_eval_ports_glob ()
                shift
                expr "x$glob" : '^x-' > /dev/null 2>&1 && continue
                glob_regexp=`str_convert_portsglob_to_regexp_pattern "$glob"`
-               if expr "$glob" : '[^/][^/]*\/[^/][^/]*$' > /dev/null 2>&1
+               if expr "$glob" : '.*/' > /dev/null 2>&1
                then
                        grep -E "$glob_regexp" "$origlist" 2>&1 || :
                        {
@@ -762,7 +788,7 @@ pkgsys_eval_ports_glob ()
                                cut -f 2 "${DBDIR}/installed_ports:pkg_vs_origin.tbl" 2> /dev/null
                        } | grep -E "$glob_regexp" 2>&1 || :
                else
-                       if expr "$glob" : '^[a-z][a-zA-Z0-9+-]*[a-zA-Z0-9+]$' > /dev/null 2>&1 && \
+                       if expr "$glob" : '^[a-z][a-zA-Z0-9_.+-]*[a-zA-Z0-9_.+]$' > /dev/null 2>&1 && \
                                [ `expr "$glob" : '.*-[0-9]' 2>&1` -eq 0 ]
                        then
                                glob_regexp2=`expr "$glob_regexp" : '\(.*\)\$$' 2>&1`'-[0-9]'
@@ -775,8 +801,8 @@ pkgsys_eval_ports_glob ()
                                sed -n ${index}p "$origlist"
                        done || :
                        glob_regexp2=`expr "$glob_regexp" : '\(.*\)\$$' 2>&1`'[[:space:]]'
-                       { sed -n -E "/$glob_regexp2/p" "${DBDIR}/installed_ports:pkg_vs_origin.tbl" 2> /dev/null || :; } \
-                               | cut -f 2
+                       sed -n -E "/$glob_regexp2/p" "${DBDIR}/installed_ports:pkg_vs_origin.tbl" 2> /dev/null \
+                               | cut -f 2 || :
                        pkg_info_qoX "$glob_regexp" || :
                fi
        done | sort -u
@@ -898,7 +924,7 @@ pkgsys_eval_ports_glob_even_if_nonexistent ()
        glob_pattern=$1
        {
                pkgsys_eval_ports_glob "$glob_pattern" 2> /dev/null || :
-               echo "$glob_pattern" | grep '^[a-z][a-z]*/[a-zA-Z0-9_+-][a-zA-Z0-9_+-]*$' || :
+               echo "$glob_pattern" | grep '^[a-z][a-z]*/[a-zA-Z0-9_.+-][a-zA-Z0-9_.+-]*$' || :
        } | grep -v -e '^$' | sort -u
 }