Re: [lintian] 01/02: Use Lintian::Data for section/name mapping
Le 26 août 2017 08:59:00 GMT+02:00, Niels Thykiera écrit : >Bastien Roucariès: >> This is an automated email from the git hooks/post-receive script. >> >> rouca pushed a commit to branch master >> in repository lintian. >> >> commit f71f3901fcc23db666d3de176526e91fd4f228a2 >> Author: Bastien ROUCARIÈS >> Date: Fri Aug 25 22:22:39 2017 +0200 >> >> Use Lintian::Data for section/name mapping > > >Hi, > >This change causes a regression that need to be fixed (or the commit >reverted) will fix: what do you prefer : fix regex or fix lintian data to keep ordoring ? >The problem being that @NAME_SECTION_MAPPINGS is an /ordered/ list with >a "first match and we are done"-rule. When migrated to L::Data, this >order is lost because L::Data does not have an order guarantee. > >Therefore, when multiple rules match (see [1] for an example), the >previous code would give a well-defined result (first rule listed) >whereas the new code gives a non-deterministic result. > >Thanks, >~Niels > >[1] > >libfoo-ocaml-dev matches the following two rules > >[qr/^lib.*-(?:ocaml|camlp4)-dev$/ => 'ocaml'], >[qr/^lib.*-dev$/ => 'libdevel'], > >> --- >> checks/fields.pm | 34 >+- >> data/fields/name_section_mappings | 16 >> debian/changelog | 1 + >> 3 files changed, 30 insertions(+), 21 deletions(-) >> >> diff --git a/checks/fields.pm b/checks/fields.pm >> index cb91491..4ad96ad 100644 >> --- a/checks/fields.pm >> +++ b/checks/fields.pm >> @@ -96,23 +96,14 @@ our @known_java_pkg = map { qr/$_/ } ( >> ); >> >> # Mapping of package names to section names >> -my @NAME_SECTION_MAPPINGS = ( >> -[qr/-docs?$/ => 'doc'], >> -[qr/-dbg(?:sym)?$/=> 'debug'], >> -[qr/^(?:python-)?zope/=> 'zope'], >> -[qr/^python3?-/ => 'python'], >> -[qr/^r-(?:cran|bioc|other)-/ => 'gnu-r'], >> -[qr/^lib.*-perl$/ => 'perl'], >> -[qr/^lib.*-cil(?:-dev)?$/ => 'cli-mono'], >> -[qr/^lib.*-(?:java|gcj)$/ => 'java'], >> -[qr/^(?:lib)php-/ => 'php'], >> -[qr/^lib(?:hugs|ghc6?)-/ => 'haskell'], >> -[qr/^lib.*-ruby(?:1\.\d)?$/ => 'ruby'], >> -[qr/^lib.*-(?:ocaml|camlp4)-dev$/ => 'ocaml'], >> -[qr/^lib.*-dev$/ => 'libdevel'], >> -[qr/^gir\d+\.\d+-.*-\d+\.\d+$/=> 'introspection'], >> -[qr/^libjs-/ => 'javascript'], >> -); >> +my $NAME_SECTION_MAPPINGS = Lintian::Data->new( >> +'fields/name_section_mappings', >> +qr/\s*=>\s*/, >> +sub { >> +my $regex = qr/$_[0]/x; >> +$_[0] = $_[1]; >> +return $regex; >> +}); >> >> my %VCS_EXTRACT = ( >> browser => sub { return @_;}, >> @@ -547,14 +538,15 @@ sub run { >> # Check package name <-> section. oldlibs is a special >case; let >> # anything go there. >> if ($parts[-1] ne 'oldlibs') { >> -foreach my $map (@NAME_SECTION_MAPPINGS) { >> -next unless ($pkg =~ $map->[0]); >> +foreach my $section ($NAME_SECTION_MAPPINGS->all()) >{ >> +my $regex = >$NAME_SECTION_MAPPINGS->value($section); >> +next unless ($pkg =~ m{$regex}); >> >> my $area = ''; >> $area = "$parts[0]/" if (scalar @parts == 2); >> tag 'wrong-section-according-to-package-name', >> - "$pkg => ${area}$map->[1]" >> - unless $parts[-1] eq $map->[1]; >> + "$pkg => ${area}$section" >> + unless $parts[-1] eq $section; >> last; >> } >> } >> diff --git a/data/fields/name_section_mappings >b/data/fields/name_section_mappings >> new file mode 100644 >> index 000..ca9c1de >> --- /dev/null >> +++ b/data/fields/name_section_mappings >> @@ -0,0 +1,16 @@ >> +# map between regex (x) of package => section >> +-docs?$ => doc >> +-dbg(?:sym)?$=> debug >> +^(?:python-)?zope=> zope >> +^python3?- => python >> +^r-(?:cran|bioc|other)- => gnu-r >> +^lib.*-perl$ => perl >> +lib.*-cil(?:-dev)?$ => cli-mono >> +^lib.*-(?:java|gcj)$ => java >> +^(?:lib)php- => php >> +^lib(?:hugs|ghc6?)- => haskell >> +^lib.*-ruby(?:1\.\d)?$ => ruby >> +^lib.*-(?:ocaml|camlp4)-dev$ => ocaml >> +^lib.*-dev$ => libdevel >> +^gir\d+\.\d+-.*-\d+\.\d+$=> introspection >> +^libjs- => javascript >> \ No newline at end of file >> diff --git a/debian/changelog b/debian/changelog >> index e7cbe8d..af300a8 100644 >> --- a/debian/changelog >> +++ b/debian/changelog
Re: [lintian] 01/02: Use Lintian::Data for section/name mapping
Bastien Roucaries: > > > Le 26 août 2017 08:59:00 GMT+02:00, Niels Thykiera écrit > : >> Bastien Roucariès: >>> This is an automated email from the git hooks/post-receive script. >>> >>> rouca pushed a commit to branch master >>> in repository lintian. >>> >>> commit f71f3901fcc23db666d3de176526e91fd4f228a2 >>> Author: Bastien ROUCARIÈS >>> Date: Fri Aug 25 22:22:39 2017 +0200 >>> >>> Use Lintian::Data for section/name mapping >> >> >> Hi, >> >> This change causes a regression that need to be fixed (or the commit >> reverted) > > will fix: what do you prefer : fix regex or fix lintian data to keep ordoring > ? > > [...] Do'er decides. That said, I am happy to discuss the options if you would like input and want to talk about pros/cons on the options. Thanks, ~Niels
Re: [lintian] 01/02: Use Lintian::Data for section/name mapping
Bastien Roucariès: > This is an automated email from the git hooks/post-receive script. > > rouca pushed a commit to branch master > in repository lintian. > > commit f71f3901fcc23db666d3de176526e91fd4f228a2 > Author: Bastien ROUCARIÈS> Date: Fri Aug 25 22:22:39 2017 +0200 > > Use Lintian::Data for section/name mapping Hi, This change causes a regression that need to be fixed (or the commit reverted) The problem being that @NAME_SECTION_MAPPINGS is an /ordered/ list with a "first match and we are done"-rule. When migrated to L::Data, this order is lost because L::Data does not have an order guarantee. Therefore, when multiple rules match (see [1] for an example), the previous code would give a well-defined result (first rule listed) whereas the new code gives a non-deterministic result. Thanks, ~Niels [1] libfoo-ocaml-dev matches the following two rules [qr/^lib.*-(?:ocaml|camlp4)-dev$/ => 'ocaml'], [qr/^lib.*-dev$/ => 'libdevel'], > --- > checks/fields.pm | 34 +- > data/fields/name_section_mappings | 16 > debian/changelog | 1 + > 3 files changed, 30 insertions(+), 21 deletions(-) > > diff --git a/checks/fields.pm b/checks/fields.pm > index cb91491..4ad96ad 100644 > --- a/checks/fields.pm > +++ b/checks/fields.pm > @@ -96,23 +96,14 @@ our @known_java_pkg = map { qr/$_/ } ( > ); > > # Mapping of package names to section names > -my @NAME_SECTION_MAPPINGS = ( > -[qr/-docs?$/ => 'doc'], > -[qr/-dbg(?:sym)?$/=> 'debug'], > -[qr/^(?:python-)?zope/=> 'zope'], > -[qr/^python3?-/ => 'python'], > -[qr/^r-(?:cran|bioc|other)-/ => 'gnu-r'], > -[qr/^lib.*-perl$/ => 'perl'], > -[qr/^lib.*-cil(?:-dev)?$/ => 'cli-mono'], > -[qr/^lib.*-(?:java|gcj)$/ => 'java'], > -[qr/^(?:lib)php-/ => 'php'], > -[qr/^lib(?:hugs|ghc6?)-/ => 'haskell'], > -[qr/^lib.*-ruby(?:1\.\d)?$/ => 'ruby'], > -[qr/^lib.*-(?:ocaml|camlp4)-dev$/ => 'ocaml'], > -[qr/^lib.*-dev$/ => 'libdevel'], > -[qr/^gir\d+\.\d+-.*-\d+\.\d+$/=> 'introspection'], > -[qr/^libjs-/ => 'javascript'], > -); > +my $NAME_SECTION_MAPPINGS = Lintian::Data->new( > +'fields/name_section_mappings', > +qr/\s*=>\s*/, > +sub { > +my $regex = qr/$_[0]/x; > +$_[0] = $_[1]; > +return $regex; > +}); > > my %VCS_EXTRACT = ( > browser => sub { return @_;}, > @@ -547,14 +538,15 @@ sub run { > # Check package name <-> section. oldlibs is a special case; let > # anything go there. > if ($parts[-1] ne 'oldlibs') { > -foreach my $map (@NAME_SECTION_MAPPINGS) { > -next unless ($pkg =~ $map->[0]); > +foreach my $section ($NAME_SECTION_MAPPINGS->all()) { > +my $regex = $NAME_SECTION_MAPPINGS->value($section); > +next unless ($pkg =~ m{$regex}); > > my $area = ''; > $area = "$parts[0]/" if (scalar @parts == 2); > tag 'wrong-section-according-to-package-name', > - "$pkg => ${area}$map->[1]" > - unless $parts[-1] eq $map->[1]; > + "$pkg => ${area}$section" > + unless $parts[-1] eq $section; > last; > } > } > diff --git a/data/fields/name_section_mappings > b/data/fields/name_section_mappings > new file mode 100644 > index 000..ca9c1de > --- /dev/null > +++ b/data/fields/name_section_mappings > @@ -0,0 +1,16 @@ > +# map between regex (x) of package => section > +-docs?$ => doc > +-dbg(?:sym)?$=> debug > +^(?:python-)?zope=> zope > +^python3?- => python > +^r-(?:cran|bioc|other)- => gnu-r > +^lib.*-perl$ => perl > +lib.*-cil(?:-dev)?$ => cli-mono > +^lib.*-(?:java|gcj)$ => java > +^(?:lib)php- => php > +^lib(?:hugs|ghc6?)- => haskell > +^lib.*-ruby(?:1\.\d)?$ => ruby > +^lib.*-(?:ocaml|camlp4)-dev$ => ocaml > +^lib.*-dev$ => libdevel > +^gir\d+\.\d+-.*-\d+\.\d+$=> introspection > +^libjs- => javascript > \ No newline at end of file > diff --git a/debian/changelog b/debian/changelog > index e7cbe8d..af300a8 100644 > --- a/debian/changelog > +++ b/debian/changelog > @@ -43,6 +43,7 @@ lintian (2.5.53) UNRELEASED; urgency=medium > + [CL] Ensure that python3-foo packages have "Section: python", not >just python2-foo. (Closes: #870272) > + [RG] Do no longer require debug packages to be priority extra. > ++ [BR] Use Lintian::Data
[lintian] 01/02: Use Lintian::Data for section/name mapping
This is an automated email from the git hooks/post-receive script. rouca pushed a commit to branch master in repository lintian. commit f71f3901fcc23db666d3de176526e91fd4f228a2 Author: Bastien ROUCARIÈSDate: Fri Aug 25 22:22:39 2017 +0200 Use Lintian::Data for section/name mapping --- checks/fields.pm | 34 +- data/fields/name_section_mappings | 16 debian/changelog | 1 + 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/checks/fields.pm b/checks/fields.pm index cb91491..4ad96ad 100644 --- a/checks/fields.pm +++ b/checks/fields.pm @@ -96,23 +96,14 @@ our @known_java_pkg = map { qr/$_/ } ( ); # Mapping of package names to section names -my @NAME_SECTION_MAPPINGS = ( -[qr/-docs?$/ => 'doc'], -[qr/-dbg(?:sym)?$/=> 'debug'], -[qr/^(?:python-)?zope/=> 'zope'], -[qr/^python3?-/ => 'python'], -[qr/^r-(?:cran|bioc|other)-/ => 'gnu-r'], -[qr/^lib.*-perl$/ => 'perl'], -[qr/^lib.*-cil(?:-dev)?$/ => 'cli-mono'], -[qr/^lib.*-(?:java|gcj)$/ => 'java'], -[qr/^(?:lib)php-/ => 'php'], -[qr/^lib(?:hugs|ghc6?)-/ => 'haskell'], -[qr/^lib.*-ruby(?:1\.\d)?$/ => 'ruby'], -[qr/^lib.*-(?:ocaml|camlp4)-dev$/ => 'ocaml'], -[qr/^lib.*-dev$/ => 'libdevel'], -[qr/^gir\d+\.\d+-.*-\d+\.\d+$/=> 'introspection'], -[qr/^libjs-/ => 'javascript'], -); +my $NAME_SECTION_MAPPINGS = Lintian::Data->new( +'fields/name_section_mappings', +qr/\s*=>\s*/, +sub { +my $regex = qr/$_[0]/x; +$_[0] = $_[1]; +return $regex; +}); my %VCS_EXTRACT = ( browser => sub { return @_;}, @@ -547,14 +538,15 @@ sub run { # Check package name <-> section. oldlibs is a special case; let # anything go there. if ($parts[-1] ne 'oldlibs') { -foreach my $map (@NAME_SECTION_MAPPINGS) { -next unless ($pkg =~ $map->[0]); +foreach my $section ($NAME_SECTION_MAPPINGS->all()) { +my $regex = $NAME_SECTION_MAPPINGS->value($section); +next unless ($pkg =~ m{$regex}); my $area = ''; $area = "$parts[0]/" if (scalar @parts == 2); tag 'wrong-section-according-to-package-name', - "$pkg => ${area}$map->[1]" - unless $parts[-1] eq $map->[1]; + "$pkg => ${area}$section" + unless $parts[-1] eq $section; last; } } diff --git a/data/fields/name_section_mappings b/data/fields/name_section_mappings new file mode 100644 index 000..ca9c1de --- /dev/null +++ b/data/fields/name_section_mappings @@ -0,0 +1,16 @@ +# map between regex (x) of package => section +-docs?$ => doc +-dbg(?:sym)?$=> debug +^(?:python-)?zope=> zope +^python3?- => python +^r-(?:cran|bioc|other)- => gnu-r +^lib.*-perl$ => perl +lib.*-cil(?:-dev)?$ => cli-mono +^lib.*-(?:java|gcj)$ => java +^(?:lib)php- => php +^lib(?:hugs|ghc6?)- => haskell +^lib.*-ruby(?:1\.\d)?$ => ruby +^lib.*-(?:ocaml|camlp4)-dev$ => ocaml +^lib.*-dev$ => libdevel +^gir\d+\.\d+-.*-\d+\.\d+$=> introspection +^libjs- => javascript \ No newline at end of file diff --git a/debian/changelog b/debian/changelog index e7cbe8d..af300a8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -43,6 +43,7 @@ lintian (2.5.53) UNRELEASED; urgency=medium + [CL] Ensure that python3-foo packages have "Section: python", not just python2-foo. (Closes: #870272) + [RG] Do no longer require debug packages to be priority extra. ++ [BR] Use Lintian::Data for name/section mapping * checks/files.pm: + [BR] Avoid false positive privacy-breach-generic for legal.xml. * checks/init.d.desc: -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/lintian/lintian.git