cross-plat-dev-utils/diff_upstream.pl
changeset 2 39c28ec933dd
child 6 787612182dd0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cross-plat-dev-utils/diff_upstream.pl	Mon May 10 19:54:49 2010 +0100
@@ -0,0 +1,100 @@
+#!/usr/bin/perl
+# Copyright (c) 2010 Symbian Foundation Ltd
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Mike Kinghan, mikek@symbian.org for Symbian Foundation Ltd - initial contribution.
+
+# Script to diff this package with the upstream revsion on which it is
+# baselined.
+
+use strict;
+use get_baseline;
+use perl_run;
+use set_epocroot;
+use get_hostplatform_dir;
+use File::Spec;
+use Cwd 'abs_path';
+use Getopt::Long;
+
+my $help =0;
+my $baseline_dir = '';
+my $diff_out = '';
+my @excludes = ('*.hg*','*cross-plat-dev-utils*','*baseline.txt','*README','*TODO','*NEWS','*.pyc','*~');
+
+sub usage(*);
+sub usage_error($);
+sub help();
+
+GetOptions("help=i" => \$help, "diff-file=s" => \$diff_out,
+	"baseline-dir=s" => \$baseline_dir) or usage_error("Usage error");
+
+if ($help) {
+	help();
+}
+if (!$baseline_dir) {
+	usage_error("Need -b, --baseline-dir");
+}
+print ">>> Testing for diff\n";
+my $diff_test = "diff --version";
+my $devnull = File::Spec->devnull();
+print ">>> Executing: $diff_test\n";
+my $rc = system($diff_test > $devnull);
+die "*** Error: can't execute the diff tool ***", if ($rc);
+$baseline_dir = abs_path($baseline_dir);
+perl_run("get_upstream.pl $baseline_dir") and die $!;
+set_epocroot();
+my $epocroot = $ENV{'EPOCROOT'};
+my $build_pkg_dir = File::Spec->catfile("$epocroot","build");
+$baseline_dir = File::Spec->catfile("$baseline_dir","build");
+my $host_platform_dir = get_hostplatform_dir();
+push(@excludes,"*$host_platform_dir*");
+foreach my $exclude (@excludes) {
+	$exclude = "-x '$exclude'";
+}
+my $diff_cmd;
+if (!$diff_out) {
+	my $baseline_rev = get_baseline();
+	$diff_out = File::Spec->catfile("$epocroot","build","cross-plat-dev-utils",
+		"patch-files","diffs","patch-$baseline_rev.patch");
+}
+open DIFF,">$diff_out" or die $!;
+print DIFF "## diff generated by diff_upstream.pl\n";
+close DIFF;
+$diff_cmd = "diff -u -r -b -B -E @excludes $baseline_dir $build_pkg_dir >> $diff_out";
+print ">>> Executing: $diff_cmd\n";
+exit system($diff_cmd) >> 8;
+
+sub usage(*)
+{
+	local *OUT = shift;
+	print OUT "This script diffs this package with upstream package at the " .
+		" baseline revision in ../baseline.txt\n" .
+		"Options:\n" .
+		"-h, --help:              Display this help and exit\n" .
+		"-d, --diff-file FILE:    The diffs will be written to FILE. " .
+			"Default ./patch-files/diffs/patch-N, where N is the baseline revision\n" .
+		"-b, --baseline-dir DIR:  The upstream baseline will be cloned into " .
+			"DIR if this does not seem to have been done already. Otherwise " .
+			"DIR/build will be udated to the baseline revision before diffing\n" .
+		"*** It is assumed that the command 'diff' will invoke the diff tool " .
+		"***\n";
+}
+
+sub usage_error($)
+{
+	my $diag = shift;
+	print STDERR "*** $diag ***\n";
+	usage(*STDERR);
+	exit 1;
+}
+
+sub help()
+{
+	usage(*STDOUT);
+	exit 0;
+}
+