Ruby's option parser is not extensible enough to keep unknown options. Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- contrib/related/git-related | 83 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 12 deletions(-) diff --git a/contrib/related/git-related b/contrib/related/git-related index 585572b..c933898 100755 --- a/contrib/related/git-related +++ b/contrib/related/git-related @@ -3,26 +3,85 @@ # This script finds people that might be interested in a patch # usage: git related <file> -require 'optparse' - $since = '5-years-ago' $min_percent = 10 $files = [] $rev_args = [] -OptionParser.new do |opts| - opts.program_name = 'git related' - opts.banner = 'usage: git related [options] <files | rev-list options>' +class SimpleParser + 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 - opts.on('-p', '--min-percent N', Integer, - 'Minium percentage of role participation') do |v| - $min_percent = v + 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 + i = 0 + if ARGV.member?('-h') or ARGV.member?('--help') + usage + exit 1 + end + while cur = ARGV[i] do + if cur =~ /^(-.+?)(?:=(.*))?$/ + opt = @list[$1] + if opt + v = $2 || ARGV.delete_at(i + 1) + opt.call(v) + ARGV.delete_at(i) + next + end + end + i += 1 + end end - opts.on('-d', '--since DATE', - 'How far back to search for relevant commits') do |v| - $since = v + + def usage + puts 'usage: %s' % @usage + @list.values.uniq.each do |opt| + s = ' ' + s << [opt.short, opt.long].compact.join(', ') + s << '%*s%s' % [26 - s.size, '', opt.help] if opt.help + puts s + end end -end.parse! + +end + +opts = SimpleParser.new +opts.usage = '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 Commit -- 1.8.3.358.g5a91d05 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html