mirror of
https://github.com/Gnucash/gnucash.git
synced 2024-11-29 04:04:07 -06:00
a74241ef87
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@3443 57a11ea4-9604-0410-9ed3-97b8803252fd
171 lines
3.7 KiB
Perl
171 lines
3.7 KiB
Perl
#!@-PERL-@ -w
|
|
# -*- perl -*-
|
|
#
|
|
# This perl script is used to make a patch for your GnuCash
|
|
# development work. All patches should be submitted to the
|
|
# mailing list gnucash-patches@gnucash.org. For more info
|
|
# consult the README.
|
|
#
|
|
# This script requires the programs 'makepatch', 'gzip',
|
|
# 'diff', and 'uuencode'.
|
|
#
|
|
# Author: Dave Peticolas <dave@krondo.com>
|
|
|
|
use strict;
|
|
|
|
use File::Basename;
|
|
|
|
$::ask_description = 1;
|
|
$::should_uuencode = 1;
|
|
|
|
my $rcfile = $ENV{"HOME"} . "/.gnucash-patch.rc";
|
|
|
|
if (-f $rcfile) {
|
|
require $rcfile;
|
|
}
|
|
|
|
###########################################################
|
|
# This section must be configured for your own setup. #
|
|
###########################################################
|
|
|
|
# The directory with the original gnucash sources
|
|
my $old = undef;
|
|
|
|
chomp(my $cwd = `pwd`);
|
|
|
|
my ($new, $gnc_home) = fileparse($cwd);
|
|
|
|
###########################################################
|
|
# This section should not need to be modified. #
|
|
###########################################################
|
|
|
|
# Allow the user to override the defaults with evnt vars.
|
|
|
|
if($ENV{'GNC_MAKEPATCH_OLD_DIR'}) {
|
|
$old = $ENV{'GNC_MAKEPATCH_OLD_DIR'};
|
|
}
|
|
|
|
if($ENV{'GNC_MAKEPATCH_NEW_DIR'}) {
|
|
$new = $ENV{'GNC_MAKEPATCH_NEW_DIR'};
|
|
}
|
|
|
|
if($ENV{'GNC_MAKEPATCH_HOME_DIR'}) {
|
|
$gnc_home = $ENV{'GNC_MAKEPATCH_HOME_DIR'};
|
|
}
|
|
|
|
|
|
# Switch to the home directory
|
|
print "Changing directory to $gnc_home\n";
|
|
chdir $gnc_home or die "Can't cd!\n";
|
|
|
|
if (not defined($old)) {
|
|
if (not -f "$new/CVS/Root") {
|
|
print "Source not checked out of CVS and no \$old set. Quitting...\n";
|
|
exit(1);
|
|
}
|
|
if (not -d "tmp") {
|
|
mkdir "tmp", 0755;
|
|
}
|
|
chdir "tmp";
|
|
system("cvs -d `cat ../$new/CVS/Root` co gnucash");
|
|
chdir "..";
|
|
$old = "tmp/gnucash";
|
|
}
|
|
|
|
chdir $gnc_home . "/" . $new or die "Can't cd!\n";
|
|
# Start out with our basic makepatch arguments
|
|
my @args = ('-verbose', '-diff', 'diff -u', '-exclude-vc');
|
|
|
|
if (not $::ask_description) {
|
|
push(@args, '-description', '');
|
|
}
|
|
# Add in the exclude patterns from the __DATA__ section
|
|
push_exclusions(\@args);
|
|
|
|
sub push_exclusions {
|
|
my $args = shift;
|
|
foreach my $pat (<DATA>) {
|
|
chomp($pat);
|
|
push(@{$args}, '-exclude', $pat) if $pat;
|
|
}
|
|
my @cvsignores = `find . -name '.cvsignore'`;
|
|
foreach my $one_ignore (@cvsignores) {
|
|
my ($name, $path) = fileparse($one_ignore);
|
|
open (IG, $one_ignore);
|
|
foreach my $fl (<IG>) {
|
|
chomp $fl;
|
|
$path =~ s/^\.\///;
|
|
push(@{$args}, '-exclude', $path . $fl) if $fl;
|
|
}
|
|
close (IG);
|
|
}
|
|
}
|
|
# Add the from and to directories for makepatch
|
|
push(@args, $old, $new);
|
|
print "Arguments are: " . join("; ", @args) . "\n";
|
|
|
|
chdir $gnc_home or die "Can't cd!\n";
|
|
|
|
# Erase the old files
|
|
#unlink('gnc.diff', 'gnucash.diff.gz', 'gnucash.diff.gz.uue');
|
|
|
|
if (not -d "diffs") {
|
|
mkdir "diffs", 0755;
|
|
}
|
|
|
|
my $date = `date '+%s'`;
|
|
chomp($date);
|
|
my $who = `whoami`;
|
|
chomp($who);
|
|
|
|
my $outfilename = "gnucash-$date-$who.diff";
|
|
|
|
# Invoke makepatch with standard out redirected to 'gnucash.diff'
|
|
open(OLDOUT, ">&STDOUT");
|
|
open(STDOUT, "> diffs/$outfilename") || die "Can't redirect stdout";
|
|
system('makepatch', @args);
|
|
close(STDOUT);
|
|
open(STDOUT, ">&OLDOUT");
|
|
print "makepatch done\n";
|
|
|
|
# Compress the patch
|
|
if (-f "diffs/$outfilename") {
|
|
system("gzip", "-9vf", "diffs/$outfilename");
|
|
}
|
|
|
|
# UU encode the compressed patch
|
|
# 'gnucash.diff.gz.uue' is the file you send.
|
|
if (-f "diffs/$outfilename.gz" and $::should_uuencode) {
|
|
system("uuencode diffs/$outfilename.gz $outfilename.gz > diffs/$outfilename.gz.uue");
|
|
print "diffs/$outfilename.gz.uue\n";
|
|
}
|
|
else {
|
|
print "diffs/$outfilename.gz\n";
|
|
}
|
|
|
|
|
|
exit(0);
|
|
|
|
__DATA__
|
|
|
|
#*#
|
|
*.a
|
|
*.bak
|
|
*.bin
|
|
*.diff
|
|
*.diffs
|
|
*.gmo
|
|
*.lo
|
|
*.log
|
|
*.mo
|
|
*.moc
|
|
*.o
|
|
*.orig
|
|
*.patch
|
|
*.rej
|
|
*.tar.gz
|
|
*.wrap
|
|
*.xac.*.xac
|
|
*~
|
|
.#*
|