#!/usr/bin/perl # # genpatch - A utility that generates patches for submission to # wine-patches@winehq.com # # By Steven Elliott # # This program is subject to the same license as Wine (www.winehq.com). use Getopt::Std; use File::Basename; use POSIX qw(strftime); use strict; my $gen_date; # date the patch was generated my %options; # command line options my @new_files; # new files as an array my $new_file; # new file being considered my $patches_dir; # location of the patch file # Default the patch name to the UTC time. Use a more descriptive date for the # patch generation date. $options{n} = strftime "%Y%m%d%H%M", gmtime; $gen_date = strftime "%Y/%m/%d %H:%M:%S UTC", gmtime; unless(getopts("n:c:f:a:", \%options)) { print STDERR "Usage: $0 [-n patch_name] [-c change_log] [-f patch_file] " . "[-a new_files]\n"; exit 1; } $options{f} = "patches/$options{n}.diff" unless(exists $options{f}); $patches_dir = dirname $options{f}; @new_files = split ' ', $options{a}; if(-d $patches_dir) { if(-e $options{f}) { print STDERR "$options{f} already exists. Aborting.\n"; exit 1; } } else { mkdir $patches_dir, (0777 & ~umask) or die "Unable to mkdir $patches_dir: $!"; } print "Generating $options{f}.\n"; open OPT_F, ">$options{f}" or die "Unable to open $options{f} for write: $!"; print OPT_F <; close DIFF_IN; } print "Invoking cvs diff.\n"; open CVS_IN, "cvs diff -u|" or die "Unable to invoke cvs: $!"; print OPT_F ; close CVS_IN;