scripts: let checkpatch.pl process an entire GIT branch
PATCH v2 1/1 scripts: let checkpatch.pl process an entire GIT branch
Currently before submitting a series, devs should run checkpatch.pl across each patch to be submitted. This can be automated using a command such as:
git rebase -i master -x 'git show | ./scripts/checkpatch.pl -'
This is rather long winded to type, so this patch introduces a way to tell checkpatch.pl to validate a series of GIT revisions.
If checkpatch.pl is given a single argument that contains a literal '..', this is interpreted as a GIT revision list.
For example:
$ ./scripts/checkpatch.pl master..
total: 0 errors, 0 warnings, 297 lines checked b886d352a2bf58f0996471fb3991a138373a2957 has no obvious style problems and is ready for submission.
total: 0 errors, 0 warnings, 182 lines checked
2a731f9a9ce145e0e0df6d42dd2a3ce4dfc543fa has no obvious style problems and is ready for submission.
total: 0 errors, 0 warnings, 102 lines checked
11844169bcc0c8ed4449eb3744a69877ed329dd7 has no obvious style problems and is ready for submission.
If a genuine patch filename contains the characters '..' it is possible to force interpretation of the arg as a patch
$ ./scripts/checkpatch.pl --patch master..
will force it to load a patch file called "master.."
--- scripts/checkpatch.pl | 102 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 77 insertions(+), 25 deletions(-)
scripts/checkpatch.pl +77 -25
@@ -18,7 +18,8 @@ use Getopt::Long qw(:config no_auto_abbrev); my $quiet = 0; my $tree = 1; my $chk_signoff = 1; -my $chk_patch = 1; +my $chk_patch = undef; +my $chk_branch = undef; my $tst_only; my $emacs = 0; my $terse = 0;
@@ -35,7 +36,11 @@ sub help { my ($exitcode) = @_; print << "EOM"; -Usage: $P [OPTION]... [FILE]... +Usage: + + $P [OPTION]... [FILE]... + $P [OPTION]... [GIT-REV-LIST] + Version: $V Options:
@@ -88,6 +93,19 @@ help(0) if ($help); my $exit = 0; +if (!defined $chk_patch) { + if (!$file) { + if ($#ARGV == 0 && $ARGV[0] =~ /\.\./) { + $chk_branch = $ARGV[0]; + $chk_patch = 0; + } else { + $chk_patch = 1; + } + } else { + $chk_patch = 0; + } +} + if ($#ARGV < 0) { print "$P: no input files\n"; exit(1);
@@ -251,32 +269,66 @@ $chk_signoff = 0 if ($file); my @rawlines = (); my @lines = (); my $vname; -for my $filename (@ARGV) { - my $FILE; - if ($file) { - open($FILE, '-|', "diff -u /dev/null $filename") || - die "$P: $filename: diff failed - $!\n"; - } elsif ($filename eq '-') { - open($FILE, '<&STDIN'); - } else { - open($FILE, '<', "$filename") || - die "$P: $filename: open failed - $!\n"; - } - if ($filename eq '-') { - $vname = 'Your patch'; - } else { - $vname = $filename; - } - while (<$FILE>) { +if ($chk_branch) { + my @patches; + my $HASH; + open($HASH, "-|", "git", "log", "--format=%H", $chk_branch) || + die "$P: git log --format=%H $chk_branch failed - $!\n"; + + while (<$HASH>) { chomp; - push(@rawlines, $_); + push @patches, $_; } - close($FILE); - if (!process($filename)) { - $exit = 1; + + close $HASH; + + die "$P: no revisions returned for revlist '$chk_branch'\n" + unless @patches; + + for my $hash (@patches) { + my $FILE; + open($FILE, '-|', "git", "show", $hash) || + die "$P: git show $hash - $!\n"; + $vname = $hash; + while (<$FILE>) { + chomp; + push(@rawlines, $_); + } + close($FILE); + if (!process($hash)) { + $exit = 1; + } + @rawlines = (); + @lines = (); + } +} else { + for my $filename (@ARGV) { + my $FILE; + if ($file) { + open($FILE, '-|', "diff -u /dev/null $filename") || + die "$P: $filename: diff failed - $!\n"; + } elsif ($filename eq '-') { + open($FILE, '<&STDIN'); + } else { + open($FILE, '<', "$filename") || + die "$P: $filename: open failed - $!\n"; + } + if ($filename eq '-') { + $vname = 'Your patch'; + } else { + $vname = $filename; + } + while (<$FILE>) { + chomp; + push(@rawlines, $_); + } + close($FILE); + if (!process($filename)) { + $exit = 1; + } + @rawlines = (); + @lines = (); } - @rawlines = (); - @lines = (); } exit($exit);
Signature · 1 line
2.13.5
Quoted 23 lines · Daniel P. Berrange
Currently before submitting a series, devs should run checkpatch.pl across each patch to be submitted. This can be automated using a command such as:
git rebase -i master -x 'git show |
./scripts/checkpatch.pl-'This is rather long winded to type, so this patch introduces a way to tell checkpatch.pl to validate a series of GIT revisions.
If checkpatch.pl is given a single argument that contains a literal '..', this is interpreted as a GIT revision list.
For example:
$ ./scripts/checkpatch.pl master.. total: 0 errors, 0 warnings, 297 lines checked
b886d352a2bf58f0996471fb3991a138373a2957has no obvious style problems and is ready for submission.
total: 0 errors, 0 warnings, 182 lines checked
2a731f9a9ce145e0e0df6d42dd2a3ce4dfc543fahas no obvious style problems and is ready for submission.
total: 0 errors, 0 warnings, 102 lines checked
Quoted 8 lines
11844169bcc0c8ed4449eb3744a69877ed329dd7has no obvious style problems and is ready for submission.If a genuine patch filename contains the characters '..' it is possible to force interpretation of the arg as a patch
$ ./scripts/checkpatch.pl --patch master..will force it to load a patch file called "master.."
Looks good, but why no --branch anymore? :) (I can also try adding it back on top).
Paolo
Quoted 143 lines
Signed-off-by Daniel P. Berrange <[email protected]>--- scripts/checkpatch.pl | 102 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 77 insertions(+), 25 deletions(-)scripts/checkpatch.pl +77
-25@@ -18,7 +18,8 @@ use Getopt::Long qw(:config no_auto_abbrev); my $quiet = 0; my $tree = 1; my $chk_signoff = 1; -my $chk_patch = 1; +my $chk_patch = undef; +my $chk_branch = undef; my $tst_only; my $emacs = 0; my $terse = 0;@@ -35,7 +36,11 @@ sub help { my ($exitcode) = @_; print << "EOM"; -Usage: $P [OPTION]... [FILE]... +Usage: + + $P [OPTION]... [FILE]... + $P [OPTION]... [GIT-REV-LIST] + Version: $V Options:@@ -88,6 +93,19 @@ help(0) if ($help); my $exit = 0; +if (!defined $chk_patch) { + if (!$file) { + if ($#ARGV == 0 && $ARGV[0] =~ /\.\./) { + $chk_branch = $ARGV[0]; + $chk_patch = 0; + } else { + $chk_patch = 1; + } + } else { + $chk_patch = 0; + } +} + if ($#ARGV < 0) { print "$P: no input files\n"; exit(1);@@ -251,32 +269,66 @@ $chk_signoff = 0 if ($file); my @rawlines = (); my @lines = (); my $vname; -for my $filename (@ARGV) { - my $FILE; - if ($file) { - open($FILE, '-|', "diff -u /dev/null $filename") || - die "$P: $filename: diff failed - $!\n"; - } elsif ($filename eq '-') { - open($FILE, '<&STDIN'); - } else { - open($FILE, '<', "$filename") || - die "$P: $filename: open failed - $!\n"; - } - if ($filename eq '-') { - $vname = 'Your patch'; - } else { - $vname = $filename; - } - while (<$FILE>) { +if ($chk_branch) { + my @patches; + my $HASH; + open($HASH, "-|", "git", "log", "--format=%H", $chk_branch) || + die "$P: git log --format=%H $chk_branch failed - $!\n"; + + while (<$HASH>) { chomp; - push(@rawlines, $_); + push @patches, $_; } - close($FILE); - if (!process($filename)) { - $exit = 1; + + close $HASH; + + die "$P: no revisions returned for revlist '$chk_branch'\n" + unless @patches; + + for my $hash (@patches) { + my $FILE; + open($FILE, '-|', "git", "show", $hash) || + die "$P: git show $hash - $!\n"; + $vname = $hash; + while (<$FILE>) { + chomp; + push(@rawlines, $_); + } + close($FILE); + if (!process($hash)) { + $exit = 1; + } + @rawlines = (); + @lines = (); + } +} else { + for my $filename (@ARGV) { + my $FILE; + if ($file) { + open($FILE, '-|', "diff -u /dev/null $filename") || + die "$P: $filename: diff failed - $!\n"; + } elsif ($filename eq '-') { + open($FILE, '<&STDIN'); + } else { + open($FILE, '<', "$filename") || + die "$P: $filename: open failed - $!\n"; + } + if ($filename eq '-') { + $vname = 'Your patch'; + } else { + $vname = $filename; + } + while (<$FILE>) { + chomp; + push(@rawlines, $_); + } + close($FILE); + if (!process($filename)) { + $exit = 1; + } + @rawlines = (); + @lines = (); } - @rawlines = (); - @lines = (); } exit($exit);
Quoted 29 lines · Paolo Bonzini
Quoted 28 lines · Daniel P. Berrange
Currently before submitting a series, devs should run checkpatch.pl across each patch to be submitted. This can be automated using a command such as:
git rebase -i master -x 'git show |
./scripts/checkpatch.pl-'This is rather long winded to type, so this patch introduces a way to tell checkpatch.pl to validate a series of GIT revisions.
If checkpatch.pl is given a single argument that contains a literal '..', this is interpreted as a GIT revision list.
For example:
$ ./scripts/checkpatch.pl master.. total: 0 errors, 0 warnings, 297 lines checked
b886d352a2bf58f0996471fb3991a138373a2957has no obvious style problems and is ready for submission.
total: 0 errors, 0 warnings, 182 lines checked
2a731f9a9ce145e0e0df6d42dd2a3ce4dfc543fahas no obvious style problems and is ready for submission.
total: 0 errors, 0 warnings, 102 lines checked
11844169bcc0c8ed4449eb3744a69877ed329dd7has no obvious style problems and is ready for submission.If a genuine patch filename contains the characters '..' it is possible to force interpretation of the arg as a patch
Quoted 6 lines
Quoted 3 lines
$ ./scripts/checkpatch.pl --patch master..will force it to load a patch file called "master.."
Looks good, but why no --branch anymore? :) (I can also try adding it back on top).
It felt redundant to me. I guess it could be used to force interpretation of the arg as a git revlist, even if it lacks '..' ?
Regards,
Daniel
Signature · 3 lines
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|