gnucash/make-gnucash-patch.in
Dave Peticolas a74241ef87 James LewisMoss's patch adding a new-user gui.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@3443 57a11ea4-9604-0410-9ed3-97b8803252fd
2001-01-11 22:32:22 +00:00

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
*~
.#*