Bug 11395: Add a batch record modification
[koha.git] / debian / build-git-snapshot
bloba2a0e9f86f09d60773b6a80b919817f6f07ecfea
1 #!/usr/bin/perl
3 # Copyright 2010 Catalyst IT Ltd.
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
10 # version.
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 # Written by Robin Sheat <robin@catalyst.net.nz> and
21 # Srdjan Jankovic <srdjan@catalyst.net.nz>
22 # Based on an sh version by Lars Wirzenius.
24 use strict;
25 use warnings;
27 use Getopt::Long;
28 use POSIX qw/strftime/;
30 my $buildresult;
31 my $distribution='squeeze-dev';
32 my $git_checks='all';
33 my $version='3.19~git';
34 my $auto_version=1;
35 my $need_help;
36 my $debug;
38 GetOptions(
39 'buildresult|r=s' => \$buildresult,
40 'distribution|D=s' => \$distribution,
41 'git-checks|g=s' => \$git_checks,
42 'version|v=s' => \$version,
43 'autoversion!' => \$auto_version,
44 'help|h' => \$need_help,
45 'debug|d' => \$debug,
48 help_and_exit() if $need_help;
51 sub sys_command_output {
52 my ($command) = @_;
54 print "$command\n" if $debug;
55 my $command_output;
56 open($command_output, "-|", "$command ")
57 or die qq{Cannot execute "$command": $!"};
58 return map { chomp; $_ } <$command_output>;
61 sub sys_command_output_screen {
62 my ($command) = @_;
64 print "$command\n" if $debug;
65 system($command);
68 sub everything_is_committed {
69 my $filter;
70 for ($git_checks) {
71 $_ eq "none"
72 and return 1;
74 $_ eq "modified"
75 and $filter = "no",
76 last;
78 $_ eq "all"
79 and $filter = "normal",
80 last;
82 help_and_exit("$0: --git-checks/-g must be one of 'all', 'modified', or 'none'");
84 my $has_changes = grep /^xxx/, sys_command_output("git status --porcelain -u${filter}");
86 return !$has_changes;
89 sub help_and_exit {
90 my $msg = shift;
91 if ($msg) {
92 print "$msg\n\n";
94 print <<EOH;
95 This builds Koha deb packages, from a git snapshot. It's not suitable for
96 making upstreamable verions, but handy for your own local packages.
98 Options:
99 --buildresult, -r
100 the location that the resulting .deb, .changes, etc. will be placed in.
101 Default is whatever pdebuild uses.
102 --distribution, -D
103 the distribution value to set in the changelog when editing it. Default
104 is 'squeeze-dev'.
105 --git-checks, -g
106 what level of git checks are run to determine if the working copy is
107 clean enough. One of 'all' (any changes are bad), 'modified' (only
108 tracked files with untracked changes will cause an error), and 'none'
109 (checking git status is skipped totally.) Default is 'all'.
110 --version, -v
111 the version string for the resulting package. Default is '$version'.
112 --(no)autoversion
113 whether or not to use the date and git commit ID in the version value.
114 Default is to include it.
115 --debug, -d
117 exit;
120 sub latest_sha1 {
121 return sys_command_output("git rev-parse --short=8 HEAD");
124 sub adjust_debian_changelog {
125 my ($newversion) = @_;
127 sys_command_output( qq{dch --force-distribution -D "$distribution" -v "$newversion" "Building git snapshot."} );
128 sys_command_output( qq{dch -r "Building git snapshot."} );
131 sub reset_debian_changelog {
132 sys_command_output( qq{git checkout -- debian/changelog} );
135 sub build_package {
136 my ($newversion) = @_;
137 sys_command_output( qq{git archive --format=tar --prefix="koha-$newversion/" HEAD | gzip -9 > "../koha_$newversion.tar.gz"} );
139 my $pdebuildopts = $buildresult ? "--buildresult $buildresult" : "";
140 sys_command_output_screen( "pdebuild $pdebuildopts" );
143 everything_is_committed() or die "cannot build: uncommited changes";
145 my $newversion = $auto_version
146 ? sprintf ('%s%s.%s', $version, strftime("+%Y%m%d%H%M%S", localtime), latest_sha1())
147 : $version;
149 adjust_debian_changelog( $newversion );
150 build_package( $newversion );
151 reset_debian_changelog();