git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v10 13/15] contrib: related: add option parsing

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Oct 12, 2013, 07:06 UTC
Message-ID
<1381561584-20529-12-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1381561584-20529-1-git-send-email-felipe.contreras@gmail.com>
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/related/git-related | 85 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)
diff --git a/contrib/related/git-related b/contrib/related/git-related
index 6ab74c7..d6b44c7 100755
--- a/contrib/related/git-related
+++ b/contrib/related/git-related
@@ -45,6 +45,91 @@ get_mailmap(File.join($base_dir, '.mailmap'))
 mailmap_file = %x[git config mailmap.file].chomp
 get_mailmap(mailmap_file)
 
+class ParseOpt
+  attr_writer :usage
+
+  class Option
+    attr_reader :short, :long, :help
+
+    def initialize(short, long, help, &block)
+      @block = block
+      @short = short
+      @long = long
+      @help = help
+    end
+
+    def call(v)
+      @block.call(v)
+    end
+  end
+
+  def initialize
+    @list = {}
+  end
+
+  def on(short = nil, long = nil, help = nil, &block)
+    opt = Option.new(short, long, help, &block)
+    @list[short] = opt if short
+    @list[long] = opt if long
+  end
+
+  def parse
+    if ARGV.member?('-h') or ARGV.member?('--help')
+      usage
+      exit 0
+    end
+    seen_dash = false
+    ARGV.delete_if do |cur|
+      opt = val = nil
+      next false if cur[0] != '-' or seen_dash
+      case cur
+      when '--'
+        seen_dash = true
+        next true
+      when /^--no-(.+)$/
+        opt = @list[$1]
+        val = false
+      when /^-([^-])(.+)?$/, /^--(.+?)(?:=(.+))?$/
+        opt = @list[$1]
+        val = $2 || true
+      end
+      if opt
+        opt.call(val)
+        true
+      end
+    end
+  end
+
+  def usage
+    def fmt(prefix, str)
+      return str ? prefix + str : nil
+    end
+    puts 'usage: %s' % @usage
+    @list.values.uniq.each do |opt|
+      s = '    '
+      s << ''
+      s << [fmt('-', opt.short), fmt('--', opt.long)].compact.join(', ')
+      s << ''
+      s << '%*s%s' % [26 - s.size, '', opt.help] if opt.help
+      puts s
+    end
+  end
+
+end
+
+opts = ParseOpt.new
+opts.usage = 'git related [options] <files | rev-list options>'
+
+opts.on('p', 'min-percent', 'Minium percentage of role participation') do |v|
+  $min_percent = v.to_i
+end
+
+opts.on('d', 'since', 'How far back to search for relevant commits') do |v|
+  $since = v
+end
+
+opts.parse
+
 class Person
 
   attr_reader :roles
-- 
1.8.4-fc
Previous: Felipe ContrerasNext: Felipe Contreras
Message 12 of 16 in “contrib: related: add option to show commits”
  1. 14/15 contrib: related: add option to show commitsFelipe Contreras, Oct 12, 2013
  2. 00/15 New git-related helperFelipe Contreras, Oct 12, 2013
  3. 07/15 contrib: related: add helper Person classesFelipe Contreras, Oct 12, 2013
  4. 10/15 contrib: related: group persons with same emailFelipe Contreras, Oct 12, 2013
  5. 02/15 contrib: related: add testsFelipe Contreras, Oct 12, 2013
  6. 06/15 contrib: related: print the amount of involvementFelipe Contreras, Oct 12, 2013
  7. 04/15 contrib: related: add option to parse from committishFelipe Contreras, Oct 12, 2013
  8. 15/15 contrib: related: add READMEFelipe Contreras, Oct 12, 2013
  9. 09/15 contrib: related: add support for more rolesFelipe Contreras, Oct 12, 2013
  10. 03/15 contrib: related: add support for multiple patchesFelipe Contreras, Oct 12, 2013
  11. 12/15 contrib: related: add mailmap supportFelipe Contreras, Oct 12, 2013
  12. 13/15 contrib: related: add option parsingFelipe Contreras, Oct 12, 2013
  13. 01/15 Add new git-related helper to contribFelipe Contreras, Oct 12, 2013
  14. 11/15 contrib: related: allow usage on other directoriesFelipe Contreras, Oct 12, 2013
  15. 08/15 contrib: related: show role countFelipe Contreras, Oct 12, 2013
  16. 05/15 contrib: related: parse committish like format-patchFelipe Contreras, Oct 12, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.