From 5bd5aea48443d4e5fc3d3d4cc3f332ad946efe8d Mon Sep 17 00:00:00 2001 From: Alec Leamas Date: Thu, 7 Oct 2010 01:42:33 +0200 Subject: [PATCH] make-dist handles commit arg OK, make-dist list links all sources. Smaller clean-ups. --- pkg/fedora/Gemfile.lock.patch | 13 ++ pkg/fedora/SOURCES | 7 + pkg/fedora/diaspora-setup | 2 +- pkg/fedora/make-dist.sh | 264 ++++++++++++++++++++++++++++++++++ 4 files changed, 285 insertions(+), 1 deletion(-) create mode 100644 pkg/fedora/Gemfile.lock.patch create mode 100644 pkg/fedora/SOURCES create mode 100755 pkg/fedora/make-dist.sh diff --git a/pkg/fedora/Gemfile.lock.patch b/pkg/fedora/Gemfile.lock.patch new file mode 100644 index 000000000..7b96c043e --- /dev/null +++ b/pkg/fedora/Gemfile.lock.patch @@ -0,0 +1,13 @@ +diff --git a/Gemfile.lock b/Gemfile.lock +index 8534f58..44d386e 100644 +--- a/Gemfile.lock ++++ b/Gemfile.lock +@@ -258,7 +258,7 @@ DEPENDENCIES + autotest + bson (= 1.0.7) + bson_ext (= 1.0.7) +- bundler (= 1.0.0) ++ bundler (>= 1.0.0) + capybara (~> 0.3.9) + carrierwave! + cucumber-rails (= 0.3.2) diff --git a/pkg/fedora/SOURCES b/pkg/fedora/SOURCES new file mode 100644 index 000000000..4b487fdf5 --- /dev/null +++ b/pkg/fedora/SOURCES @@ -0,0 +1,7 @@ +# These files will be linked to %_sourcedir by 'make-dist links' +.bundle +diaspora-setup +diaspora-ws +Gemfile.patch +perm-fix.patch +source-fix.patch diff --git a/pkg/fedora/diaspora-setup b/pkg/fedora/diaspora-setup index d4c275915..e103e789d 100755 --- a/pkg/fedora/diaspora-setup +++ b/pkg/fedora/diaspora-setup @@ -27,7 +27,7 @@ else exit 1 fi -# %attr(0777, diaspora, apache) doesn't work in specfile due to umask 022. +# %attr(0777, diaspora, diaspora) doesn't work in specfile due to umask 022. chmod 777 /var/lib/diaspora/uploads hostname=$( awk '/pod_url:/ { print $2; exit }' ] +# +# -b create a bundler bundle for diaspora +# -d create a diaspora source tarball +# -s synchronize Gemfile.lock VERY INTRUSIVE to RUBY ENVIRONMENT +# -c Use a given commit instead of last available + +# +# Create a diaspora distribution +# +# Builds a diaspora distribution containing the application and bundled +# libraries. Normally checks out latest version of the master branch. +# +GIT_REPO='http://github.com/diaspora/diaspora.git' +RELEASE='HEAD' +VERSION='0.0' + +function git_id +# +# Echo package-friendly source id. +# +# Usage: git_id [-n] [file or directory] +# +{ + nl="\n" + file_or_dir="$PWD" + test "$1" = '-n' && { nl=""; shift; } + test -n "$1" && file_or_dir="$1" + if [ -d $file_or_dir ]; then + file="" + dir=$file_or_dir + else + file=$(basename $file_or_dir) + dir=$(dirname $file_or_dir) + fi + + export LANG=C + ( + cd $dir + git log -1 --abbrev-commit --date=iso $file | + awk -v nl="$nl" \ + ' /commit/ { commit = $2 } + /Date/ { split( $2, d, "-") + split( $3, t, ":") + } + END { printf( "%s%s%s%s%s_%s%s", + substr( d[1],3), d[2], d[3], + t[1], t[2], + commit, nl) + }' + ) +} + + +function fix_alphatag() +# Patch version on top comment first id line: +# Uses %define git_release to get release. +#* Fri Sep 24 2010 name surname 1.20100925_faf234320 +{ + dist=$(rpm --eval %dist) + awk -v dist="$dist" -v version="$2" \ + ' BEGIN { done = 0 } + /%define/ { if ($2 = "git_release") release = $3 } + /^[*]/ { if (done) + print + else + { + gsub( "1[.].*", "") + printf( "%s%s-1.%s%s\n", + $0, version, release,dist) + done = 1 + } + next + } + { print }' \ + < $1 > $1.tmp && cp $1.tmp $1 && rm $1.tmp +} + +function fix_bundle_deps +# usage: fix_bundle_deps release +# Patches Requires: diaspora-bundle = 0.0-20101021-aefsf323148 +{ + awk -v vers="$2-$3" \ + ' /Requires:/ { if ($2 == "diaspora-bundle") + printf( "%s %s = %s\n", $1,$2,vers) + else + print + next + } + { print}' \ + < $1 > $1.tmp && cp $1.tmp $1 && rm $1.tmp +} + +function patch() +# Patch git_release, Requires: diaspora-bundle and top comment version. +# Usage: patch VERSION RELEASE +{ + sed -e "/^%define/s|HEAD|$2|" \ + -e '/^Version:/s|.*|Version: '$1'|' \ + dist/diaspora.spec + fix_alphatag dist/diaspora.spec $1 + #mkdir dist/diaspora/tmp || : + bundle_id=$(git_id dist/diaspora/Gemfile) + fix_bundle_deps dist/diaspora.spec $1 "1.$bundle_id.fc13" + sed -e "/^%define/s|HEAD|$bundle_deps|" \ + -e '/^Version:/s|.*|Version: '$1'|' \ + < diaspora-bundle.spec > dist/diaspora-bundle.spec + + cp dist/diaspora.spec dist/diaspora/diaspora.spec +} + +function checkout() +# Checkout last version of diaspora unless it's already there. +# Usage: checkout [commit id, defaults to HEAD] +# Returns: commit for current branch's HEAD. +{ + mkdir dist >/dev/null 2>&1 || : + ( + cd dist + test -d diaspora || { + git clone --quiet $GIT_REPO; + ( + cd diaspora; + git remote add upstream \ + git://github.com/diaspora/diaspora.git + ) + } + cd diaspora; + git fetch --quiet upstream + git merge --quiet upstream/master + git checkout --quiet -b dist ${1:-'HEAD'} + git_id -n + ) +} + + +function make_dist +# Create a distribution tarball +{ + commit=$(checkout ${1:-'HEAD'}) + patch $VERSION $commit + + RELEASE_DIR="diaspora-$VERSION-$commit" + rm -rf dist/${RELEASE_DIR} + mkdir dist/${RELEASE_DIR} + cp diaspora-ws diaspora-setup diaspora.logconf dist/${RELEASE_DIR} + cd dist + mkdir ${RELEASE_DIR}/master + cp -ar diaspora/* diaspora/.git* ${RELEASE_DIR}/master + cp -r ../.bundle ${RELEASE_DIR}/master + mv ${RELEASE_DIR}/master/diaspora.spec ${RELEASE_DIR} + tar czf ${RELEASE_DIR}.tar.gz ${RELEASE_DIR} && rm -rf ${RELEASE_DIR} +} + +function make_bundle() +{ + checkout 'HEAD' + bundle_id=$(git_id dist/diaspora/Gemfile) + bundle_name="diaspora-bundle-$VERSION-$bundle_id" + test -e "$bundle_name" || { + cd dist + rm -rf $bundle_name + mkdir -p $bundle_name/bundle + pushd diaspora > /dev/null +set -x + rm -rf devise.tmp + git clone http://github.com/BadMinus/devise.git devise.tmp + ( cd devise.tmp; gem build devise.gemspec) + gem install --install-dir "../$bundle_name/bundle/ruby/1.8" \ + --no-rdoc --no-ri \ + --ignore-dependencies \ + devise.tmp/devise-1.1.rc1.gem && + rm -rf devise.tmp + + bundle install --deployment \ + --path="../$bundle_name/bundle" \ + --without=test rdoc + + cp AUTHORS Gemfile GNU-AGPL-3.0 COPYRIGHT "../$bundle_name" + popd + tar czf $bundle_name.tar.gz $bundle_name + } +} + +function make_links() +# Usage: make_links [source commit] +{ + dest=$(rpm --eval %_sourcedir) + test -z "$dest" && { + echo "Can't find RPM source directory, giving up." + exit 2 + } + + src_commit="$1" + test -z "$src_commit" && { + src_commit=$(checkout) + } + src="dist/diaspora-$VERSION-$src_commit.tar.gz" + ln -sf $PWD/$src $dest + + bundle_commit=$(git_id dist/diaspora/Gemfile) + bundle="dist/diaspora-bundle-$VERSION-$bundle_commit.tar.gz" + ln -sf $PWD/$bundle $dest + cd $dest + find . -type l -not -readable -exec rm {} \; +} + + + + + + +function usage() +{ + cat <<- EOF + + Usage: make_dist [-c commit] + + -c Use a given commit, defaults to last checked in. + dist Build a diaspora application tarball. + bundle Build a bundler(1) bundle for diaspora. + links Symlink bundle and source tarballs to rpm sourde dir. + + All results are stored in dist/ + EOF +} +test "$1" = "-h" -o $# = 0 && { + usage; + exit 0 +} + +test "$1" = "-c" && { + test-z "$2" && { + usage; + exit 1 + } + commit="$2" + shift; shift +} + + + case $1 in + + "bundle") make_bundle $commit + ;; + 'source') make_dist $commit + ;; + + 'links') make_links $commit + ;; + + "fix_gemfile") + fix_gemfile + ;; + + *) usage + exit 1 + ;; + esac + + +