module MGit::ARGV::Parser
Public Class Methods
parse(argv)
click to toggle source
@param [Array] argv
@return [String, Array, Array] 返回cmd 和 参数列表 # 将参数初步分解,便于后续处理 如:argv = [command zzzz -u sdfsd sdf –mmmm yoo ssss qqq –test asdfa asd ad f –xxx asd as dfa –yoo=“ajsdaf” –ppp -abc] 分解为:command, [zzzz], [[-u, sdfsd, sdf], [–mmmm, yoo, ssss, qqq], [–test, asdfa, asd, ad, f], [–xxx, asd, as, dfa], [–yoo, “ajsdaf”], [–ppp], [-a], [-b], [-c]]
初步解析参数
# File lib/m-git/argv/parser.rb, line 15 def self.parse(argv) absolute_cmd = argv.join(' ') cmd = argv.shift pure_opts = argv.join(' ') # 将参数初步分解,便于后续处理 # 如:zzzz -u sdfsd sdf --mmmm yoo ssss qqq --test asdfa asd ad f --xxx asd as dfa --yoo="ajsdaf" --ppp -abc # 分解为:[[zzzz], [-u, sdfsd, sdf], [--mmmm, yoo, ssss, qqq], [--test, asdfa, asd, ad, f], [--xxx, asd, as, dfa], [--yoo, "ajsdaf"], [--ppp], [-a], [-b], [-c]] temp = [] raw_opts = [] argv.each_with_index { |e, idx| Foundation.help!("参数\"#{e}\"格式错误,请使用格式如:\"--long\"或\"-s\"") if (e =~ /---/) == 0 # 检查是否是带'--'或'-'的参数 if (e =~ /-/) == 0 # 回收缓存 raw_opts.push(temp) if temp.length != 0 # 清空临时缓存 temp = [] # 如果是合并的短指令,如'-al = -a + -l',则分拆后直接装入raw_opts数组 # 因为只有不需要传入值的短参数才能合并,因此不利用临时缓存读取后续参数值 if e.length > 2 && (e =~ /--/).nil? && !e.include?('=') e.split('')[1..-1].each { |s| raw_opts.push(["-#{s}"]) } next end # 处理带‘=’的传值参数 loc = (e =~ /=/) if loc temp.unshift(e[(loc + 1)..-1]) temp.unshift(e[0..loc - 1]) elsif e.length != 0 temp.push(e) end elsif e.length != 0 temp.push(e) end if idx == argv.length - 1 raw_opts.push(temp) end } ARGV.new(cmd, pure_opts, absolute_cmd, raw_opts) end