Signed-off-by: Felipe Contreras <[email protected]>
---
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
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html