View | Details | Raw Unified | Return to bug 7553
Collapse All | Expand All

(-)a/misc/devel/testbugzillapatches.pl (+133 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Copyright BibLibre, 2012
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
21
=head1 SYNOPSIS
22
23
./testbugzillapatches.pl --u yourlogin --p your password
24
./testbugzillapatches.pl --help for detailled help
25
26
27
=head1 DESCRIPTION
28
29
This script will query Koha bugzilla (http://bugs.koha-community.org/bugzilla3/) for all bugs waiting for patch signoff
30
and will test that the patches still apply fine.
31
32
if a patch apply, nothing is made
33
34
if a patch does not apply, the bug status is set to "Does not apply", with a message saying
35
"misc/devel/testbugzillapatches.pl has detected that the patch(es) does not apply anymore
36
37
=head1 PARAMETERS
38
39
\t-u your bugzilla username
40
\t-p your bugzilla password
41
\t-h or --help help
42
\t-d debug mode, will give you more details about what's done
43
\t-t test mode, won't submit any comment to bugzilla, will just report what's applying and what's not.
44
45
=head1 PRE-REQUISITE
46
47
This script must be run in a directory where your git koha is setup.
48
49
Git must be uptodate, the script don't try to pull anything from the git repo
50
51
=cut
52
53
#read parameters
54
# u = bugzilla username
55
# p = bugzilla password
56
use 5.10.0;
57
use strict;
58
use warnings;
59
use Getopt::Long;
60
use Pod::Usage;
61
62
my $login='';
63
my $password='';
64
my $help='';
65
my $DEBUG=0;
66
my $test=0;
67
my $doesnotapplylist='';
68
69
GetOptions( 'u'              => \$login,
70
            'p'              => \$password,
71
            'h|help'         => \$help,
72
            'd'              => \$DEBUG,
73
            't'              => \$test,
74
            );
75
76
if ($help or not $login) {
77
    pod2usage(-verbose => $help?2:1 );
78
    exit;
79
}
80
81
# first, retrieve all bugs that needs signoff
82
my @buglist = `bugz -u $login -p $password -b http://bugs.koha-community.org/bugzilla3/ search -s "Needs signoff"`;
83
# then parse all bugs and try to apply them
84
foreach my $bugtotest (@buglist) {
85
    $bugtotest =~ /(....)(.*)/;
86
    my $bugnumber = $1;
87
    if ($bugnumber =~ /\d{4}/) {
88
#    next unless $bugnumber eq '7261';
89
        # bug to test found, try to apply...
90
        # first checkout master, remove test branch and recreate it
91
        my $checkout = `git checkout master 2>/dev/null;git branch -D test >/dev/null 2>/dev/null;git checkout -b test 2>/dev/null`;
92
        my $gitbz;
93
        # now apply the patch
94
        $gitbz = `git bz apply $bugnumber <yyyy`;
95
        # test if things went well or no:
96
        if ($gitbz =~ /git am --skip/ or $gitbz =~ /BEGIN failed/ or $gitbz =~ /cannot convert from/ ) {
97
        # git am --skip is the most common string included if the patch fails
98
        # BEGIN failed happend when you have pre-applypatch git hook and the script don't compile
99
        # cannot convert from happend when you have a wrongly encoded patch
100
            # if things went wrong, rollback !
101
            my $cancel = `git am --abort`;
102
            # if something went wrong, checkout any file modified
103
            my $checkout = `git status -s`;
104
            foreach (split /\n/, $checkout) {
105
                my $file_to_checkout = $_;
106
                next if $file_to_checkout =~ /^\?\?/;
107
                $file_to_checkout =~ s/^ M //;
108
                `git checkout $file_to_checkout`;
109
            }
110
            if ($gitbz =~ /CONFLICT \(content\): Merge conflict in installer\/data\/mysql\/updatedatabase.pl/) {
111
                # just issue that there is a conflict in an updatedatabase.pl, don't change bug status
112
                say "bug $bugnumber has an updatedatabase and don't apply cleanly";
113
            } else {
114
                # the patch does not apply anymore
115
                $DEBUG and say "!!!!!!!!!!!!! Bug $bugnumber does not apply anymore";
116
                if ($test) {
117
                    say "!!!!!!!!!!! Bug $bugnumber does not apply anymore";
118
                } else {
119
                # bugz doesn't accept the status "Patch doesn't apply". Until it's fixed, just report the patch don't apply
120
    #                `bugz -u $login -p $password -b http://bugs.koha-community.org/bugzilla3/ modify -s "Patch doesn't apply" -c "The script misc/devel/testbugzillapatches.pl has detected that this patch does not apply anymore:\n $gitbz" $bugnumber`;
121
                    print "!!!!!!!!!!! Bug $bugnumber does not apply anymore\n";
122
                    $doesnotapplylist.=",$bugnumber";
123
                }
124
            }
125
        } else {
126
            $test and print "+++++++++++ Bug $bugnumber apply cleanly\n";
127
        }
128
    } else {
129
        $DEBUG and print "NOT A BUG: $bugtotest\n";
130
    }
131
}
132
say $doesnotapplylist;
133
(-)a/misc/devel/yyyy (-1 / +23 lines)
Line 0 Link Here
0
- 
1
y
2
y
3
y
4
y
5
y
6
y
7
y
8
y
9
y
10
y
11
y
12
y
13
y
14
y
15
y
16
y
17
y
18
y
19
y
20
y
21
y
22
y
23
y

Return to bug 7553