[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-4.11 v3 1/1] Add new add_maintainers.pl script to optimise the workflow when using git format-patch with get_maintainer.pl
Thanks. This is much better :-). I have reviewed this for style, obvious bugs, and the semantics in the doc comment. I haven't tried to follow the algorithm in detail, but I reckon it's probably OK. I have reordered the patch (and hence the file) to make the grouping of my comments make more sense. Lars Kurth writes ("[PATCH for-4.11 v3 1/1] Add new add_maintainers.pl script to optimise the workflow when using git format-patch with get_maintainer.pl"): > + --inspatch (top|ccbody|cc---|none) | -p (top|ccbody|cc---|none) > + Insert email addresses into *.patch files according to the POLICY > + See section POLICY: > + --inscover (top|ccend|none) | -c (top|ccend|none) > + Insert email addresses into cover letteraccording to the POLICY > + See section PROCESSING POLICY: I'm afraid that I don't understand which addresses are added where, from the documentation. In particular, what happens without --tags or --tagscc ? Also you should define `tag'; it has a lot of different meanings, some subtly different, and it is not completely clear which one you mean. I think you should formally state the default behaviour. Something like: By default: * get_maintainer is called on each patch to find email addresses of maintainers/reviewers for that patch; these are added to the patch body near the CC section. * further email addresses are found in each patch's commit message tags (CC, signed-off-by, reviewed-by, etc.) * All of the above addresses are added to the CC mail headers of each patch * All of the above addresses are added to the CC mail headers of the cover letter I suspect that what I have above is not the real behaviour. You should write what is true in that kind of style :-). > +my $patch_prefix = "0"; # Use a 0, such that v* does not get picked up > + # Obviously this will only work for series with > + # < 999 patches, which should be fine I don't understand the purpose of this: > +if ($rerollcount > 0) { > + $patch_prefix = "v".$rerollcount; > +} ... > +my $pattern = $patch_dir.'/'.$patch_prefix.'*'.$patch_ext; > +print "Then perform:\n". > + "git send-email -to xen-devel\@lists.xenproject.org ". > + $patch_dir.'/'.$patch_prefix."*.patch"."\n"; What files matching *.patch exist here that should not be processed ? If the answer is none then $patch_prefix is redundant, I think ? > +foreach my $file (@patches) { > + if ($file =~ /\Q$cover_letter\E/) { I know you had me look at this over your shoulder and I said it was right, but I think in fact this would match hypothetical files $patch_dir/0020-do-something-about-0000-cover-letter.patch I think you need to expect a /. So one of + if ($file =~ /\/\Q$cover_letter\E/) { + if ($file =~ m{/\Q$cover_letter\E}) { > +print "Then perform:\n". > + "git send-email -to xen-devel\@lists.xenproject.org ". > + $patch_dir.'/'.$patch_prefix."*.patch"."\n"; > + > +exit 0; > + > +my $readmailinglists = 0; > +my @mailinglists = (); This is a very curious structure. These assignments are never executed (but I guess the program works anyway). I would recommend moving the main program to the bottom of the file. > +sub getmailinglists () { > + # Read mailing list from MAINTAINERS file and copy > + # a list of e-mail addresses to @mailinglists > + if (!$readmailinglists) { I suggest you rename this variable $getmailinglists_done or something. As it is it is confusing because `read' might be the present tense, but then the sense is wrong. Also, you might find it better to use a structure like one of if ($getmailingslists_done) { return; } return if $getmailingslists_done; > + if (-e $maintainers) { ... > + print "Warning: Mailing lists will be treated as CC's\n"; > + } > + # Don't try again, even if the MAINTAINERS file does not exist > + $readmailinglists = 1; > + # Remove any duplicates > + @mailinglists = uniq @mailinglists; > + } Indentation here is misleading. (But this will go away if you adopt my suggestion above). > +sub ismailinglist ($) { > + my ($check) = @_; > + # Get the mailing list information > + getmailinglists(); > + # Do the check > + if ( grep { $_ eq $check} @mailinglists) { Rather than uniq above, and then grep here, you could use a hash %mailinglists. That would be more idiomatic and also less code and faster. But as it is is tolerable. > +sub getmaintainers ($$$) { > + my ($file, $rto, $rcc) = @_; > + my $get_maintainer_args = join " ", @get_maintainer_args; > + my $cmd = "$get_maintainer $get_maintainer_args <$file"; ... > + open($fh, "-|", $cmd) > + or die "Failed to open '$cmd'\n"; You should use the array form of piped open, rather than this string joining. That way arguments containing spaces make their way through correct. > + if (! -e $get_maintainer) { > + die "$tool: The tool requires $get_maintainer\n"; I still don't like this check. What if the user specifies an implementation of $get_maintainer which is on the PATH ? > + while(my $line = <$fh>) { ... > + } > + close $fh; You need to check the errors here. See the `perldoc -f close'. > + if ($tags & !$tagscc) { You mean &&, not &. Thanks, Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |