cocoapods-bb-PodAssistant 0.3.8.0 → 0.3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +19 -1
- data/bin/bb_tools +99 -0
- data/lib/cocoapods-bb-PodAssistant/command.rb +3 -1
- data/lib/cocoapods-bb-PodAssistant/gem_version.rb +1 -1
- data/lib/cocoapods-bb-PodAssistant/helpers/pod_module_helper.rb +14 -2
- data/lib/cocoapods-bb-PodAssistant/helpers/swiftlint_manager_helper.rb +341 -0
- data/lib/cocoapods-bb-PodAssistant/podfile.rb +16 -1
- data/lib/cocoapods-bb-PodAssistant/tools/class_unuse_finder.rb +129 -0
- data/lib/cocoapods-bb-PodAssistant/tools/count_code_line.rb +55 -0
- data/lib/cocoapods-bb-PodAssistant/tools/file_handle.rb +78 -0
- data/lib/cocoapods-bb-PodAssistant/tools/find_unuse_img.rb +132 -0
- data/lib/cocoapods-bb-PodAssistant/tools/get_size.rb +94 -0
- data/lib/cocoapods-bb-PodAssistant/tools/git_sets.rb +42 -0
- data/lib/cocoapods-bb-PodAssistant/tools/link_map.rb +381 -0
- data/lib/cocoapods-bb-PodAssistant/tools/podfile_tiled.rb +98 -0
- data/lib/cocoapods-bb-PodAssistant/tools/string_searcher.rb +129 -0
- data/lib/cocoapods-bb-PodAssistant/tools/temple-commit-msg.dat +141 -0
- data/lib/cocoapods-bb-PodAssistant/tools.rb +10 -0
- data/lib/cocoapods-bb-PodAssistant.rb +2 -0
- metadata +61 -10
@@ -0,0 +1,55 @@
|
|
1
|
+
# 设置默认编码
|
2
|
+
Encoding.default_external = Encoding::UTF_8
|
3
|
+
Encoding.default_internal = Encoding::UTF_8
|
4
|
+
|
5
|
+
require 'find'
|
6
|
+
module BBItools
|
7
|
+
class CodeCouner
|
8
|
+
attr_accessor :file_path, :line_number
|
9
|
+
def initialize(path)
|
10
|
+
@file_path = path
|
11
|
+
@line_number = 0
|
12
|
+
end
|
13
|
+
# 统计行数
|
14
|
+
def calculate_line_number
|
15
|
+
puts "\033[33m正在统计#{@file_path} 代码行数,请稍后...\033[0m"
|
16
|
+
if File.file?(@file_path)
|
17
|
+
File.read(@file_path).each_line do |line|
|
18
|
+
if line.match(/^\/\/|^$/) == nil #去掉单行注释和空行
|
19
|
+
@line_number = @line_number + 1
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
return
|
24
|
+
end
|
25
|
+
if File::directory?(@file_path)
|
26
|
+
Find.find(@file_path) do |file|
|
27
|
+
if File.file?(file) #判断是否是文件
|
28
|
+
#只统计.h/.m/.mm/.cpp/.swift几个文件
|
29
|
+
# if File.extname(file).match(/^.[hm]m?$|.cpp|.swift/)
|
30
|
+
if File.extname(file).match(/\.(h|hpp|m|mm|cpp|swift)$/)
|
31
|
+
File.read(file).each_line do |line|
|
32
|
+
if line.match(/^\/\/|^$/) == nil #去掉单行注释和空行
|
33
|
+
@line_number = @line_number + 1
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
return
|
40
|
+
end
|
41
|
+
puts "\033[31m找不到指定路径的文件或者文件夹,请重新输入路径\033[0m"
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.count_line(args)
|
45
|
+
file = args[0]
|
46
|
+
if file.nil?
|
47
|
+
puts "\033[31m参数异常,请传入一个参数(项目目录/要统计的文件目录/要统计的文件)\033[0m"
|
48
|
+
return
|
49
|
+
end
|
50
|
+
counter = CodeCouner.new(file)
|
51
|
+
counter.calculate_line_number
|
52
|
+
puts "\033[32m统计#{counter.file_path}结束,共#{counter.line_number}行\033[0m"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'find'
|
2
|
+
require 'spreadsheet'
|
3
|
+
module BBItools
|
4
|
+
class FileResult
|
5
|
+
attr_accessor :keyword, :file_path, :file_name
|
6
|
+
def initialize(temp_path,temp_name)
|
7
|
+
@file_path = temp_path
|
8
|
+
@file_name = temp_name
|
9
|
+
end
|
10
|
+
end
|
11
|
+
class FileSearcher
|
12
|
+
# path:搜索的路径,files要搜索的文件,支持数组用逗号隔开即可。支持模糊搜索
|
13
|
+
attr_accessor :path ,:files, :search_result
|
14
|
+
def initialize(temp_path,temp_files)
|
15
|
+
@path = temp_path
|
16
|
+
@files = temp_files
|
17
|
+
@search_result = []
|
18
|
+
end
|
19
|
+
def search
|
20
|
+
puts "\033[32m开始查找...\033[0m"
|
21
|
+
if File::directory?(@path)
|
22
|
+
Find.find(@path) do |file|
|
23
|
+
if File.file?(file)
|
24
|
+
file_name = File.basename(file)
|
25
|
+
if file_name.include?(@files)
|
26
|
+
fr = FileResult.new(file,file_name)
|
27
|
+
@search_result << fr
|
28
|
+
end
|
29
|
+
else
|
30
|
+
# puts "查找#{file}..."
|
31
|
+
end
|
32
|
+
end
|
33
|
+
else
|
34
|
+
puts "\033[31m文件夹有误,请输入文件夹路径作为第一个参数\033[0m"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
# 对外暴露方法
|
38
|
+
def self.searchFile(args)
|
39
|
+
path = args[0]
|
40
|
+
files = args[1]
|
41
|
+
if path.nil? || files.nil?
|
42
|
+
puts "\033[31m参数异常,请传入两个参数,第一个为路径,第二个为要搜索的文件名\033[0m"
|
43
|
+
return
|
44
|
+
end
|
45
|
+
# temp_files = files.split(",")
|
46
|
+
file_searcher = FileSearcher.new(path,files)
|
47
|
+
file_searcher.search
|
48
|
+
if file_searcher.search_result.size == 0
|
49
|
+
puts "\033[32m没有找到符合条件的文件\033[0m"
|
50
|
+
return
|
51
|
+
end
|
52
|
+
# 输出
|
53
|
+
# 输出搜索的内容
|
54
|
+
|
55
|
+
Spreadsheet.client_encoding = 'utf-8'
|
56
|
+
book = Spreadsheet::Workbook.new
|
57
|
+
sheet1 = book.create_worksheet
|
58
|
+
sheet1.row(0)[0] = "序号"
|
59
|
+
sheet1.row(0)[1] = "文件名"
|
60
|
+
sheet1.row(0)[2] = "文件所在路径"
|
61
|
+
|
62
|
+
|
63
|
+
puts "\033[32m找到共#{file_searcher.search_result.size}个文件结果如下;\033[0m"
|
64
|
+
file_searcher.search_result.each_with_index {|item,i|
|
65
|
+
puts item.file_name
|
66
|
+
sheet1.row(i+1)[0] = i + 1
|
67
|
+
sheet1.row(i+1)[1] = item.file_name
|
68
|
+
sheet1.row(i+1)[2] = item.file_path
|
69
|
+
sheet1.row(i+1).height = 20
|
70
|
+
}
|
71
|
+
sheet1.column(0).width = 4
|
72
|
+
sheet1.column(1).width = 45
|
73
|
+
sheet1.column(2).width = 100
|
74
|
+
book.write "#{File.dirname(path)}/search_#{files}_result.xls"
|
75
|
+
puts "\033[32m查找成功,共#{file_searcher.search_result.size}个文件,内容已经保存到#{File.dirname(path)}/search_#{files}_result.xls,请点击查看\033[0m"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'find'
|
2
|
+
require 'spreadsheet'
|
3
|
+
module BBItools
|
4
|
+
class FindResult
|
5
|
+
attr_accessor :name , :path
|
6
|
+
def initialize(name,path)
|
7
|
+
@name = name
|
8
|
+
@path = path
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
# --------------------------------------------
|
13
|
+
class ImgFinder
|
14
|
+
#
|
15
|
+
attr_accessor :image_count, :images, :unuse_images,:find_path
|
16
|
+
attr_accessor :search_files
|
17
|
+
def initialize
|
18
|
+
@image_count = 0
|
19
|
+
@images = []
|
20
|
+
@search_files = []
|
21
|
+
end
|
22
|
+
# 得到所有图片名称字符
|
23
|
+
def get_img_name_strs
|
24
|
+
result_arr = []
|
25
|
+
@images.each {|item|
|
26
|
+
item_name = Image.get_image_name(File.basename(item.name, ".*"))
|
27
|
+
result_arr << item_name
|
28
|
+
}
|
29
|
+
return result_arr
|
30
|
+
end
|
31
|
+
def get_image_path(image)
|
32
|
+
@images.each {|item|
|
33
|
+
if item.name.eql?(image)
|
34
|
+
return item.path
|
35
|
+
end
|
36
|
+
}
|
37
|
+
end
|
38
|
+
# 查找
|
39
|
+
def self.find(temp_find_dir)
|
40
|
+
imgFinder = ImgFinder.new
|
41
|
+
imgFinder.find_path = temp_find_dir
|
42
|
+
# 第一步:找到该文件夹下所有的图片文件
|
43
|
+
Find.find(temp_find_dir) do |filename|
|
44
|
+
if File.file?(filename) #如果是文件,则从文件中查找,忽略文件夹
|
45
|
+
if Image.is_image_format(File.extname(filename))
|
46
|
+
# p File.basename(filename)
|
47
|
+
# exit
|
48
|
+
imgFinder.image_count = imgFinder.image_count + 1
|
49
|
+
imageResult = FindResult.new(Image.get_image_name(File.basename(filename,".*")),filename)
|
50
|
+
imgFinder.images << imageResult
|
51
|
+
elsif File.extname(filename).eql?(".m") || File.extname(filename).eql?(".swift")
|
52
|
+
imgFinder.search_files << filename
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
if imgFinder.images.size == 0
|
57
|
+
puts "\033[32m查找成功,未发现图片\033[0m"
|
58
|
+
return
|
59
|
+
else
|
60
|
+
puts "\033[32m查找成功,共发现图片#{imgFinder.images.size}张\033[0m"
|
61
|
+
end
|
62
|
+
# 第二步:找到图片是否使用
|
63
|
+
imags = imgFinder.get_img_name_strs.uniq #要查找的图片名称数组
|
64
|
+
|
65
|
+
puts "\033[32m需要查找的图片有#{imags.size}张\033[0m"
|
66
|
+
# imgFinder.search_files #要查找的文件
|
67
|
+
imgFinder.search_files.each {|file|
|
68
|
+
File.read(file).each_line do |line|
|
69
|
+
haveStr = StringHandle.containsStr(line,imags)
|
70
|
+
if haveStr != -1
|
71
|
+
puts "#{imags[haveStr]}在使用...,剩余查找项#{imags.size-1}个"
|
72
|
+
imags.delete_at(haveStr)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
}
|
76
|
+
puts "\033[32m无用图片#{imags.size}张,图片名称如下:\033[0m"
|
77
|
+
unuse_total_size = 0
|
78
|
+
|
79
|
+
Spreadsheet.client_encoding = 'utf-8'
|
80
|
+
book = Spreadsheet::Workbook.new
|
81
|
+
sheet1 = book.create_worksheet
|
82
|
+
sheet1.row(0)[0] = "文件名"
|
83
|
+
sheet1.row(0)[1] = "文件路径"
|
84
|
+
sheet1.row(0)[2] = "文件大小(B)"
|
85
|
+
imags.each_with_index {|item,idx|
|
86
|
+
sheet1.row(idx+1)[0] = item
|
87
|
+
path = imgFinder.get_image_path(item)
|
88
|
+
sheet1.row(idx+1)[1] = path
|
89
|
+
unuse_total_size = unuse_total_size + File.size(path)
|
90
|
+
sheet1.row(idx+1)[2] = File.size(path)
|
91
|
+
puts item
|
92
|
+
}
|
93
|
+
book.write "#{imgFinder.find_path}/search_result.xls"
|
94
|
+
puts "\033[32m文件已经保存到#{imgFinder.find_path}/search_result.xls,无用图片大小:#{unuse_total_size}B\033[0m"
|
95
|
+
puts "\033[32m内容仅供参考,具体还要自己通过结果查看一下\033[0m"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
# 字符串操作类
|
99
|
+
class StringHandle
|
100
|
+
# originStr中是否包含targetStrs中的内容
|
101
|
+
def self.containsStr(originStr,targetStrs)
|
102
|
+
targetStrs.each_with_index {|item,idx|
|
103
|
+
if originStr.include?(item)
|
104
|
+
return idx
|
105
|
+
end
|
106
|
+
}
|
107
|
+
return -1
|
108
|
+
end
|
109
|
+
end
|
110
|
+
# ----------------------------
|
111
|
+
class Image
|
112
|
+
|
113
|
+
# 是否是图片格式,这里只判断了jpg、png和gif
|
114
|
+
def self.is_image_format(temp_ext_name)
|
115
|
+
if ['.jpg','.png','.gif'].include?(temp_ext_name)
|
116
|
+
return true
|
117
|
+
else
|
118
|
+
return false
|
119
|
+
end
|
120
|
+
end
|
121
|
+
def self.get_image_name(file)
|
122
|
+
return file.gsub(/@2x|@3x/,"")
|
123
|
+
end
|
124
|
+
end
|
125
|
+
# class ObjectiveC
|
126
|
+
# def self.is_h_file(temp_ext_name)
|
127
|
+
# if ['.h']
|
128
|
+
|
129
|
+
# end
|
130
|
+
# end
|
131
|
+
# end
|
132
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'find'
|
2
|
+
module BBItools
|
3
|
+
class Memory
|
4
|
+
attr_accessor :pro
|
5
|
+
# 分发吹
|
6
|
+
def hand_cal_size(file,prop)
|
7
|
+
if prop.nil?
|
8
|
+
@pro = 1024
|
9
|
+
elsif prop == 0
|
10
|
+
@pro = 1024
|
11
|
+
else
|
12
|
+
@pro = prop
|
13
|
+
end
|
14
|
+
handle_method = ''
|
15
|
+
if File.file?(file)
|
16
|
+
puts "\033[32m开始计算文件的大小...\033[0m"
|
17
|
+
handle_method = 'cal_file'
|
18
|
+
elsif File::directory?(file)
|
19
|
+
handle_method = 'cal_folder'
|
20
|
+
puts "\033[32m开始计算文件夹的大小...\033[0m"
|
21
|
+
else
|
22
|
+
puts "\033[31m参数异常,请确保传入的第一个参数是文件路径或者文件夹路径\033[0m"
|
23
|
+
return
|
24
|
+
end
|
25
|
+
self.send(handle_method,file)
|
26
|
+
end
|
27
|
+
# 计算单个文件
|
28
|
+
def cal_file(file)
|
29
|
+
puts "\033[32m文件的大小为:#{get_show_size(File.size(file))}.\033[0m"
|
30
|
+
end
|
31
|
+
# 计算整个文件夹
|
32
|
+
def cal_folder(folder)
|
33
|
+
print "\033[32m请输入要查找文件后缀\033[0m(例如想文件夹中图片大小则输入:{png,jpg,gif},不输入则默认计算文件夹下所有文件大小之和):"
|
34
|
+
file_exts_string = STDIN.gets
|
35
|
+
file_exts_string.chomp! #过滤换行符
|
36
|
+
if file_exts_string.size == 0
|
37
|
+
file_exts = []
|
38
|
+
else
|
39
|
+
file_exts = file_exts_string.split(",")
|
40
|
+
end
|
41
|
+
sum = 0
|
42
|
+
file_count = 0
|
43
|
+
total_count = 0
|
44
|
+
total_size = 0
|
45
|
+
file_size = 0
|
46
|
+
Find.find(folder) do |filename|
|
47
|
+
if File.file?(filename)
|
48
|
+
total_count = total_count + 1
|
49
|
+
total_size = total_size + File.size(filename)
|
50
|
+
if file_exts.size == 0 #说明计算所有文件
|
51
|
+
sum = sum + File.size(filename)
|
52
|
+
file_count = file_count + 1
|
53
|
+
elsif file_exts.include?(File.extname(filename).delete(".")) #查找指定后缀的文件
|
54
|
+
sum = sum + File.size(filename)
|
55
|
+
file_count = file_count + 1
|
56
|
+
file_size = file_size + File.size(filename)
|
57
|
+
else
|
58
|
+
#不做任何处理
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
if file_exts.size == 0
|
63
|
+
puts "\033[32m文件夹中共#{total_count}个文件,共#{get_show_size(total_size)}(#{total_size})\033[0m"
|
64
|
+
else
|
65
|
+
puts "\033[32m文件夹中共#{total_count}个文件,共#{get_show_size(total_size)}(#{total_size});找到后缀为(#{file_exts_string})的文件#{file_count}个,共#{get_show_size(file_size)}(#{file_size}).\033[0m"
|
66
|
+
end
|
67
|
+
|
68
|
+
# puts `du -b #{folder} | awk '{print $1}'`.to_i
|
69
|
+
end
|
70
|
+
# get_show_size
|
71
|
+
def get_show_size(size)
|
72
|
+
if size > @pro * @pro * @pro
|
73
|
+
return format("%.2f",(size.to_f/(@pro*@pro*@pro))) + "GB"
|
74
|
+
elsif size > @pro * @pro
|
75
|
+
return format("%.2f",(size.to_f/(@pro*@pro))) + "MB"
|
76
|
+
elsif size > @pro
|
77
|
+
return format("%.2f",(size.to_f/@pro)) + "KB"
|
78
|
+
else
|
79
|
+
return size.to_s + "B"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
# 对外暴露方法
|
83
|
+
def self.sizeFor(proport)
|
84
|
+
file = proport[0]
|
85
|
+
pro = proport[1].to_i
|
86
|
+
if file.nil?
|
87
|
+
puts "\033[31m参数异常,请传入一个参数\033[0m"
|
88
|
+
return
|
89
|
+
end
|
90
|
+
memory = Memory.new
|
91
|
+
memory.hand_cal_size(file,pro)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'colored2'
|
2
|
+
|
3
|
+
module BBItools
|
4
|
+
class GitSets
|
5
|
+
def self.commit_msg_init(args)
|
6
|
+
# folder_path = args[0]
|
7
|
+
# if folder_path.nil?
|
8
|
+
# puts "传入的参数不能为空".red
|
9
|
+
# return
|
10
|
+
# end
|
11
|
+
# if !File::directory?(folder_path)
|
12
|
+
# puts "参数不是文件夹".red
|
13
|
+
# return
|
14
|
+
# end
|
15
|
+
puts "开始配置CommitLint,用于校验commit message的工具...".yellow
|
16
|
+
system('touch ./.git/commit_msg')
|
17
|
+
system('git config commit.template "`pwd`/.git/commit_msg"')
|
18
|
+
a = <<-EOF
|
19
|
+
#!/bin/sh
|
20
|
+
echo "$(git symbolic-ref --short HEAD) subject" > `pwd`/.git/commit_msg
|
21
|
+
echo "" >> `pwd`/.git/commit_msg
|
22
|
+
echo "Cause:" >> `pwd`/.git/commit_msg
|
23
|
+
echo "Solution:" >> `pwd`/.git/commit_msg
|
24
|
+
echo "Releated Doc Address:" >> `pwd`/.git/commit_msg
|
25
|
+
echo '''\n#TYPE类型\n#新功能 feature/feat\n#bug修复 bugfix/fixbug/fix\n#性能优化 perf\n#代码重构 refactor/review\n#线上修复 hotfix\n#发布版本 release\n#文档变更 docs\n#更新 update\n#新增 add\n#标签 tag\n#代码回退 revert\n#更新lock lock''' >> `pwd`/.git/commit_msg
|
26
|
+
EOF
|
27
|
+
File.open('.git/hooks/pre-commit', 'w') do |f|
|
28
|
+
f.puts a
|
29
|
+
end
|
30
|
+
puts "写入CommitLint规则"
|
31
|
+
logo_path = File.join( File.dirname(__FILE__), 'temple-commit-msg.dat' )
|
32
|
+
content = File.read( logo_path )
|
33
|
+
File.open('.git/hooks/commit-msg', 'w') do |f|
|
34
|
+
f.puts content
|
35
|
+
end
|
36
|
+
puts "更新权限"
|
37
|
+
system('chmod a+x .git/hooks/pre-commit')
|
38
|
+
system('chmod a+x .git/hooks/commit-msg')
|
39
|
+
puts "配置成功,后续请直接使用git commit ,不要加 -m".green
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|