|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-4.11 v2 2/2] Add new add_maintainers.pl script to optimise the workflow when using git format-patch with get_maintainer.pl
Lars Kurth writes ("Re: [PATCH for-4.11 v2 2/2] Add new add_maintainers.pl
script to optimise the workflow when using git format-patch with
get_maintainer.pl"):
> On 30/04/2018, 15:36, "Ian Jackson" <ian.jackson@xxxxxxxxxx> wrote:
>
> +# Get the list of patches
> +my $pattern = $patch_dir.'/'.$patch_prefix.'*'.$patch_ext;
>
> This goes wrong if $patch_dir (or $patch_prefix) contains whitespace
> or glob characters. This will be fine in any reasonable Unix
> environment, but there are corner cases where it may go wrong. For
> example, I am told that modern desktop environments mount removeable
> storage media on a pathname containing the volume label (this seems
> very unwise to me, but there you are).
>
> I don't think this is a problem for this script, but I thought I would
> mention it.
>
> I think I won't address this for now, but just out of interest, how would I
> address this?
> If easy, I will just fix it.
Personally I would use opendir/readdir rather than glob, or perhaps
chdir to the patch directory (although whether that is a good idea
depends on whether there are other filename arguments to the script,
because their meaning would change).
> +foreach my $file (@patches) {
>
> It would be nice to exclude ~ and .bak files here. That way manually
> editing files won't require trickery to exclude them.
>
> I was not planning to address this, as it is not an issue, because of the
> filter
> used to get @patches, which is <patch_dir>/0*.patch or <patch_dir>/vx*.patch
> As such, *.patch~ and *.patch.bak are already excluded
Oh, yes of course. Indeed, I was just wrong.
> + while(<$fh>) {
> + chomp;
> + # Keep lists and CC's separately as we dont want them in
> + # the commit message under a Cc: line
> + if (index($_, $mailing_lists) != -1) {
>
> This is really very strange. Firstly, I had to look for the
> definition of $mailing_lists. It seems to be a variable for little
> reason, as it is not configurable.
>
> Secondly, what this is trying to do is look for the string '@lists.'
> anywhere in the CC. But that is not a reliable way of identifying a
> mailing list. I think in general it is not possible to do this
> reliably, but this is rather a suboptimal heuristic.
>
> Instead, I would additionally check to see if the address is mentioned
> in any L: line in MAINTAINERS.
>
> I would also allow the user to specify regexps for addresses to be
> treated as lists. If you did that the the regexp \@lists\. would be a
> good default starting point.
>
> What I am going to do there then is the following: call get_maintainers.pl
> twice, with the options
> --nol => that gets me the R: and M: e-mail addresses
> --nom --nor => that gets me the L: e-mail addresses
Err, I don't think this is quite right. The question you are trying
to ask in this bit of your script is "is this address a mailing list".
If the address is a mailing list for some other stanza in MAINTAINERS,
ie for a stanza whose files are not touched by this patch, then it
should still be treated as a list.
So what I meant was that you should search the whole of MAINTAINERS
yourself for all the L: lines, regardless of where they appear.
That avoids calling get_maintainer.pl twice too, so helpfully the
other difficulties you discuss go away.
> + if ($rextra) {
> + my $item;
> + foreach $item (@tags) {
> + if (hastag($line, $item, \$nline)) {
> + # Replace tag with CC, then push
> + $nline =~ s/$item/$CC/;
>
> I think this is not a sensible way to identify the tag part of the
> line. Instead, why not use a regexp like ^[-A-Z0-9a-z]+: ?
>
> I think I will leave this as-is for now. Right now, we pick up a
> known list of tags and add these to the CC list. What you propose
> would add every tag (including signed off by to the CC list).
Err, no ? What I meant was something like this:
sub hastag ($$)
{
my ($line, $tag) = @_;
return $line =~ m{^\Q$tag\E\s*}i;
}
foreach my $tag (@tags) {
if (hastag($line, $tag)) {
my n$line = $line;
$nline =~ s{^[-0-9a-z]+:}{}i;
push @$rextra, $CC.$nline;
or
sub hastag ($$;$)
{
my ($line, $tag, $rhs_r) = @_;
my $hastag = $line =~ m{^\Q$tag\E*}i;
$$rhs_r = $' if $rhs_r;
return $hastag;
}
foreach my $tag (@tags) {
my $rhs;
if (hastag($line, $tag, \$rhs)) {
push @$rextra, $CC.$rhs;
(Other things I noticed while writing this:
- if you say `foreach $something (@tags) {', $something should
probably be $tag just so it's less confusing.
- you want `foreach my $something ...' usually
- you want /i on your regexps because you want to match case-insensitively
> Maybe more appropriate would be
> <tag>-by: <email>
> Although I don't know what the reg-ex is:
> ^[-A-Z0-9a-z]-by+: does not work.
I like your <something>-by idea. That would catch "suggested-by",
"reported-by", etc., and it's really nice to CC those people
automatically. I think the regexp is:
/^[-0-9a-z]+-by:/i
The + needs to come after the [ ] because it's what lets that part
match more than one character.
> We could make this configurable:
> Default: all tags, except signed-off-by (unless of course this should be
> added to the CC)
Why not CC the S-o-b ? Usually that will be the author anyway.
> An option such as --mytags "reviewed-by: release-acked-by: tested-by: ..."
That would be a fancy feature, certainly. How about
--tag original-author
which would add "Original-Author:" to the set of things recognised,
and can be repeated, and
--no-by-tags
which suppresses "...-by" from the list. So your example would be
--no-by-tags --tag reviewed-by --tag release-acked-by --tag tested-by
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 |