summaryrefslogtreecommitdiff
path: root/pkgtools
diff options
context:
space:
mode:
authorrillig <rillig@pkgsrc.org>2005-11-01 01:08:38 +0000
committerrillig <rillig@pkgsrc.org>2005-11-01 01:08:38 +0000
commit438ad41261601b890ee204c6c56d4dda925c4860 (patch)
tree673f52e6533e620eef9f88ca48ec871f8d8b8807 /pkgtools
parent868a3892a6e95948e5a743bfa136fbe8ff2f7bf3 (diff)
downloadpkgsrc-438ad41261601b890ee204c6c56d4dda925c4860.tar.gz
Updated pkglint to 4.32.
The --autofix support has been rewritten to be more easily usable. Automatic fixes are currently restricted to the sort order of SUBDIR entries in category Makefiles. It had been the complete category Makefile before. Added a new diagnostic, prefixed with "NOTE:", that is used for important informational diagnostics, for example autofixed files.
Diffstat (limited to 'pkgtools')
-rw-r--r--pkgtools/pkglint/Makefile4
-rw-r--r--pkgtools/pkglint/files/pkglint.pl115
2 files changed, 75 insertions, 44 deletions
diff --git a/pkgtools/pkglint/Makefile b/pkgtools/pkglint/Makefile
index 720c80ec34e..e59b5bd806c 100644
--- a/pkgtools/pkglint/Makefile
+++ b/pkgtools/pkglint/Makefile
@@ -1,7 +1,7 @@
-# $NetBSD: Makefile,v 1.272 2005/10/30 23:09:40 rillig Exp $
+# $NetBSD: Makefile,v 1.273 2005/11/01 01:08:38 rillig Exp $
#
-DISTNAME= pkglint-4.31.2
+DISTNAME= pkglint-4.32
CATEGORIES= pkgtools devel
MASTER_SITES= # empty
DISTFILES= # empty
diff --git a/pkgtools/pkglint/files/pkglint.pl b/pkgtools/pkglint/files/pkglint.pl
index edf2f96208b..93868a72ea6 100644
--- a/pkgtools/pkglint/files/pkglint.pl
+++ b/pkgtools/pkglint/files/pkglint.pl
@@ -11,7 +11,7 @@
# Freely redistributable. Absolutely no warranty.
#
# From Id: portlint.pl,v 1.64 1998/02/28 02:34:05 itojun Exp
-# $NetBSD: pkglint.pl,v 1.312 2005/11/01 00:26:35 rillig Exp $
+# $NetBSD: pkglint.pl,v 1.313 2005/11/01 01:08:38 rillig Exp $
#
# This version contains lots of changes necessary for NetBSD packages
# done by:
@@ -93,7 +93,7 @@ BEGIN {
@ISA = qw(Exporter);
@EXPORT_OK = qw(
NO_FILE NO_LINE_NUMBER
- log_error log_warning log_info log_subinfo
+ log_error log_warning log_note log_info log_subinfo
print_summary_and_exit set_verbose is_verbose
set_gcc_output_format
);
@@ -163,6 +163,10 @@ sub log_warning($$$) {
log_message($file, undef, $lineno, $gcc_output_format ? "warning" : "WARN", $msg);
$warnings++;
}
+sub log_note($$$) {
+ my ($file, $lineno, $msg) = @_;
+ log_message($file, undef, $lineno, $gcc_output_format ? "note" : "NOTE", $msg);
+}
sub log_info($$$) {
my ($file, $lineno, $msg) = @_;
if ($verbose_flag) {
@@ -232,6 +236,12 @@ sub lineno($) {
sub text($) {
return shift(@_)->[TEXT];
}
+sub physlines($) {
+ return shift(@_)->[PHYSLINES];
+}
+sub is_changed($) {
+ return shift(@_)->[CHANGED];
+}
sub log_error($$) {
my ($self, $text) = @_;
@@ -241,6 +251,10 @@ sub log_warning($$) {
my ($self, $text) = @_;
PkgLint::Logging::log_warning($self->[FILE], $self->[LINES], $text);
}
+sub log_note($$) {
+ my ($self, $text) = @_;
+ PkgLint::Logging::log_note($self->[FILE], $self->[LINES], $text);
+}
sub log_info($$) {
my ($self, $text) = @_;
PkgLint::Logging::log_info($self->[FILE], $self->[LINES], $text);
@@ -289,13 +303,15 @@ BEGIN {
@ISA = qw(Exporter);
@EXPORT_OK = qw(
load_file load_lines
+ save_autofix_changes
);
import PkgLint::Util qw(
false true
);
import PkgLint::Logging qw(
- log_error
+ NO_LINE_NUMBER
+ log_error log_note
);
}
@@ -390,6 +406,47 @@ sub load_file($) {
return load_lines($fname, false);
}
+sub save_autofix_changes($) {
+ my ($lines) = @_;
+
+ my (%changed, %physlines);
+
+ foreach my $line (@{$lines}) {
+ if ($line->is_changed) {
+ $changed{$line->file}++;
+ }
+ push(@{$physlines{$line->file}}, @{$line->physlines});
+ }
+
+ foreach my $fname (sort(keys(%changed))) {
+ my $old = "${fname}.pkglint.old";
+ my $new = "${fname}.pkglint.new";
+
+ if (!open(F, ">", $new)) {
+ log_error($new, NO_LINE_NUMBER, "$!");
+ next;
+ }
+ foreach my $physline (@{$physlines{$fname}}) {
+ print F ($physline->[1]);
+ }
+ if (!close(F)) {
+ log_error($new, NO_LINE_NUMBER, "$!");
+ next;
+ }
+
+ unlink($old);
+ if (!link($fname, $old)) {
+ log_error($fname, NO_LINE_NUMBER, "$!");
+ next;
+ }
+ if (!rename($new, $fname)) {
+ log_error($fname, NO_LINE_NUMBER, "$!");
+ next;
+ }
+ log_note($fname, NO_LINE_NUMBER, "Has been autofixed.");
+ }
+}
+
#== End of PkgLint::FileUtil ==============================================
package main;
@@ -411,6 +468,7 @@ BEGIN {
);
import PkgLint::FileUtil qw(
load_file load_lines
+ save_autofix_changes
);
}
@@ -2416,7 +2474,7 @@ sub checkdir_root($) {
sub checkdir_category($) {
my ($dir) = @_;
my $fname = "${dir}/Makefile";
- my ($lines, $lineno, $is_wip, @normalized_lines, $can_fix);
+ my ($lines, $lineno, $is_wip);
if (!($lines = load_file($fname))) {
log_error($fname, NO_LINE_NUMBER, "Cannot be read.");
@@ -2424,28 +2482,23 @@ sub checkdir_category($) {
}
$is_wip = (basename(Cwd::abs_path($dir)) eq "wip");
- $can_fix = true;
$lineno = 0;
# The first line must contain the RCS Id
if ($lineno <= $#{$lines} && checkline_rcsid_regex($lines->[$lineno], qr"#\s+", "# ")) {
- push(@normalized_lines, $lines->[$lineno++]->text);
- } else {
- # The error message has already been printed by checkline_rcsid_regex().
- push(@normalized_lines, "# \$NetBSD\$");
+ $lineno++;
}
# Then, arbitrary comments may follow
while ($lineno <= $#{$lines} && $lines->[$lineno]->text =~ qr"^#") {
- push(@normalized_lines, $lines->[$lineno++]->text);
+ $lineno++;
}
# Then we need an empty line
if ($lineno <= $#{$lines} && $lines->[$lineno]->text eq "") {
- push(@normalized_lines, $lines->[$lineno++]->text);
+ $lineno++;
} else {
$lines->[$lineno]->log_error("Empty line expected.");
- push(@normalized_lines, "");
}
# Then comes the COMMENT line
@@ -2453,18 +2506,16 @@ sub checkdir_category($) {
my ($comment) = ($1);
checkline_valid_characters_in_variable($lines->[$lineno], qr"[-\040'(),/0-9A-Za-z]");
- push(@normalized_lines, $lines->[$lineno++]->text);
+ $lineno++;
} else {
$lines->[$lineno]->log_error("COMMENT= line expected.");
- $can_fix = false;
}
# Then we need an empty line
if ($lineno <= $#{$lines} && $lines->[$lineno]->text eq "") {
- push(@normalized_lines, $lines->[$lineno++]->text);
+ $lineno++;
} else {
$lines->[$lineno]->log_error("Empty line expected.");
- push(@normalized_lines, "");
}
# And now to the most complicated part of the category Makefiles,
@@ -2551,20 +2602,20 @@ sub checkdir_category($) {
if (!$f_atend && ($m_atend || $f_current lt $m_current)) {
if (!exists($m_check{$f_current})) {
$line->log_error("${f_current} exists in the file system, but not in the Makefile.");
+ $line->insert_before("SUBDIR+=\t${f_current}");
}
$f_neednext = true;
- push(@normalized_lines, "SUBDIR+=\t${f_current}");
} elsif (!$m_atend && ($f_atend || $m_current lt $f_current)) {
if (!exists($f_check{$m_current})) {
$line->log_error("${m_current} exists in the Makefile, but not in the file system.");
+ $line->delete();
}
$m_neednext = true;
} else { # $f_current eq $m_current
$f_neednext = true;
$m_neednext = true;
- push(@normalized_lines, $line->text);
if ($m_recurse) {
push(@subdirs, "${dir}/${m_current}");
}
@@ -2575,25 +2626,23 @@ sub checkdir_category($) {
# indexes and READMEs. Just skip them.
if ($is_wip) {
while ($lineno <= $#{$lines} - 2) {
- push(@normalized_lines, $lines->[$lineno++]->text);
+ $lineno++;
}
}
# Then we need an empty line
if ($lineno <= $#{$lines} && $lines->[$lineno]->text eq "") {
- push(@normalized_lines, $lines->[$lineno++]->text);
+ $lineno++;
} else {
$lines->[$lineno]->log_error("Empty line expected.");
- push(@normalized_lines, "");
}
# And, last but not least, the .include line
my $final_line = ".include \"../mk/bsd.pkg.subdir.mk\"";
if ($lineno <= $#{$lines} && $lines->[$lineno]->text eq $final_line) {
- push(@normalized_lines, $lines->[$lineno++]->text);
+ $lineno++;
} else {
$lines->[$lineno]->log_error("Expected this: ${final_line}.");
- push(@normalized_lines, $final_line);
}
if ($lineno <= $#{$lines}) {
@@ -2602,25 +2651,7 @@ sub checkdir_category($) {
# If the user has requested automatic fixing and we can do it, we do it.
if ($opt_autofix) {
- my $changed = false;
- if (scalar(@normalized_lines) != scalar(@{$lines})) {
- $changed = true;
- } else {
- for my $i (0..$#{$lines}) {
- if ($normalized_lines[$i] ne $lines->[$i]->text) {
- $changed = true;
- }
- }
- }
-
- if ($changed && $can_fix) {
- rename($fname, "${fname}.pkglint-backup") or die;
- open(F, "> ${fname}") or die;
- foreach my $line (@normalized_lines) {
- printf F ("%s\n", $line);
- }
- close(F) or die;
- }
+ save_autofix_changes($lines);
}
if ($opt_recursive) {