From fe7eacfd627795368fd9dcf2b791dfced4f13f61 Mon Sep 17 00:00:00 2001 From: Robin Sheat Date: Fri, 9 Sep 2011 15:43:14 +1200 Subject: [PATCH] Bug 5602 - [3.4.x] Rewrite of package building script Note: this is pulling in the most recent version from master. Working with two different versions that have two different options was getting painful, and it doesn't touch anything outside of debian/ --- debian/README.build | 13 +++ debian/build-git-snapshot | 180 +++++++++++++++++++++++++++++++++------------ 2 files changed, 147 insertions(+), 46 deletions(-) create mode 100644 debian/README.build diff --git a/debian/README.build b/debian/README.build new file mode 100644 index 0000000..9d33726 --- /dev/null +++ b/debian/README.build @@ -0,0 +1,13 @@ +In order to build .deb packages, following debian packages need to be present +(installed): +devscripts +pbuilder +dh-make +fakeroot + +As root (or sudo) execute: +pbuilder create + +Executing build-git-snapshot without any arguments will leave package and the +rest in some pbuilder dir, eg. /var/cache/pbuilder/result It is highly +recommended that --buildresult option is used. diff --git a/debian/build-git-snapshot b/debian/build-git-snapshot index 3847024..91552ff 100755 --- a/debian/build-git-snapshot +++ b/debian/build-git-snapshot @@ -1,64 +1,152 @@ -#!/bin/sh +#!/usr/bin/perl + +# Copyright 2010 Catalyst IT Ltd. +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. # -# This script will build a .deb from a git snapshot of koha. -# Don't use it for building actual versions for uploading to Debian. +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. # -# To use: -# - commit any changes into git -# - run this script +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# Written by Robin Sheat and +# Srdjan Jankovic +# Based on an sh version by Lars Wirzenius. + +use strict; +use warnings; + +use Getopt::Long; +use POSIX qw/strftime/; -set -e +my $buildresult; +my $distribution='squeeze-dev'; +my $git_checks='all'; +my $version='3.5-1~git'; +my $auto_version=1; +my $need_help; +my $debug; -die() -{ - echo "$@" - exit 1 +GetOptions( + 'buildresult|r=s' => \$buildresult, + 'distribution|D=s' => \$distribution, + 'git-checks|g=s' => \$git_checks, + 'version|v=s' => \$version, + 'autoversion!' => \$auto_version, + 'help|h' => \$need_help, + 'debug|d' => \$debug, +); + +help_and_exit() if $need_help; + + +sub sys_command_output { + my ($command) = @_; + + print "$command\n" if $debug; + my $command_output; + open($command_output, "-|", "$command ") + or die qq{Cannot execute "$command": $!"}; + return map { chomp; $_ } <$command_output>; } -everything_is_commited() -{ - if git status --short | grep -q '^' - then - return 1 - else - return 0 - fi +sub sys_command_output_screen { + my ($command) = @_; + + print "$command\n" if $debug; + system($command); } -latest_sha1() { - git rev-parse --short=8 HEAD +sub everything_is_committed { + my $filter; + for ($git_checks) { + $_ eq "none" + and return 1; + + $_ eq "modified" + and $filter = "no", + last; + + $_ eq "all" + and $filter = "normal", + last; + + help_and_exit("$0: --git-checks/-g must be one of 'all', 'modified', or 'none'"); + } + my $has_changes = grep /^xxx/, sys_command_output("git status --porcelain -u${filter}"); + + return !$has_changes; } -newversion() { - printf '3.5-1~git%s.%s' $(date +%Y%m%d%H%M%S) $(latest_sha1) +sub help_and_exit { + my $msg = shift; + if ($msg) { + print "$msg\n\n"; + } + print < "../koha_$1.tar.gz" - pdebuild $2 +sub reset_debian_changelog { + sys_command_output( qq{git checkout -- debian/changelog} ); } -if ! everything_is_commited -then - die "cannot build: uncommited changes" -fi - -version="$(newversion)" -if [ -n "$1" ] -then - pdebuildopts="--buildresult $1" -fi -adjust_debian_changelog "$version" -build_package "$version" "$pdebuildopts" -reset_debian_changelog +sub build_package { + my ($newversion) = @_; + sys_command_output( qq{git archive --format=tar --prefix="koha-$newversion/" HEAD | gzip -9 > "../koha_$newversion.tar.gz"} ); + + my $pdebuildopts = $buildresult ? "--buildresult $buildresult" : ""; + sys_command_output_screen( "pdebuild $pdebuildopts" ); +} + +everything_is_committed() or die "cannot build: uncommited changes"; + +my $newversion = $auto_version + ? sprintf ('%s%s.%s', $version, strftime("+%Y%m%d%H%M%S", localtime), latest_sha1()) + : $version; + +adjust_debian_changelog( $newversion ); +build_package( $newversion ); +reset_debian_changelog(); + -- 1.7.4.1