module Pod class Command class JxedtCommand < Command class ModifyDir < JxedtCommand self.summary = '修改文件目录的真实路径,并在原位置创建一个目录的软链接,为二进制调试提供便利。' self.description = <<-DESC 可以把很多台机器上的工程目录统一放置到一个相同目录,这样可以确保所有的机器的工程目录都是相同的。\n 编译打包的文件路径也是相同的,然后就可以使用二进制调试的功能了。\n 这个统一的目录是`/Users/cocoapods-jxedt/` DESC self.command = 'modifydir' self.arguments = [ CLAide::Argument.new('DIRECTORY_PATH', true) ] def self.options [ ['--name', '统一路径下的工程目录名称'] ] end def initialize(argv) @dir_path = argv.shift_argument @name = argv.option('name') super end def validate! super help! '没有传入操作目录!!!' if @dir_path.nil? # 获取完整路径 @dir_path = File.expand_path(@dir_path) help! '操作目录不存在!!!' unless File.exist?(@dir_path) help! '传入的地址不是一个目录!!!' unless File.directory?(@dir_path) help! '操作目录已经是一个软链接!!!' if File.ftype(@dir_path) == 'link' help! '操作目录已经在指定目录下!!!' if @dir_path =~ /^#{user_path}/ help! '当前目录不允许操作,操作路径最少要3层目录!!!' unless @dir_path.split('/').reject { |path| path.empty? }.count > 2 end def run op_dir_path = Pathname.new(@dir_path) # 获取target name @name = op_dir_path.basename if @name.nil? || @name.empty? # create user directory `sudo mkdir #{user_path} && sudo chmod -R 777 #{user_path}` unless user_path.exist? # 路径是否存在 target_path = user_path + @name # target_path.rmtree if target_path.exist? help! '目录已存在!!!' if target_path.exist? # 移动目录 FileUtils.mv(@dir_path, target_path) # 创建软链接 FileUtils.ln_s(target_path, op_dir_path) end def user_path @user_path ||= Pathname.new('/Users/cocoapods-jxedt/') end end end end end