Class: MGit::MGitConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/m-git/foundation/mgit_config.rb

Constant Summary collapse

CONFIG_KEY =
{
    :managegit  => {
        :info     => '是否将.git实体托管给MGit,托管后仓库内的.git目录是软链 (true/false)',
        :type     => 'Boolean',
        :default  => true
    },
    :maxconcurrentcount => {
        :info     => 'MGit操作的最大并发数? (Integer)',
        :type     => 'Integer',
        :default  => MGit::Utils.logical_cpu_num
    },
    :syncworkspace => {
        :info     => '是否按照配置表同步工作区? (true/false)',
        :type     => 'Boolean',
        :default  => true
    },
    :savecache => {
        :info     => '同步工作区时回收的仓库是否保留到缓存中? (true/false)',
        :type     => 'Boolean',
        :default  => false
    },
    :logenable => {
        :info     => '是否开启日志打印,操作日志会收集到.mgit/log目录下? (true/false)',
        :type     => 'Boolean',
        :default  => true
    },
    :loglevel => {
        :info     => '日志的打印级别, DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3, FATAL = 4',
        :type     => 'Integer',
        :default  => 1
    }
}

Class Method Summary collapse

Class Method Details

.dump_config(root) ⇒ Object

列出所有配置

Parameters:

  • root (String)

    工程根目录



120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/m-git/foundation/mgit_config.rb', line 120

def dump_config(root)
  query(root) { |config|
    CONFIG_KEY.each_with_index { |(key, value_dict), index|
      line = "#{Output.blue_message("[#{value_dict[:info]}]")}\n#{key.to_s}: "
      set_value = config[key.to_s]
      if !set_value.nil?
        line += "#{set_value}\n\n"
      else
        line += "#{value_dict[:default]}\n\n"
      end
      puts line
    }
  }
end

.query(root) ⇒ Object

查询配置

Parameters:

  • root (String)

    工程根目录

Raises:



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/m-git/foundation/mgit_config.rb', line 49

def query(root)
  config, error = __load_file(root)
  if !error.nil?
    raise Error.new(error)
    return
  elsif block_given?
    # 如果文件存在但无内容,此时读取到的数据类型是FalseClass,此处统一规范化
    config = {} if !config.is_a?(Hash)
    yield(config)
  end
end

.query_with_key(root, key_symbol) ⇒ Object

Description of #query_with_key

Parameters:

  • root (String)

    工程根目录

  • key_symbol (Symbol)

    符号key值

Returns:

  • (Object)

    配置值

Raises:



70
71
72
73
74
75
76
77
78
79
80
# File 'lib/m-git/foundation/mgit_config.rb', line 70

def query_with_key(root, key_symbol)
  query(root) { |config|
    if !config[key_symbol.to_s].nil?
      return config[key_symbol.to_s]
    elsif !CONFIG_KEY[key_symbol].nil?
      return CONFIG_KEY[key_symbol][:default]
    else
      return nil
    end
  }
end

.to_suitable_value_for_key(root, key, value) ⇒ Object

验证一个value的值是否符合key的类型

Parameters:

  • root (String)

    工程根目录

  • key (String)

    字符串key值

  • value (String)

    字符串格式的值

Returns:

  • (Object)

    key值对应的合法类型value值



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/m-git/foundation/mgit_config.rb', line 145

def to_suitable_value_for_key(root, key, value)
  return unless CONFIG_KEY.keys.include?(key.to_sym)
  return nil if !value.is_a?(String)

  key_dict = CONFIG_KEY[key.to_sym]
  set_value = nil

  # 是否是数字
  if key_dict[:type] == 'Integer' && value.to_i.to_s == value
    set_value = value.to_i

    # 是否是true
  elsif key_dict[:type] == 'Boolean' && value.to_s.downcase == 'true'
    set_value = true

    # 是否是false
  elsif key_dict[:type] == 'Boolean' && value.to_s.downcase == 'false'
    set_value = false

    # 是否是其他字符串
  elsif key_dict[:type] == 'String' && value.is_a?(String)
    set_value = value
  end

  set_value
end

.update(root) {|config| ... } ⇒ Object

更新配置

Parameters:

  • root (String)

    工程根目录

Yields:

  • (config)

Raises:



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/m-git/foundation/mgit_config.rb', line 88

def update(root)
  # 加载配置
  config, error = __load_file(root)
  if !error.nil?
    raise Error.new(error)
    return
  end

  # 如果文件存在但无内容,此时读取到的数据类型是FalseClass,此处统一规范化
  config = {} if !config.is_a?(Hash)

  # 更新
  yield(config) if block_given?

  # 更新完后校验格式
  if !config.is_a?(Hash)
    raise Error.new("工具配置更新数据格式错误,更新失败!")
    return
  end

  # 写回配置
  error = write_to_file(root, config)
  if !error.nil?
    raise Error.new(error)
    return
  end
end