lib/cocoapods-jxedt/command/header/header.rb in cocoapods-jxedt-0.0.9 vs lib/cocoapods-jxedt/command/header/header.rb in cocoapods-jxedt-0.0.10
- old
+ new
@@ -1,12 +1,12 @@
module Pod
class Command
class JxedtCommand < Command
class Header < JxedtCommand
- self.summary = 'header fix'
+ self.summary = '修改头文件引用问题'
self.description = <<-DESC
- 修改头文件引用问题。\n
+ 修改头文件引用问题\n
例如修改#import "AFNetworking.h"或#import <AFNetworking.h>这种头文件引用方式为#import <AFNetworking/AFNetworking.h>\n
使用方式:\n
到Podfile文件所在目录执行以下命令\n
1. 修改某个组件的头文件引用\n
pod jxedt headerfix --name=PodA --dir=PodA RealPath --write\n
@@ -21,18 +21,22 @@
['--name', '需要修改header引用的pod name。没有该参数则会认为修改的是工程中的文件'],
['--dir', '需要修改的文件夹路径,一般情况下为pod组件的真实目录。如果修改的pod组件是development pods,也可以不传该参数。'],
['--write', '修改命中的头文件引用,不写入则直接输出需要修改的文件和修改内容。默认false'],
['--suffix', '处理的文件后缀,默认处理\'h,m,mm,pch\'后缀的文件'],
['--header-regulation', 'header name的正则,默认为\'[\w+-]*\.h\',如果不满足也可以自定义'],
+ ['--verbose', '在屏幕上输出修改文件的详情'],
+ ['--log-path', '需要修改文件内容导出路径']
]
end
def initialize(argv)
@pod_name = argv.option('name')
@dir = argv.option('dir')
@suffix = argv.option('suffix', 'h,m,mm,pch')
@force_write = argv.flag?('write', false)
@header_regulation = argv.option('header-regulation')
+ @verbose_flag = argv.flag?('verbose', false)
+ @log_path = argv.option('log-path')
super
end
def validate!
super
@@ -63,11 +67,11 @@
hash.update(basename.to_s => target.product_module_name)
}
}
# 遍历需要处理的文件
- record = []
+ files, failed, record = [], [], []
process_target_files.each {|file_path|
changed = false
lines = File.readlines(file_path)
# 获取命中的行
File.foreach(file_path).with_index {|line, num|
@@ -75,20 +79,40 @@
next unless matched
header_name = line.match(/(?<=")#{header_name_regulation}(?=")/) || line.match(/(?<=<)#{header_name_regulation}(?=>)/)
next unless public_header_mapping.include?("#{header_name}")
+ changed = true # 文件需要修改
project_module_name = public_header_mapping["#{header_name}"]
replace_line = "#import " << "<#{project_module_name}/#{header_name}>\n"
lines[num] = replace_line
- changed = true
record << "#{file_path} 第#{num}行,#{line} => #{replace_line}"
}
- File.open(file_path, 'w') { |f| f.write(lines.join) } if changed && @force_write
+ files << file_path if changed
+ begin
+ File.open(file_path, 'w') { |f| f.write(lines.join) } if changed && @force_write
+ rescue
+ failed << file_path
+ ensure
+ help! "因权限问题文件修改失败:\n#{file_path}" if failed.size > 0
+ end
}
- puts "需要修改的地方共有:#{record.size} 处"
- puts JSON.pretty_generate(record) if record.size > 0
+ puts "需要修改文件共有:#{files.size} 个,需要修改的头文件的地方共有:#{record.size} 处"
+ puts "已修改完成" if files.size > 0 && @force_write
+
+ if files.size > 0
+ logs = <<~LOGS
+ 需要修改的文件:
+ #{JSON.pretty_generate(files)}
+
+ 文件修改详情:
+ #{JSON.pretty_generate(record)}
+ LOGS
+ logs.gsub!('\\"', '"').gsub!('\\n', '') # 去除转义字符
+ puts logs if @verbose_flag
+ File.open(log_file_path, 'w') { |file| file.write("#{logs}") } unless log_file_path.nil?
+ end
end
def installer_for_config
config = Pod::Config.instance
return if config.podfile.nil?
@@ -148,9 +172,16 @@
dependent_targets = @installer.pod_targets.flat_map {|target|
recursion_dependent_targets(target) if target.pod_name.to_s == @pod_name
}.reject(&:nil?).uniq
end
dependent_targets
+ end
+
+ def log_file_path
+ log_path = @log_path
+ log_path << "/headerfix_output.txt" if log_path && File.directory?(log_path)
+ return if log_path && (!File.exist?(File.dirname(log_path)))
+ log_path
end
end
end
end
end
\ No newline at end of file