GNOME/Packaging/GNOME:STABLE

From openSUSE

This HowTo describes the process of creating and updating GNOME:STABLE:x.yy

Creating GNOME:STABLE:x.yy

When GNOME releases a major version, and GNOME:Factory has been updated, we want to copy these packages to GNOME:STABLE:x.yy.

Here are the steps needed to achieve this (Using GNOME v2.26, and openSUSE 11.1 as an example);

1. Create GNOME:STABLE:2.26

2. Using 'osc meta prj -e GNOME:STABLE:2.26', add the following repositories (Note! The order of the repositories are important);

<repository name="openSUSE_11.1">
  <path project="GNOME:Backports:2.26" repository="openSUSE_11.1"/>
  <path project="openSUSE:11.1:Update" repository="standard"/>
  <path project="openSUSE:11.1" repository="standard"/>
  <arch>i586</arch>
  <arch>x86_64</arch>
</repository>

3. Copy all packages, using something like this;

pkgs=`osc rprjresults -c GNOME:Factory|awk -F";" '{print $1}'`; for pkg in $pkgs; do osc copypac --expand GNOME:Factory $pkg GNOME:STABLE:2.26; done

4. Change the development project to GNOME:STABLE:2.26

pkgs=`osc rprjresults -c GNOME:STABLE:2.26|awk -F";" '{print $1}'`; for pkg in $pkgs; do osc meta GNOME:STABLE:2.26 $pkg|sed -e 's/GNOME:Factory/GNOME:STABLE:2.26/g'|osc meta GNOME:STABLE:2.26 $pkg -F -; done

Updating GNOME:STABLE:x.yy

When GNOME releases a new dot release (ie 2.26.1) and GNOME:Factory have been updated, we can generally copy all packages to GNOME:STABLE again.

1. Find out what packages are newer in G:F compared to G:S:2.26. The script at the end of this page will list all packages that are newer (pipe it to a file), for example.

2. Review the list and make sure it only contains packages that should be updated. Some packages might be too new and should not be copied. If in doubt, ask on IRC (freenode/#opensuse-gnome).

3. Do the update, using something like this;

pkgs=`cat outputfile.txt|awk -F";" '{print $1}'`; for pkg in $pkgs; do osc copypac --expand GNOME:Factory $pkg GNOME:STABLE:2.26; done

Script to get list of packages to copy

Please note that this script will not list packages which have changed in G:F if the change is not an upstream version change (eg, just a new patch, or some packaging change).

#!/bin/bash
 
wget 'http://tmp.vuntz.net/opensuse-packages/obs.py?format=csv&project=GNOME:Factory' -O gFactory
wget 'http://tmp.vuntz.net/opensuse-packages/obs.py?format=csv&project=GNOME:STABLE:2.26' -O gStable
 
pkgs226=`cat gStable |awk -F";" '{print $1";"$3}'`
pkgsFactory=`cat gFactory |awk -F";" '{print $1";"$3}'`
set $pkgsFactory
 
for pkg in $pkgsFactory; do
	last=$pkg
done
 
for pkg in $pkgs226; do
	p226=`echo $pkg|awk -F";" '{print $1}'`
	v226=`echo $pkg|awk -F";" '{print $2}'`
#	echo "Package $p226 is version ====> $v226"
	found=0
	try=0
 
	while [ 1 ]; do
		pF=`echo $1|awk -F";" '{print $1}'`
		if [ "$pF" = "$p226" ]; then
			vF=`echo $1|awk -F";" '{print $2}'`
			found=1
			if [ "$vF" \> "$v226" ]; then
				if [ "$vF" \> "2.26.99" -a "$vF" \< "2.27.99" ]; then
					echo "===============> $pF is newer in GNOME:Factory, but it might be too new ($v226 vs $vF)"
				else
#					echo "$p226 is newer in GNOME:Factory ($v226 vs $vF)"
					updPack=$updPack" "$1
				fi
			fi
			break
		else
			shift
		fi
		if [ $1 = $last -a "$try" = "0" ]; then
			set $pkgsFactory
			try=1
		elif [ "$try" = "1" ]; then
			break
		fi
	done
	shift
	if [ "$found" = "0" ]; then
		echo "Could not locate $p226 in G:F"
	fi
done
 
echo "List of newer packages"
echo "======================"
for pkg in $updPack; do
	echo $pkg
done