Method: MGit::Workspace.setup_config

Defined in:
lib/m-git/workspace.rb

.setup_config(strict_mode: true) ⇒ Object

解析配置文件(完成后可使用@config获取配置对象)

Parameters:

  • strict_mode (Boolean) (defaults to: true)

    default: true 严格模式下,出错直接终止,非严格模式下,出错则抛出异常



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/m-git/workspace.rb', line 40

def setup_config(strict_mode:true)
  # 记录旧config哈希
  hash_sha1 = config.hash_sha1 if !config.nil?

  # 调用manifest_hook
  HooksManager.execute_manifest_hook(strict_mode:strict_mode)

  # 解析config
  @config = Manifest.parse(source_config_dir)

  # 是否更新了配置表
  did_update = hash_sha1.nil? || hash_sha1 != config.hash_sha1

  # --- 同步工作区 ---
  begin
    # 从配置中读取
    should_sync_workspace = MGitConfig.query_with_key(root, :syncworkspace)
    if should_sync_workspace
      # 同步工作区仓库(缓存或弹出)
      Utils.sync_workspace(root, config)
    else
      # 若禁止同步的话,则将缓存弹出(若有的话)
      config.light_repos.each { |light_repo|
        if !Dir.exist?(light_repo.abs_dest(root))
          pop(root, light_repo)
        end
      }
    end
  rescue Error => _
    Output.puts_fail_message("MGit配置读取失败,跳过工作区同步!")
  end

  # ------------------

  # --- 同步.git实体 ---
  begin
    # 从配置中读取
    manage_git = MGitConfig.query_with_key(root, :managegit)
    if !manage_git
      Utils.pop_git_entity(root, config)
    else
      # 当前逻辑是如果配置了托管.git的话,此时不压入.git,而是只把新下载仓库的.git压入
      # 后续如果有需要的话可以打开下面这个注释,这样在每次执行mgit指令时都会根据配置压入.git,起到同步的作用
      # Workspace.push_git_entity(@root, @config)
    end
  rescue Error => _
    Output.puts_fail_message("MGit配置读取失败,跳过.git同步!")
  end
  # ------------------
  did_update
end