bug 5602: Rewriting the package making script Now it is a perl script. Various pdebui...
[koha.git] / debian / build-git-snapshot
1 #!/usr/bin/perl 
2
3 # Copyright 2010 Catalyst IT Ltd.
4 #
5 # This file is part of Koha.
6 #
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.
11 #
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.
15 #
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.
19
20 # Written by Robin Sheat <robin@catalyst.net.nz>
21 # Based on an sh version by Lars Wirzenius.
22
23 use strict;
24 use warnings;
25
26 use Getopt::Long;
27 use POSIX qw/strftime/;
28
29 my $buildresult;
30 my $distribution='squeeze-dev';
31 my $git_checks='all';
32 my $version='3.3-1~git';
33 my $auto_version=1;
34 my $need_help;
35 my $debug;
36
37 GetOptions(
38     'buildresult|r=s'   => \$buildresult,
39     'distribution|D=s'  => \$distribution,
40     'git-checks|g=s'    => \$git_checks,
41     'version|v=s'       => \$version,
42     'autoversion!'      => \$auto_version,
43     'help|h'            => \$need_help,
44     'debug|d'           => \$debug,
45 );
46
47 help_and_exit() if $need_help;
48
49
50 sub sys_command_output {
51     my ($command) = @_;
52
53     print "$command\n" if $debug;
54     open COMMAND, "$command |"
55       or die qq{Cannot execute "$command": $!"};
56     return map { chomp; $_ } <COMMAND>;
57 }
58
59 sub everything_is_committed {
60     my $filter;
61     for ($git_checks) {
62         $_ eq "none"
63           and return 1;
64
65         $_ eq "modified"
66           and $filter = "no",
67               last;
68
69         $_ eq "all"
70           and $filter = "normal",
71               last;
72
73             help_and_exit("$0: --git-checks/-g must be one of 'all', 'modified', or 'none'");
74     }
75     my $has_changes = grep /^xxx/, sys_command_output("git status --porcelain -u${filter}");
76
77     return !$has_changes;
78 }
79
80 sub help_and_exit {
81         my $msg = shift;
82         if ($msg) {
83         print "$msg\n\n";
84     }
85     print <<EOH;
86 This builds Koha deb packages, from a git snapshot. It's not suitable for
87 making upstreamable verions, but handy for your own local packages.
88
89 Options:
90     --buildresult, -r
91         the location that the resulting .deb, .changes, etc. will be placed in.
92         Default is whatever pdebuild uses.
93     --distribution, -D
94         the distribution value to set in the changelog when editing it. Default
95         is 'squeeze-dev'.
96     --git-checks, -g
97         what level of git checks are run to determine if the working copy is
98         clean enough. One of 'all' (any changes are bad), 'modified' (only
99         tracked files with untracked changes will cause an error), and 'none'
100         (checking git status is skipped totally.) Default is 'all'.
101     --version, -v
102         the version string for the resulting package. Default is '3.3-1~git'.
103     --(no)autoversion
104         whether or not to use the date and git commit ID in the version value.
105         Default is to include it.
106     --debug, -d
107 EOH
108     exit;
109 }
110
111 sub latest_sha1 {
112     return sys_command_output("git rev-parse --short=8 HEAD");
113 }
114
115 sub adjust_debian_changelog {
116     my ($newversion) = @_;
117
118     sys_command_output( qq{dch --force-distribution -D "$distribution" -v "$newversion" "Building git snapshot."} );
119     sys_command_output( qq{dch -r "Building git snapshot."} );
120 }
121
122 sub reset_debian_changelog {
123     sys_command_output( qq{git checkout -- debian/changelog} );
124 }
125
126 sub build_package {
127     my ($newversion) = @_;
128     sys_command_output( qq{git archive --format=tar --prefix="koha-$newversion/" HEAD | gzip -9 > "../koha_$newversion.tar.gz"} );
129
130     my $pdebuildopts = $buildresult ? "--buildresult $buildresult" : "";
131     sys_command_output( "pdebuild $pdebuildopts" );
132 }
133
134 everything_is_committed() or die "cannot build: uncommited changes";
135
136 my $newversion = $auto_version
137   ? sprintf ('%s%s.%s', $version, strftime("+%Y%m%d%H%M%S", localtime), latest_sha1())
138   : $version;
139
140 adjust_debian_changelog( $newversion );
141 build_package( $newversion );
142 reset_debian_changelog();
143