summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormudler <mudler@sabayon.org>2016-10-13 17:56:41 +0200
committermudler <mudler@sabayon.org>2016-10-13 17:57:04 +0200
commitadb7a5cf8ebd6d3f102bbd46315373288edee0fc (patch)
treeaebd99008ecbd11b00000678427a6fa00c6ceb86 /scripts
parentx11-themes/mate-themes-meta: Fix typo, thanks to thican (diff)
downloadgentoo-mate-adb7a5cf8ebd6d3f102bbd46315373288edee0fc.tar.gz
gentoo-mate-adb7a5cf8ebd6d3f102bbd46315373288edee0fc.tar.bz2
gentoo-mate-adb7a5cf8ebd6d3f102bbd46315373288edee0fc.zip
scripts: Adding keyword-helper script to help out in KEYWORDS manipulations
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/keyword-helper122
1 files changed, 122 insertions, 0 deletions
diff --git a/scripts/keyword-helper b/scripts/keyword-helper
new file mode 100755
index 0000000..d5768a1
--- /dev/null
+++ b/scripts/keyword-helper
@@ -0,0 +1,122 @@
+#!/usr/bin/perl
+# keyword-helper - utility to ekeyword packages
+# Usage: from the root of the overlay
+# keyword-helper app-foo/bar-1.2 app-foo/baz-1.2
+# <mudler@sabayon.org>
+
+use Cwd;
+
+my $TARGET_KEYWORD = $ENV{TARGET_KEYWORD} // "amd64 x86"
+ ; # KEYWORD changes, arguments are given directly to ekeyword
+my $BUGZ =
+ $ENV{BUGZ}; # Bug reference. Mandatory if no COMMIT_MSG is specified
+my $COMMIT_MSG = $ENV{COMMIT_MSG}; # Git commit message
+
+my @KEYWORD_PACKAGES = @ARGV; # Packages that we want to manipulate
+my $CWD = getcwd;
+
+sub strip_pvr { s/-[0-9]{1,}.*$//; }
+
+sub package_has_pvr { /-[0-9]{1,}.*$/; }
+
+# print helpers
+
+sub say { print join( "\n", @_ ) . "\n"; }
+
+sub err { say "\e[31m ", @_, " \e[0m"; }
+
+sub fatal { err @_; exit 1; }
+
+sub ok { say "\e[1;34m ", @_, " \e[0m"; }
+
+sub info { say "\e[1;37m ", @_, " \e[0m"; }
+
+# deadly checks
+
+if ( !@ARGV or $ARGV[0] eq "-h" or $ARGV[0] eq "--help" ) {
+ say "You must feed me with at least a package version", "",
+ "e.g. $0 package", "",
+ "ENV variables options:", "",
+ " COMMIT_MSG \t\t default commit message",
+ " BUGZ \t\t Gentoo Bugzilla id, e.g. 596998",
+ " TARGET_KEYWORD \t the keyword(s) to set separated by a space. e.g. TARGET_KEYWORD='amd64 x86'";
+ exit 1;
+}
+
+if ( -e "${CWD}/Manifest" ) {
+ fatal "You are running me from the wrong folder, don't you?",
+ "I need to be executed from the root of the overlay!";
+}
+
+fatal "You should supply a bug id with the BUGZ environment variable or",
+ "a custom commit message with COMMIT_MSG at least"
+ if ( !$BUGZ and !$COMMIT_MSG );
+
+# Split TARGET_KEYWORD by space and put into an array
+my @ARCHES = split( /\s/, $TARGET_KEYWORD );
+
+# Cycle packages that need to be manipulated
+# Here it's being used $_, that contains strings in the following format: category/package, contains package version and revision too
+for (@KEYWORD_PACKAGES) {
+ fatal
+ "You must feed me with package versions, not atoms or whatever!",
+ "bailing out since you are using me in the WRONG way, fix yourself first"
+ unless package_has_pvr;
+ my $local_package =
+ (/\/(.*)$/)[0]
+ . ".ebuild"
+ ; # Extract the package name and version, included of revision if any
+ info "Keywording $TARGET_KEYWORD on $_ [$local_package]";
+ strip_pvr(); # stripping PVR
+
+ if ( -d $_ ) {
+ chdir($_); # entering in the directory
+ }
+ else {
+ fatal "$_ directory doesn't exists";
+ }
+
+ # Checking if ebuild we want to keyword is there
+ if ( -e $local_package ) {
+
+ # Do magic with the ebuild, since it exists
+ foreach my $arch (@ARCHES) {
+ my $LOCAL_COMMIT_MSG = $COMMIT_MSG;
+
+ # if no COMMIT_MSG is supplied, we generate it
+ if ( !$COMMIT_MSG ) {
+ my ( $keyword_symbol, $clean_arch ) =
+ ( $arch =~ /^(\^|\~|)(.*)$/ )
+ ; # Getting the first character of a arch, it can be ~, ^ or "" to use it with ekeyword
+ my $prefix_msg;
+ if ( $keyword_symbol eq '^' ) {
+ $prefix_msg = "Drop $clean_arch keyword ";
+ }
+ elsif ( $keyword_symbol eq '~' ) {
+ $prefix_msg = "Added $arch keyword ";
+ }
+ elsif ( $keyword_symbol eq "" ) {
+ $prefix_msg = "Stable on $clean_arch keyword ";
+ }
+ $LOCAL_COMMIT_MSG = $prefix_msg . "wrt \#${BUGZ}";
+ }
+
+ system("ekeyword $arch $local_package");
+ system("git add $local_package");
+ system("repoman commit -m '$_: $LOCAL_COMMIT_MSG'");
+ if ( $? >> 8 != 0 ) {
+ fatal
+ "Meh. we got errors. before going on, i want you to fix those by hand.";
+ }
+ else {
+ ok "Done for $_ [$local_package]";
+ }
+ }
+
+ }
+ else {
+ # errors, the ebuild cannot be found
+ fatal "/!\\ $local_package not found in $_ keywording failed!";
+ }
+ chdir($CWD);
+}