aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfuzzyray <fuzzyray@gentoo.org>2009-04-24 16:37:09 +0000
committerfuzzyray <fuzzyray@gentoo.org>2009-04-24 16:37:09 +0000
commitd3041a617a0d349b07e4a889738d5d2d2fe3385c (patch)
tree263d66a058956e1a0f74796477022424b19e7b5d
parentInside summarylist(), it's possible for myglsa.packages.keys() to contain (diff)
downloadgentoolkit-d3041a617a0d349b07e4a889738d5d2d2fe3385c.tar.gz
gentoolkit-d3041a617a0d349b07e4a889738d5d2d2fe3385c.tar.bz2
gentoolkit-d3041a617a0d349b07e4a889738d5d2d2fe3385c.zip
Fix ekeyword to handle multiline KEYWORDS
svn path=/; revision=549
-rw-r--r--trunk/ChangeLog3
-rw-r--r--trunk/src/ekeyword/ChangeLog3
-rwxr-xr-xtrunk/src/ekeyword/ekeyword100
3 files changed, 60 insertions, 46 deletions
diff --git a/trunk/ChangeLog b/trunk/ChangeLog
index 42415d4..3007bc5 100644
--- a/trunk/ChangeLog
+++ b/trunk/ChangeLog
@@ -1,3 +1,6 @@
+2009-04-24: Paul Varner <fuzzyray@gentoo.org>
+ * ekeyword: Fix to handle multiline KEYWORDS (Bug #267250)
+
2009-01-08: Paul Varner <fuzzyray@gentoo.org>
* equery: Fix package.py to account for PORTDIR being a symbolic link
when checking if a package is in an overlay. (Bug #253968)
diff --git a/trunk/src/ekeyword/ChangeLog b/trunk/src/ekeyword/ChangeLog
index c3f142a..68d99e5 100644
--- a/trunk/src/ekeyword/ChangeLog
+++ b/trunk/src/ekeyword/ChangeLog
@@ -1,3 +1,6 @@
+24 Apr 2009 Paul Varner <fuzzyray@gentoo.org>
+ * Handle multiline KEYWORDS
+
07 Jan 2009 Mike Frysinger <vapier@gentoo.org>
* Support intended KEYWORDS
* Convert every instance of KEYWORDS in the file
diff --git a/trunk/src/ekeyword/ekeyword b/trunk/src/ekeyword/ekeyword
index 4f8bb05..dd6a573 100755
--- a/trunk/src/ekeyword/ekeyword
+++ b/trunk/src/ekeyword/ekeyword
@@ -41,66 +41,74 @@ for my $f (@ARGV) {
select O;
while (<I>) {
- /^\s*KEYWORDS=/ or print, next;
+ if (/^\s*KEYWORDS=/) {
- # extract the quoted section from KEYWORDS
- (my $quoted = $_) =~ s/^.*?["'](.*?)["'].*/$1/s;
-
- # replace -* with -STAR for our convenience below
- $quoted =~ s/-\*/-STAR/;
+ # extract the quoted section from KEYWORDS
+ while (not /^KEYWORDS=["'].*?["']/) {
+ chomp;
+ my $next = <I>;
+ $_ = join "", $_, $next;
+ }
+ (my $quoted = $_) =~ s/^.*?["'](.*?)["'].*/$1/s;
- for my $k (@kw) {
- my ($leader, $arch, $star) = ($k =~ /$kw_re/o);
+ # replace -* with -STAR for our convenience below
+ $quoted =~ s/-\*/-STAR/;
- # handle -* and ^*
- if (defined $star) {
- $leader = substr $star,0,1;
- $arch = 'STAR';
- }
+ for my $k (@kw) {
+ my ($leader, $arch, $star) = ($k =~ /$kw_re/o);
- # remove keywords
- if ($leader eq '^') {
- if ($arch eq 'all') {
- $quoted = '';
- } else {
- $quoted =~ s/[-~]?\Q$arch\E\b//;
+ # handle -* and ^*
+ if (defined $star) {
+ $leader = substr $star,0,1;
+ $arch = 'STAR';
}
- # add or modify keywords
- } else {
- if ($arch eq 'all') {
- # modify all non-masked keywords in the list
- $quoted =~ s/(^|\s)~?(?=\w)/$1$leader/g;
+ # remove keywords
+ if ($leader eq '^') {
+ if ($arch eq 'all') {
+ $quoted = '';
+ } else {
+ $quoted =~ s/[-~]?\Q$arch\E\b//;
+ }
+
+ # add or modify keywords
} else {
- # modify or add keyword
- unless ($quoted =~ s/[-~]?\Q$arch\E(\s|$)/$leader$arch$1/) {
- # modification failed, need to add
- if ($arch eq 'STAR') {
- $quoted = "$leader$arch $quoted";
- } else {
- $quoted .= " $leader$arch";
+ if ($arch eq 'all') {
+ # modify all non-masked keywords in the list
+ $quoted =~ s/(^|\s)~?(?=\w)/$1$leader/g;
+ } else {
+ # modify or add keyword
+ unless ($quoted =~ s/[-~]?\Q$arch\E(\s|$)/$leader$arch$1/) {
+ # modification failed, need to add
+ if ($arch eq 'STAR') {
+ $quoted = "$leader$arch $quoted";
+ } else {
+ $quoted .= " $leader$arch";
+ }
}
}
}
}
- }
- # replace -STAR with -*
- $quoted =~ s/-STAR\b/-*/;
+ # replace -STAR with -*
+ $quoted =~ s/-STAR\b/-*/;
- # sort keywords and fix spacing
- $quoted = join " ", sort {
- (my $sa = $a) =~ s/^\W//;
- (my $sb = $b) =~ s/^\W//;
- return -1 if $sa eq '*';
- return +1 if $sb eq '*';
- $sa cmp $sb;
- } split " ", $quoted;
+ # sort keywords and fix spacing
+ $quoted = join " ", sort {
+ (my $sa = $a) =~ s/^\W//;
+ (my $sb = $b) =~ s/^\W//;
+ return -1 if $sa eq '*';
+ return +1 if $sb eq '*';
+ $sa cmp $sb;
+ } split " ", $quoted;
- # re-insert quoted to KEYWORDS
- s/(["']).*?["']/$1$quoted$1/;
+ # re-insert quoted to KEYWORDS
+ s/(["']).*?["']/$1$quoted$1/;
- print $_ or die "Can't write $f.new: $!\n";
+ print $_ or die "Can't write $f.new: $!\n";
+ } else {
+ print, next;
+ }
}
close I;
@@ -109,7 +117,7 @@ for my $f (@ARGV) {
system "diff -U 0 $f $f.new | sed -n '/KEYWORDS=/s:^: :p'";
rename "$f.new", "$f" or die "Can't rename: $!\n";
- $files++;
+ $files++;
}
if ($files == 0) {