Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Keep pkg2ng to not break existing documentation, make it use pkg convert
Baptiste Daroussin committed 13 years ago
commit 8ec9bd005ce642ec7a5ff4fbbd28883f790d112e
parent 83736789ab2ed5480435beb3e21ab08ceaef2fce
1 file changed +1 -131
modified ports/pkg2ng
@@ -1,133 +1,3 @@
#!/bin/sh

-
: "${PORTSDIR:=/usr/ports}"
-

-
export PKG_OLD_NOWARN=yes
-

-
if [ $( id -u ) -ne 0 ]
-
then
-
	echo "This program needs to be run as root"
-
	return 77	# EX_PERM
-
fi
-

-
: ${ARCH=$(uname -m)}
-
failed_pkgs=""
-
MOVED=0
-
PKGDB="$(make -C ${PORTSDIR}/ports-mgmt/pkg -VPKG_DBDIR)"
-
PKGBAK="$PKGDB.bak"
-

-
for PKG in $( pkg_info -Ea )
-
do
-
	DB="${PKGDB}/${PKG}"
-

-
	# Work around lingering portmaster distfiles showing "corruption"
-
	if [ ! -e "${DB}/+CONTENTS" ] && [ "$(/bin/ls ${DB})" = "distfiles" ]; then
-
		continue
-
	fi
-

-
	DESC="${DB}/+DESC"
-
	if [ ! -e "${PKGBAK}" ]; then
-
		echo "Creating backup pkg_info(1) database directory in ${PKGBAK}."
-
		mkdir -p ${PKGBAK}
-
	fi
-

-
	ORIGIN=$(pkg_info -qo ${PKG})
-
	# register a package only if it's not registered already
-
	if pkg info -e ${ORIGIN}; then
-
		echo "${PKG} is already registered."
-
		if [ -e ${DB} ]; then
-
			mv ${DB} ${PKGBAK}/${PKG}
-
			MOVED=1
-
		fi
-
		continue
-
	fi
-
	PREFX=$(pkg_info -qp ${PKG})
-
	if [ -d ${PORTSDIR}/${ORIGIN} ]; then
-
		MAINTAINER=$( make -C ${PORTSDIR}/${ORIGIN} -V MAINTAINER )
-
		CATEGORIES=$( make -C ${PORTSDIR}/${ORIGIN} -V CATEGORIES | sed -e "s/ /,/g")
-
		LICENSES=$( make -C ${PORTSDIR}/${ORIGIN} -V LICENSE | sed -e "s/ /,/g")
-
		LICLOGIC=$(make -C ${PORTSDIR}/${ORIGIN} -V LICENSE_COMB )
-
		OPTIONS=$(make -C ${PORTSDIR}/${ORIGIN} showconfig | awk 'BEGIN{ line=""; }!/^=/ { gsub(/=/,": ",$1); gsub(/:$/,"",$1); line=line" "$1","; } END{print line}')
-
		USERS=$(make -C ${PORTSDIR}/${ORIGIN} -V USERS | sed -e "s/ /,/g")
-
		GROUPS=$(make -C ${PORTSDIR}/${ORIGIN} -V GROUPS | sed -e "s/ /,/g")
-
	else
-
		MAINTAINER="unknown"
-
		CATEGORIES=${ORIGIN%/*}
-
	fi
-

-
	# +CONTENTS
-
	MDIR=$(mktemp -d /tmp/pkg2ngXXXXX)
-
	test -f ${DB}/+DISPLAY && cp -f ${DB}/+DISPLAY ${MDIR}
-
	test -f ${DB}/+MTREE_DIRS && cp -f ${DB}/+MTREE_DIRS ${MDIR}
-
	test -f ${DB}/+DESC && cp -f ${DB}/+DESC ${MDIR}
-
	MANIFEST=${MDIR}/+MANIFEST
-
	PLIST=${MDIR}/plist
-
	cp -f ${DB}/+INSTALL ${MDIR} 2>/dev/null
-
	echo "name: ${PKG%-*}" >> ${MANIFEST}
-
	echo "version: ${PKG##*-}" >> ${MANIFEST}
-
	echo "origin: ${ORIGIN}" >> ${MANIFEST}
-
	echo "comment: |" >> ${MANIFEST}
-
	echo -n "  " >> ${MANIFEST}
-
	cat ${DB}/+COMMENT >> ${MANIFEST}
-
	echo "maintainer: ${MAINTAINER}" >> ${MANIFEST}
-
	echo "prefix: ${PREFX##* }" >> ${MANIFEST}
-
	echo "licenselogic: ${LICLOGIC:-single}" >> ${MANIFEST}
-
	test -n "${LICENSES}" && echo "licenses: [${LICENSES}]" >> ${MANIFEST}
-
	echo "deps:" >> ${MANIFEST}
-
	pkg_info -qr ${PKG} | while read ignore dep; do
-
		deporigin=$(pkg_info -qo ${dep})
-
		echo -e "  ${dep%-*}: { origin: \"${deporigin}\", version: \"${dep##*-}\"}" >> ${MANIFEST}
-
	done
-
	egrep -v "^@(name|pkgdep|ignore|conflicts|display)" ${DB}/+CONTENTS >> ${PLIST}
-
	test -n "${CATEGORIES}" && echo "categories: [${CATEGORIES}]" >> ${MANIFEST}
-
	test -n "${OPTIONS}" && echo "options: {${OPTIONS}}" >> ${MANIFEST}
-
	test -n "${USERS}" && echo "users: [${USERS}]" >> ${MANIFEST}
-
	test -n "${GROUPS}" && echo "groups: [${GROUPS}]" >> ${MANIFEST}
-

-
	pkg register -l -m ${MDIR} -f ${PLIST} ${CMD_ARGS}
-
	if [ $? -ne 0 ]; then
-
		echo "Registration of ${PKG} failed." >&2
-
		cat ${MANIFEST}
-
		failed_pkgs="${failed_pkgs} ${PKG}"
-
	else
-
		rm -rf ${MANIFEST}
-
	fi
-

-
	rm -rf ${MDIR}
-
done
-

-
if [ ${MOVED} -eq 1 ]; then
-
	echo "Moved old package database to ${PKGBAK}."
-
fi
-

-
if [ -n "${failed_pkgs}" ]; then
-
	echo "" >&2
-
	echo "!!! Some packages failed to register !!!" >&2
-
	echo "Please fix them by upgrading them or removing them" >&2
-
	echo "or rerun \"PERMISSIVE=yes pkg2ng\" if you *really* must" >&2
-
	echo "Failed packages: ${failed_pkgs}" >&2
-
else
-
	for PKG in $( pkg_info -Ea ); do
-
		DB="${PKGDB}/${PKG}"
-
		# Ignore package dirs that only have portmaster 'distfiles' in them
-
		if [ -e ${DB} ] && [ "$(/bin/ls ${DB})" != "distfiles" ]; then
-
			cp -pr ${DB} ${PKGBAK}/${PKG}
-
			# Remove only the files documented in
-
			# pkg_add(1), then remove ${DB} only if empty
-
			for f in +COMMENT +CONTENTS +DEINSTALL +DESC \
-
                                 +DISPLAY +INSTALL +MTREE_DIRS \
-
			         +POST-DEINSTALL +POST-INSTALL  +REQUIRE \
-
                                 +REQUIRED_BY ;
-
			do
-
			    rm -f ${DB}/$f
-
			done
-
			rmdir ${DB} 2>/dev/null || true
-
			MOVED=1
-
		fi
-
	done
-
	echo "Conversion has been successfully finished"
-
	echo "Your old packages database has been moved to: ${PKGBAK}."
-
fi
-

-
# Delete the portupgrade pkgdb to avoid discrepencies. It will be auto recreated.
-
rm -f /var/db/pkg/pkgdb.db > /dev/null 2>&1
+
pkg convert