From d3041a617a0d349b07e4a889738d5d2d2fe3385c Mon Sep 17 00:00:00 2001 From: fuzzyray Date: Fri, 24 Apr 2009 16:37:09 +0000 Subject: Fix ekeyword to handle multiline KEYWORDS svn path=/; revision=549 --- trunk/ChangeLog | 3 ++ trunk/src/ekeyword/ChangeLog | 3 ++ trunk/src/ekeyword/ekeyword | 100 +++++++++++++++++++++++-------------------- 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 + * ekeyword: Fix to handle multiline KEYWORDS (Bug #267250) + 2009-01-08: Paul Varner * 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 + * Handle multiline KEYWORDS + 07 Jan 2009 Mike Frysinger * 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 () { - /^\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 = ; + $_ = 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) { -- cgit v1.2.3-18-g5258