tools/sunw-history-package
changeset 62 519e6e3788ce
child 5682 94c0ca64c022
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/sunw-history-package	Mon Jan 24 13:48:56 2011 -0800
@@ -0,0 +1,108 @@
+#!/usr/perl5/bin/perl
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+# sunw-history-package
+#  A simple program to generate the actions contained in the SUNW package
+#  that maps between the old (pre build-133) and new ips package names.
+#
+
+$|=1;
+
+use Getopt::Long;
+use File::Basename /qw basename/;
+
+my $PKG = '/usr/bin/pkg';
+
+sub generate_manifest {
+	local ($package_name) = @_;
+	my ($package, %depends) = ();
+
+	# gather some data
+	open($FP, "$PKG contents -r -H -o action.raw $package_name |");
+
+	while (<$FP>) {	# save what we want
+		if (m{set\s+name=pkg.fmri\s+value=pkg://.+/(.+):.+$}) {
+			$package = $1;
+		} elsif (m{depend fmri=(.+)\s+type=require$}) {
+			$depends{$1} = 1;
+		}
+	}
+
+	close($FP);
+
+	# generate the manifest actions
+	print <<EOF;
+set name=pkg.fmri value=pkg:/$package
+set name=pkg.renamed value=true
+
+set name=org.opensolaris.consolidation value=\$(CONSOLIDATION)
+
+set name=variant.opensolaris.zone value=global value=nonglobal
+set name=variant.arch value=\$(ARCH)
+
+EOF
+	foreach (sort keys %depends) {
+		(m{^consolidation/}) ||
+			print "depend fmri=$_ type=require\n"
+	}
+}
+
+sub usage {
+	my $program = basename($0);
+	print <<EOF;
+Usage: $program (--package (new-ips-name)) ...
+
+EOF
+	exit(1);
+}
+
+sub main {
+	my (@current_packages, %SUNWpackages) = ();
+
+	GetOptions('package:s' => \@current_packages);
+
+	($#current_packages == -1) && usage();
+
+	# find all SUNW packages that require the supplied packages
+	foreach (@current_packages) {
+		open($FP, "$PKG search -r -H -o pkg.name 'SUNW*:depend::*/$_' |");
+	
+		while (<$FP>) {
+			chomp;
+			$SUNWpackages{$_} = 1;
+		}
+	
+		close($FP);
+	}
+
+	# generate manifests for each SUNWpackage
+	foreach (sort keys %SUNWpackages) {
+		print "\n\n$_.p5m actions:\n";
+		generate_manifest($_);
+	}
+}
+
+#
+# Main execution starts here.
+#
+main();