linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] get_maintainer.pl: improve config-file support
@ 2010-05-12 21:12 florian
  2010-05-12 22:28 ` Joe Perches
  0 siblings, 1 reply; 7+ messages in thread
From: florian @ 2010-05-12 21:12 UTC (permalink / raw)
  To: akpm; +Cc: Florian Mickler, Joe Perches, Stephen Hemminger, linux-kernel

This changes the syntax of the config-file introduced in the commit
"scripts/get_maintainer.pl: add .get_maintainer.conf default options
file".

Entries are now of the more commonly found form:

	key = value

where keys are cmd-line arguments without the "--" prefixed.

An config file would look like this:

      ### comments and blank lines are allowed, spaces ignored ###
      git-all-signature-types = 1 #use all tags
      git-min-signatures = 2
      git-max-maintainers = 6
      names = 0 # no-names

This approach uses a hash to store references to the config-variables as
this makes it easier to implement default/override semantics for the
config file and cmdline, as well as warn if unrecognized options are
specified.

Signed-off-by: Florian Mickler <florian@mickler.org>
---

Hi Andrew!

This is on top of your queued patch from Joe Perches:
"scripts-get_maintainerpl-add-get_maintainerconf-default-options-file.patch"

I can regenerate against linux-next or mainline, as this replaces Joe's patch more or less. 
Nevertheless it wouldn't exist if it weren't for that initial patch, so i decided to do it
on top. 


Cheers,
Flo

p.s.: I'm offline until monday.
 
scripts/get_maintainer.pl |  174 ++++++++++++++++++++++++++++----------------
 1 files changed, 111 insertions(+), 63 deletions(-)

diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
index b228198..4cc9407 100755
--- a/scripts/get_maintainer.pl
+++ b/scripts/get_maintainer.pl
@@ -48,6 +48,58 @@ my $from_filename = 0;
 my $pattern_depth = 0;
 my $version = 0;
 my $help = 0;
+my %prefs = (
+		'email' => \$email,
+		'git' => \$email_git,
+		'git-all-signature-types' => \$email_git_all_signature_types,
+		'git-blame' => \$email_git_blame,
+		'git-chief-penguins' => \$email_git_penguin_chiefs,
+		'git-min-signatures' => \$email_git_min_signatures,
+		'git-max-maintainers' => \$email_git_max_maintainers,
+		'git-min-percent' => \$email_git_min_percent,
+		'git-since' => \$email_git_since,
+		'hg-since' => \$email_hg_since,
+		'remove-duplicates' => \$email_remove_duplicates,
+		'maintainer' => \$email_maintainer,
+		'names' => \$email_usename,
+		'list' => \$email_list,
+		'subscribers' => \$email_subscriber_list,
+		'multiline' => \$output_multiline,
+		'roles' => \$output_roles,
+		'rolestats' => \$output_rolestats,
+		'separator' => \$output_separator,
+		'subsystem' => \$subsystem,
+		'status' => \$status,
+		'scm' => \$scm,
+		'web' => \$web,
+		'pattern-depth' => \$pattern_depth,
+		'keywords' => \$keywords,
+		'sections' => \$sections,
+		'file-emails' => \$file_emails,
+		'file' => \$from_filename,
+		'version' => \$version,
+		'help' => \$help,
+);
+
+my $confpath =  "${lk_path}.get_maintainer.conf";
+if (-f $confpath) {
+    open(my $conffile, '<', $confpath)
+	or warn "$P: Can't open $confpath: $!\n";
+    while (<$conffile>) {
+	chomp;                  # no newline
+	s/#.*//;                # no comments
+	s/^\s+//;               # no leading white
+	s/\s+$//;               # no trailing white
+	next unless length;     # anything left?
+	my ($key, $val) = split(/\s*=\s*/, $_, 2);
+	if (exists($prefs{$key})) {
+		${$prefs{$key}} = $val;
+	} else {
+		warn "$confpath: unrecognized option (\"$key\").\n";
+	}
+    }
+    close($conffile);
+}
 
 my $exit = 0;
 
@@ -107,61 +159,37 @@ my %VCS_cmds_hg = (
     "blame_commit_pattern" => "^([0-9a-f]+):"
 );
 
-if (-f "${lk_path}.get_maintainer.conf") {
-    my @conf_args;
-    open(my $conffile, '<', "${lk_path}.get_maintainer.conf")
-	or warn "$P: Can't open .get_maintainer.conf: $!\n";
-    while (<$conffile>) {
-	my $line = $_;
-
-	$line =~ s/\s*\n?$//g;
-	$line =~ s/^\s*//g;
-	$line =~ s/\s+/ /g;
-
-	next if ($line =~ m/^\s*#/);
-	next if ($line =~ m/^\s*$/);
-
-	my @words = split(" ", $line);
-	foreach my $word (@words) {
-	    last if ($word =~ m/^#/);
-	    push (@conf_args, $word);
-	}
-    }
-    close($conffile);
-    unshift(@ARGV, @conf_args) if @conf_args;
-}
-
-if (!GetOptions(
-		'email!' => \$email,
-		'git!' => \$email_git,
-		'git-all-signature-types!' => \$email_git_all_signature_types,
-		'git-blame!' => \$email_git_blame,
-		'git-chief-penguins!' => \$email_git_penguin_chiefs,
-		'git-min-signatures=i' => \$email_git_min_signatures,
-		'git-max-maintainers=i' => \$email_git_max_maintainers,
-		'git-min-percent=i' => \$email_git_min_percent,
-		'git-since=s' => \$email_git_since,
-		'hg-since=s' => \$email_hg_since,
-		'remove-duplicates!' => \$email_remove_duplicates,
-		'm!' => \$email_maintainer,
-		'n!' => \$email_usename,
-		'l!' => \$email_list,
-		's!' => \$email_subscriber_list,
-		'multiline!' => \$output_multiline,
-		'roles!' => \$output_roles,
-		'rolestats!' => \$output_rolestats,
-		'separator=s' => \$output_separator,
-		'subsystem!' => \$subsystem,
-		'status!' => \$status,
-		'scm!' => \$scm,
-		'web!' => \$web,
-		'pattern-depth=i' => \$pattern_depth,
-		'k|keywords!' => \$keywords,
-		'sections!' => \$sections,
-		'fe|file-emails!' => \$file_emails,
-		'f|file' => \$from_filename,
-		'v|version' => \$version,
-		'h|help|usage' => \$help,
+if (!GetOptions( \%prefs,
+		'email!',
+		'git!',
+		'git-all-signature-types!',
+		'git-blame!',
+		'git-chief-penguins!',
+		'git-min-signatures=i',
+		'git-max-maintainers=i',
+		'git-min-percent=i',
+		'git-since=s',
+		'hg-since=s',
+		'remove-duplicates!',
+		'maintainer|m!',
+		'names|n!',
+		'list|l!',
+		'subscribers|s!',
+		'multiline!',
+		'roles!',
+		'rolestats!',
+		'separator=s',
+		'subsystem!',
+		'status!',
+		'scm!',
+		'web!',
+		'pattern-depth=i',
+		'keywords|k!',
+		'sections!',
+		'file-emails|fe!',
+		'file|f',
+		'version|v',
+		'help|h|usage',
 		)) {
     die "$P: invalid argument - use --help if necessary\n";
 }
@@ -545,10 +573,10 @@ MAINTAINER field selection options:
     --git-blame => use git blame to find modified commits for patch or file
     --git-since => git history to use (default: $email_git_since)
     --hg-since => hg history to use (default: $email_hg_since)
-    --m => include maintainer(s) if any
-    --n => include name 'Full Name <addr\@domain.tld>'
-    --l => include list(s) if any
-    --s => include subscriber only list(s) if any
+    --maintainer | --m  => include maintainer(s) if any
+    --names | --n => include name 'Full Name <addr\@domain.tld>'
+    --list | --l  => include list(s) if any
+    --subscribers | --s => include subscriber only list(s) if any
     --remove-duplicates => minimize duplicate email names/addresses
     --roles => show roles (status:subsystem, git-signer, list, etc...)
     --rolestats => show roles and statistics (commits/total_commits, %)
@@ -582,26 +610,46 @@ Notes:
           no individual file within the directory or subdirectory
           is matched.
       Used with "--git-blame", does not iterate all files in directory
+
   Using "--git-blame" is slow and may add old committers and authors
       that are no longer active maintainers to the output.
+
   Using "--roles" or "--rolestats" with git send-email --cc-cmd or any
       other automated tools that expect only ["name"] <email address>
       may not work because of additional output after <email address>.
+
   Using "--rolestats" and "--git-blame" shows the #/total=% commits,
       not the percentage of the entire file authored.  # of commits is
       not a good measure of amount of code authored.  1 major commit may
       contain a thousand lines, 5 trivial commits may modify a single line.
+
   If git is not installed, but mercurial (hg) is installed and an .hg
       repository exists, the following options apply to mercurial:
           --git,
           --git-min-signatures, --git-max-maintainers, --git-min-percent, and
           --git-blame
       Use --hg-since not --git-since to control date selection
-  File ".get_maintainer.conf", if it exists in the linux kernel source root
+
+  The file ".get_maintainer.conf", if it exists in the linux kernel source root
       directory, can change whatever get_maintainer defaults are desired.
-      Entries in this file can be any command line argument.
-      This file is prepended to any additional command line arguments.
-      Multiple lines and # comments are allowed.
+      Entries in this file can be any command line argument without the
+      preceding "--" followed by an equal sign ('=') and a value.
+      Use 0 for disabled and 1 for enabled.
+      This makes it easy to use it with non-default options via
+      'git send-email --cc-cmd'.
+
+      An example file would look like this:
+      -------------------------------------------------------------------------
+
+      ### comments and blank lines are allowed. ###
+      git-all-signature-types = 1 #use all tags
+      git-min-signatures = 2
+      git-max-maintainers = 6
+      names = 0 # no names
+
+      -------------------------------------------------------------------------
+
+
 EOT
 }
 
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] get_maintainer.pl: improve config-file support
  2010-05-12 21:12 [PATCH] get_maintainer.pl: improve config-file support florian
@ 2010-05-12 22:28 ` Joe Perches
  2010-05-13  7:56   ` Florian Mickler
  0 siblings, 1 reply; 7+ messages in thread
From: Joe Perches @ 2010-05-12 22:28 UTC (permalink / raw)
  To: florian; +Cc: akpm, Stephen Hemminger, linux-kernel

On Wed, 2010-05-12 at 23:12 +0200, florian@mickler.org wrote:
> This changes the syntax of the config-file introduced in the commit
> "scripts/get_maintainer.pl: add .get_maintainer.conf default options
> file".
> Entries are now of the more commonly found form:
> 	key = value
> where keys are cmd-line arguments without the "--" prefixed.

I don't have a strong opinion one way or another about the
.conf file format.

Another option which could be useful:  --noconf, don't read the file.

> as well as warn if unrecognized options are
> specified.

The old approach does that as well.

> +if (!GetOptions( \%prefs,

I think you don't need to repeat the options.
Doesn't this work?
	if (!GetOptions(\%prefs)) {
	    die "$P: invalid argument - use --help if necessary\n";



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] get_maintainer.pl: improve config-file support
  2010-05-12 22:28 ` Joe Perches
@ 2010-05-13  7:56   ` Florian Mickler
  2010-05-20  6:46     ` Florian Mickler
  0 siblings, 1 reply; 7+ messages in thread
From: Florian Mickler @ 2010-05-13  7:56 UTC (permalink / raw)
  To: Joe Perches; +Cc: akpm, Stephen Hemminger, linux-kernel

On Wed, 12 May 2010 15:28:53 -0700
Joe Perches <joe@perches.com> wrote:

> On Wed, 2010-05-12 at 23:12 +0200, florian@mickler.org wrote:
> > This changes the syntax of the config-file introduced in the commit
> > "scripts/get_maintainer.pl: add .get_maintainer.conf default options
> > file".
> > Entries are now of the more commonly found form:
> > 	key = value
> > where keys are cmd-line arguments without the "--" prefixed.
> 
> I don't have a strong opinion one way or another about the
> .conf file format.
> 
> Another option which could be useful:  --noconf, don't read the file.
> 
> > as well as warn if unrecognized options are
> > specified.
> 
> The old approach does that as well.

True.

> 
> > +if (!GetOptions( \%prefs,
> 
> I think you don't need to repeat the options.
> Doesn't this work?
> 	if (!GetOptions(\%prefs)) {
> 	    die "$P: invalid argument - use --help if necessary\n";
> 
No, GetOpts::Long needs a special markup for parsing the cmdline
string, like =s for specifying that that option is accompanied by a
string value or the ! for specifying that it is a flag. 
Also there are aliases defined for config-options.

Cheers,
Flo

p.s.: maybe there is a GetOpts feature to use config-files?

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] get_maintainer.pl: improve config-file support
  2010-05-13  7:56   ` Florian Mickler
@ 2010-05-20  6:46     ` Florian Mickler
  2010-05-21 20:13       ` Andrew Morton
  0 siblings, 1 reply; 7+ messages in thread
From: Florian Mickler @ 2010-05-20  6:46 UTC (permalink / raw)
  To: akpm; +Cc: Joe Perches, Stephen Hemminger, linux-kernel

Hi Andrew!

What's the status of this patch?
Do you take it, or do you have an issue with it? This is a clear
improvement in my opinion.

cheers,
Flo

On Thu, 13 May 2010 09:56:52 +0200
Florian Mickler <florian@mickler.org> wrote:

> On Wed, 12 May 2010 15:28:53 -0700
> Joe Perches <joe@perches.com> wrote:
> 
> > On Wed, 2010-05-12 at 23:12 +0200, florian@mickler.org wrote:
> > > This changes the syntax of the config-file introduced in the commit
> > > "scripts/get_maintainer.pl: add .get_maintainer.conf default options
> > > file".
> > > Entries are now of the more commonly found form:
> > > 	key = value
> > > where keys are cmd-line arguments without the "--" prefixed.
> > 
> > I don't have a strong opinion one way or another about the
> > .conf file format.
> > 
> > Another option which could be useful:  --noconf, don't read the file.
> > 
> > > as well as warn if unrecognized options are
> > > specified.
> > 
> > The old approach does that as well.
> 
> True.
> 
> > 
> > > +if (!GetOptions( \%prefs,
> > 
> > I think you don't need to repeat the options.
> > Doesn't this work?
> > 	if (!GetOptions(\%prefs)) {
> > 	    die "$P: invalid argument - use --help if necessary\n";
> > 
> No, GetOpts::Long needs a special markup for parsing the cmdline
> string, like =s for specifying that that option is accompanied by a
> string value or the ! for specifying that it is a flag. 
> Also there are aliases defined for config-options.
> 
> Cheers,
> Flo


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] get_maintainer.pl: improve config-file support
  2010-05-20  6:46     ` Florian Mickler
@ 2010-05-21 20:13       ` Andrew Morton
  2010-05-21 20:21         ` Joe Perches
  0 siblings, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2010-05-21 20:13 UTC (permalink / raw)
  To: Florian Mickler; +Cc: Joe Perches, Stephen Hemminger, linux-kernel

On Thu, 20 May 2010 08:46:15 +0200
Florian Mickler <florian@mickler.org> wrote:

> On Thu, 13 May 2010 09:56:52 +0200
> Florian Mickler <florian@mickler.org> wrote:
> 
> > On Wed, 12 May 2010 15:28:53 -0700
> > Joe Perches <joe@perches.com> wrote:
> > 
> > > On Wed, 2010-05-12 at 23:12 +0200, florian@mickler.org wrote:
> > > > This changes the syntax of the config-file introduced in the commit
> > > > "scripts/get_maintainer.pl: add .get_maintainer.conf default options
> > > > file".
> > > > Entries are now of the more commonly found form:
> > > > 	key = value
> > > > where keys are cmd-line arguments without the "--" prefixed.
> > > 
> > > I don't have a strong opinion one way or another about the
> > > .conf file format.
> > > 
> > > Another option which could be useful:  --noconf, don't read the file.
> > > 
> > > > as well as warn if unrecognized options are
> > > > specified.
> > > 
> > > The old approach does that as well.
> > 
> > True.
> > 
> > > 
> > > > +if (!GetOptions( \%prefs,
> > > 
> > > I think you don't need to repeat the options.
> > > Doesn't this work?
> > > 	if (!GetOptions(\%prefs)) {
> > > 	    die "$P: invalid argument - use --help if necessary\n";
> > > 
> > No, GetOpts::Long needs a special markup for parsing the cmdline
> > string, like =s for specifying that that option is accompanied by a
> > string value or the ! for specifying that it is a flag. 
> > Also there are aliases defined for config-options.
> > 
>
> Hi Andrew!
> 
> What's the status of this patch?
> Do you take it, or do you have an issue with it? This is a clear
> improvement in my opinion.
> 

(top-posting repaired)

Joe didn't sound very excited about it.

If we're going to do this, we should hurry up, please - it'd be silly
to introduce a config file and then change its format shortly
afterwards.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] get_maintainer.pl: improve config-file support
  2010-05-21 20:13       ` Andrew Morton
@ 2010-05-21 20:21         ` Joe Perches
  2010-05-21 21:08           ` Florian Mickler
  0 siblings, 1 reply; 7+ messages in thread
From: Joe Perches @ 2010-05-21 20:21 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Florian Mickler, Stephen Hemminger, linux-kernel

On Fri, 2010-05-21 at 13:13 -0700, Andrew Morton wrote:
> On Thu, 20 May 2010 08:46:15 +0200
> Florian Mickler <florian@mickler.org> wrote:
> > What's the status of this patch?
> > Do you take it, or do you have an issue with it? This is a clear
> > improvement in my opinion.
> Joe didn't sound very excited about it.
> If we're going to do this, we should hurry up, please - it'd be silly
> to introduce a config file and then change its format shortly
> afterwards.

If an ".ini" style config is used, I think it'd be better to
put this stuff in .git/config under a proper section so that
any checking style script (checkpatch, smatch, smpl, etc)
has a standard place to put stuff.

I think what I posted requires less overall work and doesn't
need updating every time a new option is added, but overall
the capability isn't all that necessary.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] get_maintainer.pl: improve config-file support
  2010-05-21 20:21         ` Joe Perches
@ 2010-05-21 21:08           ` Florian Mickler
  0 siblings, 0 replies; 7+ messages in thread
From: Florian Mickler @ 2010-05-21 21:08 UTC (permalink / raw)
  To: Joe Perches; +Cc: Andrew Morton, Stephen Hemminger, linux-kernel

On Fri, 21 May 2010 13:21:28 -0700
Joe Perches <joe@perches.com> wrote:

> On Fri, 2010-05-21 at 13:13 -0700, Andrew Morton wrote:
> > On Thu, 20 May 2010 08:46:15 +0200
> > Florian Mickler <florian@mickler.org> wrote:
> > > What's the status of this patch?
> > > Do you take it, or do you have an issue with it? This is a clear
> > > improvement in my opinion.
> > Joe didn't sound very excited about it.
> > If we're going to do this, we should hurry up, please - it'd be silly
> > to introduce a config file and then change its format shortly
> > afterwards.
> 
> If an ".ini" style config is used, I think it'd be better to
> put this stuff in .git/config under a proper section so that
> any checking style script (checkpatch, smatch, smpl, etc)
> has a standard place to put stuff.
> 
> I think what I posted requires less overall work and doesn't
> need updating every time a new option is added, but overall
> the capability isn't all that necessary.

Feature-like it is the same. But in my opinion my solution with a
key=value approach (why .ini? where did you get that from?) is more
obvious. 
I've never seen this hacky thing where you put "--option" tokens in
a file in my life. 
Of course, Joe's solution is short and to the point.
But i would consider it more "quick'n'dirty" than elegant.

As for the placement:
This has nothing to do with git, aside from using it as a _possible_
way to determine the maintainers. So I doubt that we should
mess with .git/config. If you want to go that road of a more general
solution, a common /scripts/ config-file would be more realistic.

Cheers,
Flo


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-05-21 21:08 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-12 21:12 [PATCH] get_maintainer.pl: improve config-file support florian
2010-05-12 22:28 ` Joe Perches
2010-05-13  7:56   ` Florian Mickler
2010-05-20  6:46     ` Florian Mickler
2010-05-21 20:13       ` Andrew Morton
2010-05-21 20:21         ` Joe Perches
2010-05-21 21:08           ` Florian Mickler

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).