class MGit::Delete

@!scope [command] delete 删除某个仓库的`所有`文件,包括工作区、暂存区和版本库

eg: mgit delete subA

Public Class Methods

description() click to toggle source
# File lib/m-git/command/delete.rb, line 89
def self.description
  "删除指定单个或多个仓库(包含被管理的.git文件和工程文件以及跟该.git关联的所有缓存)。"
end
usage() click to toggle source
# File lib/m-git/command/delete.rb, line 93
def self.usage
  "mgit delete <repo1> <repo2>... [-h]"
end

Public Instance Methods

enable_short_basic_option() click to toggle source
# File lib/m-git/command/delete.rb, line 85
def enable_short_basic_option
  true
end
execute(argv) click to toggle source

# File lib/m-git/command/delete.rb, line 28
def execute(argv)
  delete_repo_names = parse_repo_name(argv)
  include_central = Workspace.config.light_repos.find do |e|
    delete_repo_names.include?(e.name.downcase) && e.is_config_repo
  end
  Foundation.help!("禁止删除配置仓库=> #{include_central.name}") if include_central

  Output.puts_start_cmd
  delete_light_repos = Workspace.config.light_repos.select { |e| delete_repo_names.include?(e.name.downcase) }
  extra_repo_names = delete_repo_names - delete_light_repos.map { |e| e.name.downcase}
  if delete_light_repos.length > 0
    error_repos = {}
    delete_light_repos.each { |light_repo|
      begin
        git_dir = light_repo.git_store_dir(Workspace.root)
        repo_dir = light_repo.abs_dest(Workspace.root)
        if !Dir.exist?(git_dir) && !Dir.exist?(repo_dir)
          Output.puts_remind_message("#{light_repo.name}本地不存在,已跳过。")
        end

        # 删除git实体
        if Dir.exist?(git_dir)
          Output.puts_processing_message("删除仓库#{light_repo.name}的.git实体...")
          FileUtils.remove_dir(git_dir, true)
        end

        # 删除工作区文件
        if Dir.exist?(repo_dir)
          Output.puts_processing_message("删除仓库#{light_repo.name}工作区文件...")
          FileUtils.remove_dir(repo_dir, true)
        end
      rescue => e
        error_repos[light_repo.name] = e.message
      end
    }
    if error_repos.length > 0
      Workspace.show_error(error_repos)
    else
      Output.puts_succeed_cmd(argv.absolute_cmd)
    end
  end

  if extra_repo_names.length > 0
    Output.puts_fail_block(extra_repo_names, "以上仓库配置表中未定义,请重试!")
  end
end
parse_repo_name(argv) click to toggle source
# File lib/m-git/command/delete.rb, line 75
def parse_repo_name(argv)
  return if argv.git_opts.nil?

  repos = argv.git_opts.split(' ')
  extra_opts = repos.select { |e| argv.is_option?(e) }
  Foundation.help!("输入非法参数:#{extra_opts.join(',')}。请通过\"mgit #{argv.cmd} --help\"查看用法。") if extra_opts.length > 0
  Foundation.help!("未输入查询仓库名!请使用这种形式查询:mgit info repo1 repo2 ...") if repos.length == 0
  repos.map { |e| e.downcase }
end
post_exec() click to toggle source
# File lib/m-git/command/delete.rb, line 21
def post_exec
  # 打点结束
  duration = MGit::DurationRecorder.end
  MGit::Loger.info("~~~ #{@argv.absolute_cmd}, 耗时:#{duration} s ~~~")
end
pre_exec() click to toggle source

— 覆写前后hook,不需要预设操作 —

# File lib/m-git/command/delete.rb, line 12
def pre_exec
  MGit::DurationRecorder.start
  Workspace.setup_multi_repo_root
  # 配置log
  MGit::Loger.config(Workspace.root)
  MGit::Loger.info("~~~ #{@argv.absolute_cmd} ~~~")
  Workspace.setup_config
end