From 7555208076caa3285ac2718191059e4c14aaf0b1c743ef0a5fcac391ed07a695 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Schr=C3=B6ter?= Date: Mon, 18 Oct 2010 12:49:18 +0000 Subject: [PATCH] osc copypac from project:openSUSE:Tools:Unstable package:obs-service-tar_scm revision:7 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Tools/obs-service-tar_scm?expand=0&rev=1 --- .gitattributes | 23 +++++ .gitignore | 1 + obs-service-tar_scm.changes | 5 + obs-service-tar_scm.spec | 35 +++++++ tar_scm | 178 ++++++++++++++++++++++++++++++++++++ tar_scm.service | 30 ++++++ 6 files changed, 272 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 obs-service-tar_scm.changes create mode 100644 obs-service-tar_scm.spec create mode 100644 tar_scm create mode 100644 tar_scm.service diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/obs-service-tar_scm.changes b/obs-service-tar_scm.changes new file mode 100644 index 0000000..a328af0 --- /dev/null +++ b/obs-service-tar_scm.changes @@ -0,0 +1,5 @@ +------------------------------------------------------------------- +Fri Sep 3 10:31:32 UTC 2010 - adrian@suse.de + +- initial version to checkout/update svn or git repos and create a tar + diff --git a/obs-service-tar_scm.spec b/obs-service-tar_scm.spec new file mode 100644 index 0000000..25a5f9b --- /dev/null +++ b/obs-service-tar_scm.spec @@ -0,0 +1,35 @@ + +Name: obs-service-tar_scm +License: GPL v2 or later +Group: Development/Tools/Building +Summary: An OBS source service: checkout or update a tar ball from svn/git/cvs +Version: 0.1 +Release: 1 +Source: tar_scm +Source1: tar_scm.service +Requires: subversion git cvs +BuildRoot: %{_tmppath}/%{name}-%{version}-build +BuildArch: noarch + +%description +This is a source service for openSUSE Build Service. + +It supports downloading src.rpms and extracting + + +%prep +%setup -q -D -T 0 -n . + +%build + + +%install +mkdir -p $RPM_BUILD_ROOT/usr/lib/obs/service +install -m 0755 %{SOURCE0} $RPM_BUILD_ROOT/usr/lib/obs/service +install -m 0644 %{SOURCE1} $RPM_BUILD_ROOT/usr/lib/obs/service + +%files +%defattr(-,root,root) +%dir /usr/lib/obs +/usr/lib/obs/service + diff --git a/tar_scm b/tar_scm new file mode 100644 index 0000000..d0a2ab4 --- /dev/null +++ b/tar_scm @@ -0,0 +1,178 @@ +#!/bin/bash + +# A simple script to checkout or update a svn or git repo as source service + +# defaults +MYSCM="" +MYURL="" +MYVERSION="" +MYPREFIX="" +MYFILENAME="" +MYREVISION="" + +while test $# -gt 0; do + case $1 in + *-scm) + MYSCM="$2" + shift + ;; + *-url) + MYURL="$2" + shift + ;; + *-subdir) + MYSUBDIR="$2" + shift + ;; + *-revision) + MYREVISION="$2" + shift + ;; + *-version) + MYVERSION="$2" + shift + ;; + *-versionprefix) + MYPREFIX="$2" + shift + ;; + *-filename) + MYFILENAME="${2#/}" + shift + ;; + *-outdir) + MYOUTDIR="$2" + shift + ;; + *) + echo Unknown parameter $1. + echo 'Usage: tar_scm --scm $SCM --url $URL --outdir $OUT' + exit 1 + ;; + esac + shift +done + +FILE="$FILENAME" +VERSION="$MYVERSION" + +if [ -z "$MYSCM" ]; then + echo "ERROR: no scm is given via --scm parameter (git/svn)!" + exit 1 +fi +if [ -z "$MYURL" ]; then + echo "ERROR: no checkout URL is given via --url parameter!" + exit 1 +fi +if [ -z "$MYOUTDIR" ]; then + echo "ERROR: no output directory is given via --outdir parameter!" + exit 1 +fi + +cd "$MYOUTDIR" + +if [ -z "$FILE" -a "$MYSCM" == "git" ]; then + FILE="${MYURL%/}" + FILE="${FILE##*/}" + FILE="${FILE%.git}" +fi +if [ -z "$FILE" -a "$MYSCM" == "svn" ]; then + FILE="${MYURL%/}" + FILE="${FILE##*/}" +fi + +existing_tar=$(echo _service:tar_scm:${FILE}-*.tar*) +if [ -e "$existing_tar" ]; then + UNCOMPRESS="cat" + if [ "${existing_tar%.tar.gz}" != "$existing_tar" ]; then + UNCOMPRESS="gunzip -c" + elif [ "${existing_tar%.tar.bz2}" != "$existing_tar" ]; then + UNCOMPRESS="bunzip2 -c" + elif [ "${existing_tar%.tar.xz}" != "$existing_tar" ]; then + UNCOMPRESS="xz -dc" + fi + if $UNCOMPRESS "$existing_tar" | tar xf -; then + TAR_DIRECTORY=`find * -maxdepth 0 -a -type d` + fi +fi + +if [ "$MYSCM" == "svn" ]; then + if [ -z "$SUBDIR" -a -d "$TAR_DIRECTORY" ]; then + # update existing content for speed/bandwidth reasons + cd "$TAR_DIRECTORY" + OLDVERSION=`LC_ALL=C svn info | sed -n 's,^Last Changed Rev: \(.*\),\1,p'` + if [ -n "$MYREVISION" ]; then + svn up -r"$MYREVISION" || exit 1 + else + svn up || exit 1 + fi + NEWVERSION=`LC_ALL=C svn info | sed -n 's,^Last Changed Rev: \(.*\),\1,p'` + cd - + if [ "$OLDVERSION" == "$NEWVERSION" ]; then + # cleanup and skip + rm -rf "$TAR_DIRECTORY" + exit 0 + fi + mv "$TAR_DIRECTORY" "${FILE}" || exit 1 + else + # new checkout + if [ -n "$MYREVISION" ]; then + svn co -r"$MYREVISION" "$MYURL" "${FILE}" || exit 1 + else + svn co "$MYURL" "${FILE}" || exit 1 + fi + fi + if [ -z "$VERSION" ]; then + cd "$FILE" + [ -n "$MYPREFIX" ] && MYPREFIX="$MYPREFIX.rev" + VERSION=$MYPREFIX`LC_ALL=C svn info | sed -n 's,^Last Changed Rev: \(.*\),\1,p'` + cd - + fi +elif [ "$MYSCM" == "git" ]; then + if [ -z "$SUBDIR" -a -d "$TAR_DIRECTORY" ]; then + # update existing content for speed/bandwidth reasons + cd "$TAR_DIRECTORY" + OLDVERSION=`git show --pretty=%at | head -n 1` + git pull || exit 1 + if [ -n "$MYREVISION" ]; then + git checkout "$MYREVISION" || exit 1 + fi + NEWVERSION=`git show --pretty=%at | head -n 1` + cd - + if [ "$OLDVERSION" == "$NEWVERSION" ]; then + # cleanup and skip + rm -rf "$TAR_DIRECTORY" + exit 0 + fi + mv "$TAR_DIRECTORY" "${FILE}" || exit 1 + else + # new checkout + git clone "$MYURL" "${FILE}" || exit 1 + if [ -n "$MYREVISION" ]; then + cd "$FILE" + git checkout "$MYREVISION" || exit 1 + cd - + fi + fi + if [ -z "$VERSION" ]; then + cd "$FILE" + [ -n "$MYPREFIX" ] && MYPREFIX="$MYPREFIX." + VERSION=$MYPREFIX`git show --pretty=%at | head -n 1` + cd - + fi +else + echo "ERROR: unknown scm $MYSCM" + exit 1 +fi + +if [ ! -e "$FILE/$SUBDIR" ]; then + echo "Directory does not exist: $FILE/$SUBDIR" + exit 1 +fi + +mv "$FILE/$SUBDIR" "${FILE}-${VERSION}" || exit 1 + +tar cf "$MYOUTDIR/${FILE}-${VERSION}.tar" "${FILE}-${VERSION}" || exit 1 +rm -rf "${FILE}-${VERSION}" + +exit 0 diff --git a/tar_scm.service b/tar_scm.service new file mode 100644 index 0000000..9dc740f --- /dev/null +++ b/tar_scm.service @@ -0,0 +1,30 @@ + + Create a tar ball from SCM repository + This service uses a scm client to checkout or update from a given repository. Supported are svn, cvs and git. + + Used SCM + svn + git + + + + Checkout url + + + + package just a sub directory + + + specify a base version as prefix. + + + specify a revision + + + base file name to be created + + + version to be used in tar + + +