run archive test on update
[BackupPC.git] / makePatch
1 #!/bin/perl
2 #
3 # Script that generates a patch file for BackupPC.
4 #
5
6 use strict;
7
8 use File::Find;
9 use File::Path;
10
11 my $BaseVersion  = "3.2.0";
12 my $PatchLevel   = "pl0";
13 my $PatchVersion = "$BaseVersion$PatchLevel";
14
15 my $Base         = "/home/craig/admin/packages/BackupPC-$BaseVersion";
16 my $TmpDir       = "patch.tmp";
17 my $OutFile      = "BackupPC-$PatchVersion.diff";
18
19 find({wanted => \&CopyFile, no_chdir => 1}, $Base);
20
21 unlink($OutFile);
22
23 open(OUT, ">", $OutFile) || die("can't open OutFile\n");
24
25 my $now = localtime;
26
27 print OUT <<EOF;
28 #
29 # $OutFile: BackupPC patch file generated
30 # on $now.
31 #
32 # This patch file should be applied to a cleanly unpacked BackupPC
33 # version $BaseVersion.  Do not apply any old patch files; each
34 # patch file accumulates all previous changes.
35 #
36 # Example:
37 #
38 #     # fetch BackupPC-$BaseVersion.tar.gz
39 #     # fetch $OutFile
40 #     tar zxvf BackupPC-$BaseVersion.tar.gz
41 #     cd BackupPC-$BaseVersion
42 #     patch -p0 < ../$OutFile
43 #     perl configure.pl
44 #
45 # ChangeLog:
46 #
47 #  ADD CHANGELOG HERE
48 #
49 EOF
50
51 foreach my $dir ( qw(bin lib cgi-bin) ) {
52     open(DIFF, "diff -ur -I '^# Version .*, released ' $Base/$dir $TmpDir/$dir|")
53             || die("can't run diff\n");
54     while ( <DIFF> ) {
55         next if ( /^Only/ || /^diff / );
56         s/^--- \Q$Base\//--- /;
57         s/^\+\+\+ \Q$TmpDir\//+++ /;
58         print OUT;
59     }
60 }
61 rmtree($TmpDir, 0);
62
63 sub CopyFile
64 {
65     (my $file = $File::Find::name) =~ s{\Q$Base}{};
66     (my $dir = $file) =~ s{(.*)/.*}{$1};
67     $file =~ s{^/}{};
68
69     #print("Got dir = $TmpDir/$dir, file = $file\n");
70     return if ( !-f $file );
71     mkpath("$TmpDir/$dir", 0, 0755) if ( !-d "$TmpDir/$dir" );
72     open(IN, "<", $file)
73                     || die("Can't open $file for input\n");
74     open(OUT, ">", "$TmpDir/$file")
75                     || die("Can't open $TmpDir/$file for output\n");
76     while ( <IN> ) {
77         if ( /^use lib ".*BackupPC[\d.]*\/lib";/
78                 || /^use lib "\/home\/pcbackup\/install\/lib";/ ) {
79             print OUT "use lib \"__INSTALLDIR__/lib\";\n";
80         } elsif ( $file =~ /Lib.pm/ && /(.*TopDir *=> .*)'.*',/ ) {
81             print OUT "$1'__TOPDIR__',\n";
82         } elsif ( $file =~ /Lib.pm/ && /(.*BinDir *=> .*)'.*',/ ) {
83             print OUT "$1'__INSTALLDIR__',\n";
84         } elsif ( $file =~ /Lib.pm/ && /(.*LibDir *=> .*)'.*',/ ) {
85             print OUT "$1'__INSTALLDIR__',\n";
86         } elsif ( $file =~ /Lib.pm/ && /(.*Version *=> .*)'.*',/ ) {
87             print OUT "$1'$PatchVersion',\n";
88         } elsif ( $file =~ /BackupPC_Admin/ && /(my *\$installDir *= *)'.*'/
89 ) {
90             print OUT "$1'__INSTALLDIR__/lib';\n";
91         } else {
92             print(OUT);
93         }
94     }
95     close(IN);
96     close(OUT);
97 }