kookeeper 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE.md +20 -0
  3. data/.gitignore +50 -0
  4. data/.travis.yml +19 -0
  5. data/CODE_OF_CONDUCT.md +46 -0
  6. data/CONTRIBUTING.md +70 -0
  7. data/Gemfile +10 -0
  8. data/Gemfile.lock +125 -0
  9. data/LICENSE +21 -0
  10. data/README.md +113 -0
  11. data/Rakefile +2 -0
  12. data/big_keeper.gemspec +49 -0
  13. data/bin/big +14 -0
  14. data/bin/setup +8 -0
  15. data/docs/en-US/FEATURE.md +0 -0
  16. data/docs/en-US/README.md +54 -0
  17. data/docs/zh-CN/BIGKEEPER_FILE.md +84 -0
  18. data/docs/zh-CN/FEATURE&HOTFIX.md +88 -0
  19. data/docs/zh-CN/IMAGE.md +0 -0
  20. data/docs/zh-CN/PODFILE.md +43 -0
  21. data/docs/zh-CN/README.md +113 -0
  22. data/docs/zh-CN/RECOMMEND.md +22 -0
  23. data/docs/zh-CN/RELEASE.md +60 -0
  24. data/docs/zh-CN/SPEC.md +39 -0
  25. data/lib/big_keeper/command/client.rb +50 -0
  26. data/lib/big_keeper/command/feature&hotfix/delete.rb +40 -0
  27. data/lib/big_keeper/command/feature&hotfix/finish.rb +54 -0
  28. data/lib/big_keeper/command/feature&hotfix/list.rb +63 -0
  29. data/lib/big_keeper/command/feature&hotfix/publish.rb +56 -0
  30. data/lib/big_keeper/command/feature&hotfix/pull.rb +26 -0
  31. data/lib/big_keeper/command/feature&hotfix/push.rb +27 -0
  32. data/lib/big_keeper/command/feature&hotfix/rebase.rb +32 -0
  33. data/lib/big_keeper/command/feature&hotfix/start.rb +74 -0
  34. data/lib/big_keeper/command/feature&hotfix/switch.rb +46 -0
  35. data/lib/big_keeper/command/feature&hotfix/update.rb +66 -0
  36. data/lib/big_keeper/command/feature&hotfix.rb +167 -0
  37. data/lib/big_keeper/command/image/image.rb +0 -0
  38. data/lib/big_keeper/command/image.rb +28 -0
  39. data/lib/big_keeper/command/init.rb +36 -0
  40. data/lib/big_keeper/command/pod/podfile.rb +72 -0
  41. data/lib/big_keeper/command/pod.rb +55 -0
  42. data/lib/big_keeper/command/release/finish.rb +36 -0
  43. data/lib/big_keeper/command/release/home.rb +92 -0
  44. data/lib/big_keeper/command/release/module.rb +65 -0
  45. data/lib/big_keeper/command/release/publish.rb +4 -0
  46. data/lib/big_keeper/command/release/start.rb +78 -0
  47. data/lib/big_keeper/command/release.rb +100 -0
  48. data/lib/big_keeper/command/spec/add.rb +9 -0
  49. data/lib/big_keeper/command/spec/analyze.rb +88 -0
  50. data/lib/big_keeper/command/spec/delete.rb +9 -0
  51. data/lib/big_keeper/command/spec/list.rb +19 -0
  52. data/lib/big_keeper/command/spec/search.rb +9 -0
  53. data/lib/big_keeper/command/spec/sync.rb +12 -0
  54. data/lib/big_keeper/command/spec.rb +78 -0
  55. data/lib/big_keeper/dependency/dep_gradle_operator.rb +74 -0
  56. data/lib/big_keeper/dependency/dep_operator.rb +48 -0
  57. data/lib/big_keeper/dependency/dep_pod_operator.rb +130 -0
  58. data/lib/big_keeper/dependency/dep_service.rb +14 -0
  59. data/lib/big_keeper/dependency/dep_type.rb +33 -0
  60. data/lib/big_keeper/model/gitflow_type.rb +43 -0
  61. data/lib/big_keeper/model/library_model.rb +116 -0
  62. data/lib/big_keeper/model/operate_type.rb +30 -0
  63. data/lib/big_keeper/model/podfile_model.rb +33 -0
  64. data/lib/big_keeper/service/git_service.rb +211 -0
  65. data/lib/big_keeper/service/module_service.rb +224 -0
  66. data/lib/big_keeper/service/stash_service.rb +45 -0
  67. data/lib/big_keeper/util/bigkeeper_parser.rb +260 -0
  68. data/lib/big_keeper/util/cache_operator.rb +118 -0
  69. data/lib/big_keeper/util/code_operator.rb +37 -0
  70. data/lib/big_keeper/util/command_line_util.rb +9 -0
  71. data/lib/big_keeper/util/file_operator.rb +33 -0
  72. data/lib/big_keeper/util/git_operator.rb +242 -0
  73. data/lib/big_keeper/util/gitflow_operator.rb +51 -0
  74. data/lib/big_keeper/util/gradle_content_generator.rb +26 -0
  75. data/lib/big_keeper/util/gradle_file_operator.rb +339 -0
  76. data/lib/big_keeper/util/gradle_module_operator.rb +70 -0
  77. data/lib/big_keeper/util/info_plist_operator.rb +46 -0
  78. data/lib/big_keeper/util/leancloud_logger.rb +84 -0
  79. data/lib/big_keeper/util/list_generator.rb +101 -0
  80. data/lib/big_keeper/util/lockfile_parser.rb +143 -0
  81. data/lib/big_keeper/util/logger.rb +47 -0
  82. data/lib/big_keeper/util/pod_operator.rb +70 -0
  83. data/lib/big_keeper/util/podfile_detector.rb +102 -0
  84. data/lib/big_keeper/util/podfile_module.rb +63 -0
  85. data/lib/big_keeper/util/podfile_operator.rb +125 -0
  86. data/lib/big_keeper/util/verify_operator.rb +17 -0
  87. data/lib/big_keeper/util/version_config_operator.rb +29 -0
  88. data/lib/big_keeper/util/xcode_operator.rb +15 -0
  89. data/lib/big_keeper/version.rb +3 -0
  90. data/lib/big_keeper.rb +81 -0
  91. data/resources/banner.png +0 -0
  92. data/resources/command.png +0 -0
  93. data/resources/keynote/big-keeper-readme-analyze.key +0 -0
  94. data/resources/keynote/big-keeper-readme-example.key +0 -0
  95. data/resources/keynote/big-keeper-readme-feature.key +0 -0
  96. data/resources/keynote/big-keeper-readme-release.key +0 -0
  97. data/resources/readme/big-keeper-readme.001.png +0 -0
  98. data/resources/template/Bigkeeper +23 -0
  99. metadata +354 -0
@@ -0,0 +1,101 @@
1
+ require 'big_keeper/util/logger'
2
+ require 'json'
3
+
4
+ module BigKeeper
5
+ class ListGenerator
6
+ #generate tree print throught console
7
+ def self.generate_tree(file_path, home_branches, version)
8
+ module_branches_dic = {}
9
+ json_data = File.read(file_path, :encoding => 'UTF-8')
10
+ module_branches_dic = JSON.parse(json_data)
11
+ to_tree(module_branches_dic, home_branches, version)
12
+ File.delete(file_path)
13
+ end
14
+
15
+ #generate json print throught console
16
+ def self.generate_json(file_path, home_branches, version)
17
+ module_branches_dic = {}
18
+ json_data = File.read(file_path, :encoding => 'UTF-8')
19
+ module_branches_dic = JSON.parse(json_data)
20
+ json = to_json(home_branches, module_branches_dic, version)
21
+ puts JSON.pretty_generate(json)
22
+ File.delete(file_path)
23
+ end
24
+
25
+ def self.to_json(home_branches, module_info_list, version)
26
+ json_array = []
27
+ print_all = version == "all versions"
28
+ home_branches = home_branches.uniq
29
+ home_branches.each do | home_branch_name |
30
+ next unless home_branch_name.include?(version) || print_all
31
+ branch_dic = {}
32
+ involve_modules = []
33
+ module_info_list.collect do | module_info_dic |
34
+ next unless module_info_dic["branches"] != nil
35
+ module_name = module_info_dic["module_name"]
36
+ module_info_dic["branches"].each do | module_branch |
37
+ if module_branch.strip.delete("*") == home_branch_name.strip.delete("*")
38
+ module_current_info = {}
39
+ module_current_info["module_name"] = module_name
40
+ module_current_info["current_branch"] = module_info_dic["current_branch"]
41
+ involve_modules << module_current_info
42
+ end
43
+ end
44
+ end
45
+
46
+ branch_dic["is_remote"] = false
47
+ branch_dic["is_current"] = false
48
+
49
+ if home_branch_name =~ /^remotes\//
50
+ home_branch_name = $~.post_match
51
+ branch_dic["is_remote"] = true
52
+ end
53
+
54
+ if home_branch_name =~ /^origin\//
55
+ home_branch_name = $~.post_match
56
+ end
57
+
58
+ if home_branch_name.include?("*")
59
+ home_branch_name = home_branch_name.delete("*")
60
+ branch_dic["is_current"] = true
61
+ end
62
+
63
+ if home_branch_name =~ /^feature\//
64
+ home_branch_name = $~.post_match
65
+ end
66
+
67
+ if home_branch_name =~ /^hotfix\//
68
+ home_branch_name = $~.post_match
69
+ end
70
+
71
+ branch_dic["home_branch_name"] = home_branch_name
72
+ branch_dic["involve_modules"] = involve_modules
73
+ json_array << branch_dic
74
+ end
75
+ json_array
76
+ end
77
+
78
+ def self.to_tree(module_branches_dic, branches_name, version)
79
+ home_name = BigkeeperParser.home_name
80
+ print_all = version == "all versions"
81
+ branches_name.each do | home_branch_name |
82
+ next unless home_branch_name.include?(version) || print_all
83
+ Logger.highlight(home_branch_name.strip)
84
+ module_branches_dic.each do | module_info_dic |
85
+ module_name = module_info_dic["module_name"]
86
+ next if module_info_dic["branches"] == nil
87
+ module_info_dic["branches"].each do | module_branch |
88
+ if module_branch.include?(home_branch_name.strip.delete('*'))
89
+ if !module_branch.include?("*") && home_branch_name.include?("*")
90
+ Logger.warning(" ├── #{module_name} (current branch :#{module_info_dic["current_branch"]})")
91
+ else
92
+ Logger.default(" ├── #{module_name}")
93
+ end
94
+ break
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,143 @@
1
+ require 'big_keeper/util/bigkeeper_parser'
2
+ require 'big_keeper/util/logger'
3
+ require 'big_keeper/util/podfile_detector'
4
+ require 'Singleton'
5
+
6
+ module BigKeeper
7
+ class LockfileParser
8
+ include Singleton
9
+ attr_accessor :main_path, :dependencies, :pods, :podfile_hash
10
+ $mode = 'PODS'
11
+
12
+ def initialize
13
+ self.pods = {}
14
+ self.dependencies = []
15
+ end
16
+
17
+ def parse(main_path)
18
+ self.main_path = main_path
19
+ $mode = 'PODS'
20
+ podfile_lock_lines = File.readlines("#{main_path}/Podfile.lock", :encoding => 'UTF-8')
21
+ Logger.highlight("Analyzing Podfile.lock...")
22
+ podfile_lock_lines.each do |sentence|
23
+ if sentence.include?('PODS')
24
+ $mode = 'PODS'
25
+ elsif sentence.include?('DEPENDENCIES')
26
+ $mode = 'DEPENDENCIES'
27
+ elsif sentence.include?('SPEC REPOS')
28
+ $mode = 'SPEC REPOS'
29
+ elsif sentence.include?('SPEC CHECKSUMS')
30
+ $mode = 'SPEC CHECKSUMS'
31
+ elsif sentence.include?('CHECKOUT OPTIONS')
32
+ $mode = 'CHECKOUT OPTIONS'
33
+ elsif sentence.include?('EXTERNAL SOURCES')
34
+ $mode = 'EXTERNAL SOURCES'
35
+ elsif sentence.include?('PODFILE CHECKSUM')
36
+ $mode = 'PODFILE CHECKSUM'
37
+ else
38
+ if $mode == 'PODS'
39
+ deal_pod(sentence.strip.delete('\n'))
40
+ end
41
+ if $mode == 'SPEC CHECKSUMS'
42
+ deal_spec(sentence.strip.delete('\n'))
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ def get_unlock_pod_list(is_all)
49
+ result = {}
50
+ pod_parser = PodfileParser.instance
51
+ #podfile 中 unlock pods
52
+ unlock_pods = pod_parser.get_unlock_pod_list
53
+ # @unlock_pod_list << pod_name unless @module_list.include pod_name
54
+ if is_all
55
+ self.dependencies.each do |pod_name|
56
+ if pod_parser.pod_list.include?(pod_name)
57
+ next
58
+ end
59
+ if self.pods[pod_name] != nil
60
+ result[pod_name] = self.pods[pod_name]
61
+ end
62
+ end
63
+
64
+ unlock_pods.each do |pod_name|
65
+ if self.pods[pod_name] != nil
66
+ result[pod_name] = self.pods[pod_name]
67
+ end
68
+ end
69
+ return result
70
+ else
71
+ unlock_pods.each do |pod_name|
72
+ if self.pods[pod_name] != nil
73
+ result[pod_name] = self.pods[pod_name]
74
+ end
75
+ end
76
+ return result
77
+ end
78
+ end
79
+
80
+ #处理PODS
81
+ # TODO 去除重复
82
+ def deal_pod(s)
83
+ pod_name = get_lock_podname(s)
84
+ return if pod_name == nil
85
+ pod_version = get_lock_version(s)
86
+ if self.pods.keys.include?(pod_name)
87
+ current_version = self.pods[pod_name]
88
+ if pod_version != nil && current_version != nil
89
+ self.pods[pod_name] = chose_version(current_version, pod_version)
90
+ else
91
+ self.pods[pod_name] = pod_version unless pod_version == nil
92
+ end
93
+ end
94
+ self.pods[pod_name] = pod_version unless pod_version == nil
95
+ end
96
+ #
97
+ # #处理EXTERNAL SOURCES
98
+ # def deal_sources(s)
99
+ #
100
+ # end
101
+ # #处理CHECKOUT OPTIONS
102
+ # def deal_checkout(s)
103
+ #
104
+ # end
105
+
106
+ #处理SPEC CHECKSUMS
107
+ def deal_spec(s)
108
+ if /: +/ =~ s
109
+ dependency = $~.pre_match.strip
110
+ self.dependencies << dependency unless self.dependencies.include?(dependency)
111
+ end
112
+ end
113
+
114
+ def get_lock_podname(sentence) #获得lock pod名称
115
+ match_result = /(\d+.){1,2}\d+/.match(sentence.delete('- :~>='))
116
+ pod_name = match_result.pre_match unless match_result == nil
117
+ return pod_name.delete('()') unless pod_name == nil
118
+ end
119
+
120
+ def get_lock_version(sentence)#获得lock pod版本号
121
+ match_result = /(\d+.){1,2}\d+/.match(sentence)
122
+ return match_result[0].strip unless match_result == nil
123
+ end
124
+
125
+ def chose_version(cur_version,temp_version)
126
+ # p "cur:#{cur_version},temp:#{temp_version}"
127
+ cur_list = cur_version.split('.')
128
+ temp_list = temp_version.split('.')
129
+ cur_list << 0.to_s if cur_list.size == 2
130
+ temp_list << 0.to_s if temp_list.size == 2
131
+ if cur_list[0] >= temp_list[0]
132
+ if cur_list[1] >= temp_list[1]
133
+ if cur_list[2] > temp_list[2]
134
+ return cur_version
135
+ end
136
+ return temp_version
137
+ end
138
+ return temp_version
139
+ end
140
+ return temp_version
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,47 @@
1
+ require 'colorize'
2
+ require 'big_keeper/util/leancloud_logger'
3
+
4
+ module BigKeeper
5
+ DEFAULT_LOG = 1
6
+ HIGHLIGHT_LOG = 2
7
+ ERROR_LOG = 3
8
+ WARNING_LOG = 4
9
+
10
+ class Logger
11
+
12
+ def self.log_with_type(sentence,type)
13
+ case type
14
+ when DEFAULT_LOG then puts sentence.to_s.colorize(:default)
15
+ when HIGHLIGHT_LOG then puts sentence.to_s.colorize(:green)
16
+ when ERROR_LOG then raise sentence.to_s.colorize(:red)
17
+ when WARNING_LOG then puts sentence.to_s.colorize(:yellow)
18
+ end
19
+ end
20
+
21
+ def self.default(sentence)
22
+ puts formatter_output(sentence).colorize(:default)
23
+ end
24
+
25
+ def self.highlight(sentence)
26
+ puts formatter_output(sentence).colorize(:green)
27
+ end
28
+
29
+ def self.error(sentence)
30
+ is_need_log = LeanCloudLogger.instance.is_need_log
31
+ LeanCloudLogger.instance.end_log(false, is_need_log)
32
+ raise formatter_output(sentence).colorize(:red)
33
+ end
34
+
35
+ def self.warning(sentence)
36
+ puts formatter_output(sentence).colorize(:yellow)
37
+ end
38
+
39
+ def self.separator
40
+ puts "- - - - - - - - - - - - - - - - - - - - - - - - - - -".colorize(:light_blue)
41
+ end
42
+
43
+ def self.formatter_output(sentence)
44
+ "[big] ".concat(sentence.to_s).to_s
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,70 @@
1
+ require 'big_keeper/util/logger'
2
+ require 'open3'
3
+
4
+ module BigKeeper
5
+ class PodOperator
6
+ def self.pod_install(path, repo_update)
7
+ # pod install
8
+ if repo_update
9
+ PodOperator.pod_update_private_repos(true)
10
+ end
11
+ Logger.highlight('Start pod install, waiting...')
12
+ cmd = "pod install --project-directory='#{path}'"
13
+ Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
14
+ while line = stdout.gets
15
+ p line
16
+ end
17
+ end
18
+ Logger.highlight('Finish pod install.')
19
+ end
20
+
21
+ def self.pod_repo_push(path, module_name, source, version)
22
+ Logger.highlight(%Q(Start Pod repo push #{module_name}))
23
+ Dir.chdir(path) do
24
+ command = ""
25
+ p BigkeeperParser.source_spec_name(module_name)
26
+ if source.length > 0
27
+ command = "pod repo push #{BigkeeperParser.source_spec_name(module_name)} #{module_name}.podspec --allow-warnings --sources=#{source} --verbose --use-libraries"
28
+ else
29
+ command = "pod repo push #{BigkeeperParser.source_spec_name(module_name)} #{module_name}.podspec --allow-warnings --verbose --use-libraries"
30
+ end
31
+
32
+ IO.popen(command) do |io|
33
+ is_success = false
34
+ error_info = Array.new
35
+ io.each do |line|
36
+ error_info.push(line)
37
+ is_success = true if line.include? "Updating spec repo"
38
+ end
39
+ unless is_success
40
+ puts error_info
41
+ Logger.error("Fail: '#{module_name}' Pod repo fail")
42
+ end
43
+ Logger.highlight(%Q(Success release #{module_name} V#{version}))
44
+ end
45
+ end
46
+ end
47
+
48
+ def self.pod_update_private_repos(update_private)
49
+ if update_private
50
+ BigkeeperParser.sources.map { |spec|
51
+ Logger.highlight('Start pod repo update, waiting...')
52
+ cmd = "pod repo update #{spec}"
53
+ cmd(cmd)
54
+ }
55
+ else
56
+ cmd = "pod repo update"
57
+ cmd(cmd)
58
+ end
59
+ end
60
+
61
+ def self.cmd(cmd)
62
+ Open3.popen3(cmd) do |stdin , stdout , stderr, wait_thr|
63
+ while line = stdout.gets
64
+ puts line
65
+ end
66
+ end
67
+ end
68
+
69
+ end
70
+ end
@@ -0,0 +1,102 @@
1
+ require 'big_keeper/util/bigkeeper_parser'
2
+ require 'big_keeper/model/podfile_model'
3
+ require 'big_keeper/util/logger'
4
+ require 'Singleton'
5
+ module BigKeeper
6
+
7
+ class PodfileParser
8
+ include Singleton
9
+ attr_accessor :module_list, :main_path, :pod_list
10
+ $unlock_pod_list = []
11
+ $modify_pod_list = {}
12
+
13
+ def initialize
14
+ @module_list = BigkeeperParser.module_names
15
+ @pod_list = []
16
+ end
17
+
18
+ def parse(path)
19
+ @main_path = path
20
+ podfile_lines = File.readlines("#{@main_path}/Podfile", :encoding => 'UTF-8')
21
+ Logger.highlight("Analyzing Podfile...") unless podfile_lines.size.zero?
22
+ podfile_lines.collect do |sentence|
23
+ if /pod / =~ sentence
24
+ pod_name = get_pod_name(sentence)
25
+ @pod_list << pod_name
26
+ end
27
+ end
28
+ end
29
+
30
+ def get_unlock_pod_list
31
+ podfile_lines = File.readlines("#{@main_path}/Podfile", :encoding => 'UTF-8')
32
+ #Logger.highlight("Analyzing Podfile...") unless podfile_lines.size.zero?
33
+ podfile_lines.collect do |sentence|
34
+ deal_podfile_line(sentence) unless sentence =~(/'(\d+.){1,2}\d+'/)
35
+ end
36
+ $unlock_pod_list
37
+ end
38
+
39
+ def deal_podfile_line(sentence)
40
+ return unless !sentence.strip.start_with?("#")
41
+ if sentence.strip.include?('pod ')
42
+ pod_model = PodfileModel.new(sentence)
43
+ if !pod_model.name.empty? &&
44
+ pod_model.configurations != '[\'Debug\']' &&
45
+ pod_model.path == nil &&
46
+ pod_model.tag == nil
47
+ pod_names = pod_model.name.split('/')
48
+ if pod_names.size > 1
49
+ pod_name = pod_names[0]
50
+ else
51
+ pod_name = pod_model.name
52
+ end
53
+ $unlock_pod_list << pod_name unless @module_list.include?(pod_name)
54
+ end
55
+ pod_model
56
+ end
57
+ end
58
+
59
+ def get_pod_name(sentence)
60
+
61
+ pod_model = deal_podfile_line(sentence)
62
+ if pod_model != nil
63
+ return pod_model.name
64
+ end
65
+ end
66
+
67
+ def self.get_pod_model(sentence)
68
+ if sentence.include?('pod ')
69
+ pod_model = PodfileModel.new(sentence)
70
+ return pod_model
71
+ end
72
+ end
73
+
74
+ def get_lock_podname(sentence) #获得pod名称
75
+ match_result = /(\d+.){1,2}\d+/.match(sentence.delete('- :~>='))
76
+ pod_name = match_result.pre_match unless match_result == nil
77
+ return pod_name.delete('()') unless pod_name == nil
78
+ end
79
+
80
+ def get_lock_version(sentence)#获得pod版本号
81
+ match_result = /(\d+.){1,2}\d+/.match(sentence)
82
+ return match_result[0] unless match_result == nil
83
+ end
84
+
85
+ def chose_version(cur_version,temp_version)
86
+ # p "cur:#{cur_version},temp:#{temp_version}"
87
+ cur_list = cur_version.split('.')
88
+ temp_list = temp_version.split('.')
89
+ temp_list << 0.to_s if temp_list.size == 2
90
+ if cur_list[0] >= temp_list[0]
91
+ if cur_list[1] >= temp_list[1]
92
+ if cur_list[2] > temp_list[2]
93
+ return cur_version
94
+ end
95
+ return temp_version
96
+ end
97
+ return temp_version
98
+ end
99
+ return temp_version
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,63 @@
1
+ require 'big_keeper/util/bigkeeper_parser'
2
+ require 'big_keeper/util/podfile_detector'
3
+ require 'big_keeper/model/podfile_model'
4
+ require 'big_keeper/util/logger'
5
+
6
+ module BigKeeper
7
+
8
+ class PodfileModuleDetector
9
+ @module_list = []
10
+
11
+ def initialize(main_path)
12
+ @module_list = BigkeeperParser.module_names
13
+ @main_path = main_path
14
+ @update_modules = {}
15
+ # check_version_list
16
+ end
17
+
18
+ #检查需要更新业务库列表
19
+ def check_version_list
20
+ if @module_list.empty?
21
+ Logger.highlight('There is not any module should to be check.')
22
+ return
23
+ else
24
+ Logger.highlight('Checking..')
25
+ @module_list.each do |module_name|
26
+ get_pod_search_result(module_name)
27
+ end
28
+
29
+ #获得pod信息后
30
+ deal_module_info
31
+ end
32
+ end
33
+
34
+ def get_pod_search_result(pod_name)
35
+ #输入pod Search 结果
36
+ `pod search #{pod_name} --ios --simple >> #{@main_path}/bigKeeperPodInfo.tmp`
37
+ end
38
+
39
+ def deal_module_info
40
+ podfile_lines = File.readlines("#{@main_path}/bigKeeperPodInfo.tmp", :encoding => 'UTF-8')
41
+ Logger.highlight("Analyzing modules info...") unless podfile_lines.size.zero?
42
+ podfile_lines.collect do |sentence|
43
+ if sentence =~(/pod/)
44
+ sentence = sentence.sub('pod', '')
45
+ sentence = sentence.delete('\n\'')
46
+ match_result = sentence.split(',')
47
+ pod_name = match_result[0].strip
48
+ latest_version = match_result[1].strip
49
+ @update_modules[pod_name] = latest_version unless @update_modules.include?(pod_name)
50
+ end
51
+ end
52
+ p @update_modules
53
+ File.delete("#{@main_path}/bigKeeperPodInfo.tmp")
54
+ @update_modules
55
+ end
56
+
57
+ def get_module_latest_version(pod_model)
58
+
59
+ end
60
+
61
+ end
62
+
63
+ end
@@ -0,0 +1,125 @@
1
+ require 'tempfile'
2
+ require 'fileutils'
3
+ require 'big_keeper/dependency/dep_type'
4
+ require 'big_keeper/util/podfile_detector'
5
+
6
+ module BigKeeper
7
+ # Operator for podfile
8
+ class PodfileOperator
9
+ def has(podfile, module_name)
10
+ File.open(podfile, 'r') do |file|
11
+ file.each_line do |line|
12
+ if line.include?module_name
13
+ return true
14
+ end
15
+ end
16
+ end
17
+ false
18
+ end
19
+
20
+ def generate_pod_config(pod_name, version, comment)
21
+ module_config = ''
22
+ if comment != nil
23
+ module_config = " pod '#{pod_name}' , '#{version}' # #{comment}"
24
+ else
25
+ module_config = " pod '#{pod_name}' , '#{version}'"
26
+ end
27
+ end
28
+
29
+ def replace_all_module_release(path, user, module_names, version)
30
+ module_names.each do |module_name|
31
+ DepService.dep_operator(path, user).update_module_config(
32
+ module_name,
33
+ ModuleOperateType::RELEASE)
34
+ end
35
+
36
+ end
37
+
38
+ def find_and_lock(podfile, dictionary)
39
+ temp_file = Tempfile.new('.Podfile.tmp', :encoding => 'UTF-8')
40
+ begin
41
+ File.open(podfile, 'r') do |file|
42
+ file.each_line do |line|
43
+ pod_model = PodfileParser.get_pod_model(line)
44
+ if pod_model != nil && pod_model.name != nil && dictionary[pod_model.name] != nil
45
+ temp_file.puts generate_pod_config(pod_model.name, dictionary[pod_model.name], pod_model.comment)
46
+ dictionary.delete(pod_model.name)
47
+ else
48
+ temp_file.puts line
49
+ end
50
+ end
51
+ end
52
+ if !dictionary.empty?
53
+ temp_file.puts 'def sub_dependency'
54
+ dictionary.keys.each do |sub_pod|
55
+ temp_file.puts generate_pod_config(sub_pod, dictionary[sub_pod], 'bigkeeper')
56
+ end
57
+ temp_file.puts 'end'
58
+ end
59
+ temp_file.close
60
+ FileUtils.mv(temp_file.path, podfile)
61
+ ensure
62
+ temp_file.close
63
+ temp_file.unlink
64
+ end
65
+ end
66
+
67
+ def find_and_upgrade(podfile, dictionary)
68
+ temp_file = Tempfile.new('.Podfile.tmp', :encoding => 'UTF-8')
69
+ begin
70
+ File.open(podfile, 'r', :encoding => 'UTF-8') do |file|
71
+ file.each_line do |line|
72
+ pod_model = PodfileParser.get_pod_model(line)
73
+ if pod_model != nil && pod_model.name != nil && dictionary[pod_model.name] != nil
74
+ #替换
75
+ temp_file.puts generate_pod_config(pod_model.name, dictionary[pod_model.name], pod_model.comment)
76
+ else
77
+ temp_file.puts line
78
+ end
79
+ end
80
+ end
81
+ temp_file.close
82
+ FileUtils.mv(temp_file.path, podfile)
83
+ ensure
84
+ temp_file.close
85
+ temp_file.unlink
86
+ end
87
+ end
88
+
89
+ def podspec_change(podspec_file, version, module_name)
90
+ temp_file = Tempfile.new(".#{module_name}.podspec", :encoding => 'UTF-8')
91
+ has_change = false
92
+ begin
93
+ File.open(podspec_file, 'r', :encoding => 'UTF-8') do |file|
94
+ file.each_line do |line|
95
+ if line.include?("s.version")
96
+ temp_line = line
97
+ temp_line_arr = temp_line.split("=")
98
+ if temp_line_arr[0].delete(" ") == "s.version"
99
+ unless temp_line_arr[temp_line_arr.length - 1].include? "#{version}"
100
+ temp_file.puts "s.version = '#{version}'"
101
+ has_change = true
102
+ else
103
+ temp_file.puts line
104
+ Logger.highlight("The version in PodSpec is equal your input version")
105
+ end
106
+ else
107
+ temp_file.puts line
108
+ end
109
+ else
110
+ temp_file.puts line
111
+ end
112
+ end
113
+ end
114
+ temp_file.close
115
+ FileUtils.mv(temp_file.path, podspec_file)
116
+ ensure
117
+ temp_file.close
118
+ temp_file.unlink
119
+ end
120
+ has_change
121
+ end
122
+
123
+ private :generate_pod_config
124
+ end
125
+ end
@@ -0,0 +1,17 @@
1
+ module BigKeeper
2
+ # Operator for got
3
+ class VerifyOperator
4
+ def self.already_in_process?
5
+ already_in_process = false
6
+ Open3.popen3('ps aux | grep \<big\> -c') do |stdin , stdout , stderr, wait_thr|
7
+ while line = stdout.gets
8
+ if line.rstrip.to_i > 2
9
+ already_in_process = true
10
+ break
11
+ end
12
+ end
13
+ end
14
+ already_in_process
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,29 @@
1
+ module BigKeeper
2
+ class VersionConfigOperator
3
+ def self.change_version(version_config_file, modules, version)
4
+ temp_file = Tempfile.new('.version-config.gradle.tmp')
5
+ begin
6
+ File.open(version_config_file, 'r') do |file|
7
+ file.each_line do |line|
8
+ temp_file.puts(replace_module_version(line, modules, version))
9
+ end
10
+ end
11
+ temp_file.close
12
+ FileUtils.mv(temp_file.path, version_config_file)
13
+ ensure
14
+ temp_file.close
15
+ temp_file.unlink
16
+ end
17
+ end
18
+
19
+ def self.replace_module_version(line, modules, version)
20
+ modules.each do |module_name|
21
+ version_alias = BigkeeperParser.module_version_alias(module_name)
22
+ if !version_alias.nil? && !version_alias.empty? && line.match(/\s*#{version_alias}\s*=\s*('|")([\s\S]*)('|")\s*/)
23
+ return line.sub(/(\s*#{version_alias}\s*=\s*)('|")([\s\S]*)('|")\s*/){"#{$1}\'#{version}\'"}
24
+ end
25
+ end
26
+ line
27
+ end
28
+ end
29
+ end