[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cross-project-issues-dev] Stable URLs for latest Orbit builds

Hi all,

I find it cumbersome and error-prone that I have to look up the latest Orbit build on http://download.eclipse.org/tools/orbit/downloads modify my various build scripts accordingly before I can kick a build. So I've created a cron job that updates the following p2 composite repos in 5 minute intervals:

	http://download.eclipse.org/modeling/emf/cdo/orbit/latest-R
	http://download.eclipse.org/modeling/emf/cdo/orbit/latest-S
	http://download.eclipse.org/modeling/emf/cdo/orbit/latest-I (currently empty)
	http://download.eclipse.org/modeling/emf/cdo/orbit/latest-M (currently empty)

Each composite contains at most one child repo which is the latest Orbit repo of the respective build type, i.e., R, S, I or M-build. The p2.timestamp of a composite only changes when the child location changes.

Please feel free to use these stable URLs yourself if you find them handy ;-)

Cheers
/Eike

----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper


P.S.: I'm not a bash expert, so I attach the used bash scripts to this post. Please provide feedback if there's something wrong with them.
#!/usr/bin/env bash

if [ "$1" == "--force" ]
then
	force=true
	shift
fi

prefix="$1"
suffix="$2"

target="$3"
test ! -d $target && mkdir $target

latest=`ls -d $prefix* 2>/dev/null | tail -1`

if [ -z "$latest" ]
then
	rm $target/build.id $target/composite*.xml 2>/dev/null
	exit
fi

if [ -z "$force" ]
then
	test -f $target/build.id && . $target/build.id
	test "$latest" == "$build_id" && exit
fi

timestamp=`date +%s000`
location=`pwd -P`/$latest$suffix
child=`/home/data/users/estepper/bin/relpath $target $location`

cat <<EOF > $target/compositeContent.xml
<?xml version='1.0' encoding='UTF-8'?>
<?compositeMetadataRepository version='1.0.0'?>
<repository name='Latest Orbit $prefix-Build ($latest)' type='org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository' version='1.0.0'>
    <properties size='2'>
        <property name='p2.timestamp' value='$timestamp'/>
        <property name='p2.compressed' value='true'/>
    </properties>
    <children size='1'>
        <child location='$child'/>
    </children>    
</repository>
EOF

cat <<EOF > $target/compositeArtifacts.xml
<?xml version='1.0' encoding='UTF-8'?>
<?compositeMetadataRepository version='1.0.0'?>
<repository name='Latest Orbit $prefix-Build ($latest)' type='org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository' version='1.0.0'>
    <properties size='2'>
        <property name='p2.timestamp' value='$timestamp'/>
        <property name='p2.compressed' value='true'/>
    </properties>
    <children size='1'>
        <child location='$child'/>
    </children>    
</repository>
EOF

echo "build_id=$latest" > $target/build.id
#!/usr/bin/env bash

cd /home/data/httpd/download.eclipse.org/tools/orbit/downloads/drops
target=/home/data/httpd/download.eclipse.org/modeling/emf/cdo/orbit

/home/data/users/estepper/bin/compose-latest R /repository $target/latest-R
/home/data/users/estepper/bin/compose-latest S /repository $target/latest-S
/home/data/users/estepper/bin/compose-latest I /repository $target/latest-I
/home/data/users/estepper/bin/compose-latest M /repository $target/latest-M
#!/usr/bin/env bash

# Taken from http://stackoverflow.com/questions/2564634/bash-convert-absolute-path-into-relative-path-given-a-current-directory

# both $1 and $2 are absolute paths beginning with /
# returns relative path to $2/$target from $1/$source
source=$1
target=$2

common_part=$source # for now
result="" # for now

while [[ "${target#$common_part}" == "${target}" ]]; do
    # no match, means that candidate common part is not correct
    # go up one level (reduce common part)
    common_part="$(dirname $common_part)"
    # and record that we went back, with correct / handling
    if [[ -z $result ]]; then
        result=".."
    else
        result="../$result"
    fi
done

if [[ $common_part == "/" ]]; then
    # special case for root (no common path)
    result="$result/"
fi

# since we now have identified the common part,
# compute the non-common part
forward_part="${target#$common_part}"

# and now stick all parts together
if [[ -n $result ]] && [[ -n $forward_part ]]; then
    result="$result$forward_part"
elif [[ -n $forward_part ]]; then
    # extra slash removal
    result="${forward_part:1}"
fi

echo $result