pkg_merge/mergespec.sh
author jenda
Wed, 05 Jan 2011 09:21:13 +0100
changeset 512 e43c8b0277d5
parent 508 d26b070f438b
permissions -rwxr-xr-x
pkg_merge/mergearch.sh: add SVR4DIR3 (used by jffmake)

#!/bin/ksh

# merge multiple sub-repositories (for same architecture) into single one
# from:
#     repo.redist: redist repo created with static manifests
#     repo.imspec: created with pkgbuild in inputmethod/specs
#     repo.spec: created with pkgbuild in g11n-spec
#     repo.import: [workaround] created from SVR4 packages
# to:
#     repo.redist.l10n

export LC_ALL=C

date

if [ $# -eq 0 ] || [ \( "$1" != "sparc" \) -a \( "$1" != "i386" \) ]
then
	print -u2 "architecture not specified or invalid value"
	print -u2 "usage: $0 sparc|i386"
	exit 1
else
	PKGMACH=$1
fi

PKGDEST="${PKGDEST:-`cd ../pkgdest/$PKGMACH; pwd`}"
SR_STATIC=file://$PKGDEST/repo.redist
SR_IMSPEC=file://$PKGDEST/repo.imspec
SR_SPEC=file://$PKGDEST/repo.spec
SR_IMPORT=file://$PKGDEST/repo.import

DRD=$PKGDEST/repo.l10n
DR=file://$DRD

INC=consolidation/l10n/l10n-incorporation
RED=consolidation/l10n/l10n-redistributable

PUBLISHER=${L10N_PUBLISHER:-"l10n-nightly"}

rm -rf $DRD
pkgrepo create --version 3 $DRD
pkgrepo set -s $DR publisher/prefix=${PUBLISHER}

TMPD=$PKGDEST/TMPD.$$
rm -rf $TMPD; mkdir $TMPD
TMPMF=$TMPD/tmpmf

MF_INC=$TMPD/l10n-incorporation.mf
MF_RED=$TMPD/l10n-redistributable.mf
MF_INC_B=${MF_INC}.body
MF_RED_B=${MF_RED}.body
cp /dev/null $MF_INC_B
cp /dev/null $MF_RED_B

PUBOPTS="--fmri-in-manifest --no-catalog --no-index"
PUBLISH="pkgsend -s $DR publish $PUBOPTS"
LEGACY_REV_DATE=${LEGACY_REV_DATE:-"2010.12.06"}

for sr in $SR_STATIC $SR_IMSPEC $SR_SPEC $SR_IMPORT
do
	echo "receiving from $sr..."
	list="List.`echo $sr | sed -e 's;.*/;;'`"

	pkgrecv -s $sr --newest > $TMPD/$list

	cat $TMPD/$list | while read p
	do
		pkgrecv -s $sr -d $TMPD --raw "$p"
		ps="`echo $p | sed -e 's;^pkg:/;;' -e s:^/$PUBLISHER/::`"
		pd="`echo $ps | sed \
			-e 's;/;%2F;g' -e 's;,;%2C;g' -e 's;:;%3A;g' \
			-e 's;@;/;g'`"
		mf="$TMPD/$pd/manifest"
		fmri="`echo $ps | sed -e 's/:20[0-9][0-9].*//'`"

		if [ "$sr" != "$SR_STATIC" ] && expr "$fmri" : "SUNW" > /dev/null
		then
			echo "[skip] $fmri"
		elif expr "$fmri" : "entire" > /dev/null
		then
			echo "[skip] $fmri"
		elif expr "$fmri" : "$INC" > /dev/null
		then
			if [ "$sr" = "$SR_STATIC" ]
			then
				echo "[l10n-incorporation] $fmri"
				grep -v '^depend ' $mf > $MF_INC
			else
				echo "[skip] $fmri"
			fi
		elif expr "$fmri" : "$RED" > /dev/null
		then
			echo "[l10n-redistributable] $fmri"
			grep -v '^depend ' $mf > $MF_RED
		elif grep '^set name=pkg\.obsolete value=true' $mf > /dev/null
		then
			echo "[obsolete] $fmri"
			echo "depend fmri=$fmri type=incorporate" >> $MF_INC_B
			$PUBLISH -d $TMPD/$pd $mf
		elif grep '^set name=pkg\.renamed value=true' $mf > /dev/null
		then
			echo "[renamed] $fmri"
			echo "depend fmri=$fmri type=incorporate" >> $MF_INC_B
			$PUBLISH -d $TMPD/$pd $mf
		elif expr "$fmri" : "dummy" > /dev/null
		then
			echo "[dummy] $fmri"
		else
			if grep "^depend fmri=$INC type=require" $mf > /dev/null
			then
				echo "[current] $fmri"
			else
				echo "[current-addinc] $fmri"
				echo "depend fmri=$INC type=require" >> $mf
			fi
			if grep '^legacy.*REV=' $mf > /dev/null
			then
				echo "adjusting legacy REV date"
				cp $mf $TMPMF
				sed -e '/REV=[^ 	]*20[0-9][0-9]\...\...\...\.../s/20[0-9][0-9]\...\...\...\.../'"$LEGACY_REV_DATE"'/' $TMPMF > $mf
			fi
# workaround
# 1
			if ! egrep -s 'set name=org\.opensolaris\.consolidation ' $mf
			then
				echo "WORKAROUND: add org.opensolaris.consolidation"
				echo "set name=org.opensolaris.consolidation value=l10n" >> $mf
			fi
# 2
			if egrep -s "^dir group=bin.* path=usr$" $mf
			then
				echo "WORKAROUND: correct group of usr"
				cp $mf $TMPMF
				sed -e '/^dir group=bin.* path=usr$/s;group=bin;group=sys;' $TMPMF > $mf
			fi
# 3
			echo "WORKAROUND: remove pkgbuild's default info.*_url"
			cp $mf $TMPMF
			cat $TMPMF | \
			grep -v '^set name=info\.maintainer_url value=pkgbuild-sfe-devel@sourceforge\.net' | \
			grep -v '^set name=info\.upstream_url value=http://pkgbuild\.sf\.net/' | \
			cat > $mf
# end of workaround
			echo "depend fmri=$fmri type=incorporate" >> $MF_INC_B
			echo "depend fmri=$fmri type=require" >> $MF_RED_B
			$PUBLISH -d $TMPD/$pd $mf
		fi
	done
done

sort $MF_INC_B >> $MF_INC
$PUBLISH -d $TMPD $MF_INC
sort $MF_RED_B >> $MF_RED
$PUBLISH -d $TMPD $MF_RED

rm -rf $TMPD

echo "updating catalog and index..."
/usr/lib/pkg.depotd -d $DRD --add-content --exit-ready

date