kookeeper 3.0.0 → 3.0.3

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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.idea/.gitignore +8 -0
  3. data/.idea/bigkeeper.iml +68 -0
  4. data/.idea/modules.xml +8 -0
  5. data/.idea/vcs.xml +6 -0
  6. data/Gemfile.lock +68 -48
  7. data/big_keeper.gemspec +3 -3
  8. data/bin/big +1 -1
  9. data/bin/koo +1 -1
  10. data/lib/big_keeper/command/feature&hotfix/delete.rb +1 -1
  11. data/lib/big_keeper/command/feature&hotfix/finish.rb +2 -2
  12. data/lib/big_keeper/command/feature&hotfix/list.rb +1 -1
  13. data/lib/big_keeper/command/feature&hotfix/publish.rb +2 -2
  14. data/lib/big_keeper/command/feature&hotfix/start.rb +2 -2
  15. data/lib/big_keeper/command/feature&hotfix/switch.rb +2 -2
  16. data/lib/big_keeper/command/feature&hotfix/update.rb +2 -2
  17. data/lib/big_keeper/command/pod/podfile.rb +13 -16
  18. data/lib/big_keeper/command/pod.rb +5 -18
  19. data/lib/big_keeper/command/release/home.rb +1 -2
  20. data/lib/big_keeper/command/release/module.rb +0 -4
  21. data/lib/big_keeper/command/release.rb +0 -25
  22. data/lib/big_keeper/dependency/dep_gradle_operator.rb +29 -47
  23. data/lib/big_keeper/dependency/dep_operator.rb +1 -17
  24. data/lib/big_keeper/dependency/dep_pod_operator.rb +10 -10
  25. data/lib/big_keeper/model/operate_type.rb +0 -3
  26. data/lib/big_keeper/service/git_service.rb +2 -3
  27. data/lib/big_keeper/service/module_service.rb +0 -65
  28. data/lib/big_keeper/util/bigkeeper_parser.rb +1 -17
  29. data/lib/big_keeper/util/cache_operator.rb +4 -6
  30. data/lib/big_keeper/util/file_operator.rb +1 -1
  31. data/lib/big_keeper/util/git_operator.rb +4 -25
  32. data/lib/big_keeper/util/gradle_operator.rb +209 -0
  33. data/lib/big_keeper/util/leancloud_logger.rb +7 -19
  34. data/lib/big_keeper/util/list_generator.rb +2 -2
  35. data/lib/big_keeper/util/logger.rb +1 -2
  36. data/lib/big_keeper/util/podfile_detector.rb +44 -35
  37. data/lib/big_keeper/util/podfile_module.rb +1 -1
  38. data/lib/big_keeper/util/podfile_operator.rb +8 -16
  39. data/lib/big_keeper/version.rb +1 -1
  40. data/lib/big_keeper.rb +9 -19
  41. metadata +14 -25
  42. data/.github/ISSUE_TEMPLATE.md +0 -20
  43. data/.gitignore +0 -50
  44. data/.travis.yml +0 -19
  45. data/Rakefile +0 -2
  46. data/lib/big_keeper/command/client.rb +0 -50
  47. data/lib/big_keeper/command/init.rb +0 -36
  48. data/lib/big_keeper/command/release/finish.rb +0 -36
  49. data/lib/big_keeper/command/release/publish.rb +0 -4
  50. data/lib/big_keeper/command/release/start.rb +0 -78
  51. data/lib/big_keeper/util/command_line_util.rb +0 -9
  52. data/lib/big_keeper/util/gradle_content_generator.rb +0 -26
  53. data/lib/big_keeper/util/gradle_file_operator.rb +0 -339
  54. data/lib/big_keeper/util/gradle_module_operator.rb +0 -70
  55. data/lib/big_keeper/util/lockfile_parser.rb +0 -143
  56. data/lib/big_keeper/util/version_config_operator.rb +0 -29
  57. data/resources/template/Bigkeeper +0 -23
@@ -1,71 +1,53 @@
1
1
  require 'big_keeper/dependency/dep_operator'
2
- require 'big_keeper/util/gradle_module_operator'
3
- require 'big_keeper/util/gradle_file_operator'
4
- require 'big_keeper/model/operate_type'
5
- require 'big_keeper/util/version_config_operator'
2
+ require 'big_keeper/util/gradle_operator'
6
3
 
7
4
  module BigKeeper
8
5
  # Operator for podfile
9
6
  class DepGradleOperator < DepOperator
10
7
 
11
- BUILD_GRADLE = "app/build.gradle"
12
- SETTINGS_GRADLE = "settings.gradle"
13
-
14
8
  def backup
9
+ GradleOperator.new(@path).backup
10
+ modules = ModuleCacheOperator.new(@path).all_path_modules
11
+ modules.each do |module_name|
12
+ module_full_path = BigkeeperParser.module_full_path(@path, @user, module_name)
13
+ GradleOperator.new(module_full_path).backup
14
+ end
15
15
  end
16
16
 
17
17
  def recover
18
- build_file = "#{@path}/#{BUILD_GRADLE}"
19
- settings_file = "#{@path}/#{SETTINGS_GRADLE}"
20
- GradleFileOperator.new(@path, @user).recover_bigkeeper_config_file(build_file)
21
- GradleFileOperator.new(@path, @user).recover_bigkeeper_config_file(settings_file)
22
-
23
- cache_operator = CacheOperator.new(@path)
24
- cache_operator.clean
18
+ GradleOperator.new(@path).recover(true, false)
25
19
  end
26
20
 
27
21
  def update_module_config(module_name, module_operate_type)
22
+ module_full_path = BigkeeperParser.module_full_path(@path, @user, module_name)
23
+
24
+ # get modules
28
25
  if ModuleOperateType::ADD == module_operate_type
29
- GradleModuleOperator.new(@path, @user, module_name).update_module(ModuleOperateType::ADD)
26
+ GradleOperator.new(module_full_path).backup
27
+
28
+ add_modules = ModuleCacheOperator.new(@path).add_path_modules
29
+ GradleOperator.new(module_full_path).update_build_config(module_name, add_modules, ModuleOperateType::ADD)
30
+ GradleOperator.new(module_full_path).update_settings_config(module_name, add_modules, ModuleOperateType::ADD, @user)
31
+
32
+ del_modules = ModuleCacheOperator.new(@path).del_path_modules
33
+ GradleOperator.new(module_full_path).update_build_config(module_name, del_modules, ModuleOperateType::DELETE)
34
+ GradleOperator.new(module_full_path).update_settings_config(module_name, del_modules, ModuleOperateType::DELETE, @user)
30
35
  elsif ModuleOperateType::DELETE == module_operate_type
31
- GradleModuleOperator.new(@path, @user, module_name).recover()
36
+ GradleOperator.new(module_full_path).recover(true, true)
32
37
  elsif ModuleOperateType::FINISH == module_operate_type
33
- GradleModuleOperator.new(@path, @user, module_name).update_module(ModuleOperateType::FINISH)
38
+ modules = ModuleCacheOperator.new(@path).all_path_modules
39
+ GradleOperator.new(module_full_path).update_build_config(module_name, modules, ModuleOperateType::FINISH)
34
40
  elsif ModuleOperateType::PUBLISH == module_operate_type
35
- GradleModuleOperator.new(@path, @user, module_name).recover()
41
+ modules = ModuleCacheOperator.new(@path).all_git_modules
42
+ GradleOperator.new(module_full_path).update_build_config(module_name, modules, ModuleOperateType::PUBLISH)
43
+ GradleOperator.new(module_full_path).recover(true, false)
36
44
  end
37
- end
38
-
39
- def install(modules, type, should_update)
40
- if OperateType::START == type || OperateType::UPDATE == type || OperateType::SWITCH == type || OperateType::FINISH == type
41
- GradleFileOperator.new(@path, @user).update_home_depends("#{@path}/#{BUILD_GRADLE}", "#{@path}/#{SETTINGS_GRADLE}",type)
42
- elsif OperateType::PUBLISH == type
43
- recover()
44
- end
45
- end
46
-
47
- def release_module_start(modules, module_name, version)
48
- module_full_path = BigkeeperParser.module_full_path(@path, @user, module_name)
49
- version_config_file = "#{module_full_path}/doc/config/version-config.gradle"
50
- version = "#{version}-SNAPSHOT" unless version.include?'SNAPSHOT'
51
- VersionConfigOperator.change_version(version_config_file, modules, version)
52
- end
53
-
54
- def release_module_finish(modules, module_name, version)
55
- module_full_path = BigkeeperParser.module_full_path(@path, @user, module_name)
56
- version_config_file = "#{module_full_path}/doc/config/version-config.gradle"
57
- VersionConfigOperator.change_version(version_config_file, modules, version)
58
- end
59
45
 
60
- def release_home_start(modules, version)
61
- version_config_file = "#{@path}/doc/config/version-config.gradle"
62
- version = "#{version}-SNAPSHOT" unless version.include?'SNAPSHOT'
63
- VersionConfigOperator.change_version(version_config_file, modules, version)
46
+ GradleOperator.new(@path).update_build_config('', [module_name], module_operate_type)
47
+ GradleOperator.new(@path).update_settings_config('', [module_name], module_operate_type, @user)
64
48
  end
65
49
 
66
- def release_home_finish(modules, version)
67
- version_config_file = "#{@path}/doc/config/version-config.gradle"
68
- VersionConfigOperator.change_version(version_config_file, modules, version)
50
+ def install(should_update)
69
51
  end
70
52
 
71
53
  def open
@@ -21,23 +21,7 @@ module BigKeeper
21
21
  raise "You should override this method in subclass."
22
22
  end
23
23
 
24
- def release_module_start(modules, module_name, version)
25
- raise "You should override this method in subclass."
26
- end
27
-
28
- def release_module_finish(modules, module_name, version)
29
- raise "You should override this method in subclass."
30
- end
31
-
32
- def release_home_start(modules, version)
33
- raise "You should override this method in subclass."
34
- end
35
-
36
- def release_home_finish(modules, version)
37
- raise "You should override this method in subclass."
38
- end
39
-
40
- def install(modules, type, should_update)
24
+ def install(should_update)
41
25
  raise "You should override this method in subclass."
42
26
  end
43
27
 
@@ -20,10 +20,10 @@ module BigKeeper
20
20
 
21
21
  def update_module_config(module_name, module_operate_type)
22
22
  file = "#{@path}/Podfile"
23
- temp_file = Tempfile.new('.Podfile.tmp', :encoding => 'UTF-8')
23
+ temp_file = Tempfile.new('.Podfile.tmp')
24
24
 
25
25
  begin
26
- File.open(file, 'r', :encoding => 'UTF-8') do |file|
26
+ File.open(file, 'r') do |file|
27
27
  file.each_line do |line|
28
28
  temp_file.puts generate_module_config(line, module_name, module_operate_type)
29
29
  end
@@ -36,7 +36,7 @@ module BigKeeper
36
36
  end
37
37
  end
38
38
 
39
- def install(modules, type, should_update)
39
+ def install(should_update)
40
40
  PodOperator.pod_install(@path, should_update)
41
41
  end
42
42
 
@@ -45,10 +45,10 @@ module BigKeeper
45
45
  end
46
46
 
47
47
  def generate_module_config(line, module_name, module_operate_type)
48
- line.sub(/(\s*)pod(\s*)('|")#{module_name}((\/[_a-zA-Z0-9]+)?)('|")([\s\S]*)/){
48
+ line.sub(/(\s*)pod(\s*)('|")#{module_name}('|")([\s\S]*)/){
49
49
  if ModuleOperateType::ADD == module_operate_type
50
50
  module_path = BigkeeperParser.module_path(@user, module_name)
51
- "#{$1}pod '#{module_name}#{$4}', :path => '#{module_path}'"
51
+ "#{$1}pod '#{module_name}', :path => '#{module_path}'"
52
52
  elsif ModuleOperateType::DELETE == module_operate_type
53
53
  origin_config_of_module = origin_config_of_module(module_name)
54
54
  if origin_config_of_module.empty?
@@ -59,21 +59,21 @@ module BigKeeper
59
59
  elsif ModuleOperateType::FINISH == module_operate_type
60
60
  module_git = BigkeeperParser.module_git(module_name)
61
61
  branch_name = GitOperator.new.current_branch(@path)
62
- "#{$1}pod '#{module_name}#{$4}', :git => '#{module_git}', :branch => '#{branch_name}'"
62
+ "#{$1}pod '#{module_name}', :git => '#{module_git}', :branch => '#{branch_name}'"
63
63
  elsif ModuleOperateType::PUBLISH == module_operate_type
64
64
  module_git = BigkeeperParser.module_git(module_name)
65
65
  branch_name = GitOperator.new.current_branch(@path)
66
66
  base_branch_name = GitflowType.base_branch(GitService.new.current_branch_type(@path))
67
- "#{$1}pod '#{module_name}#{$4}', :git => '#{module_git}', :branch => '#{base_branch_name}'"
67
+ "#{$1}pod '#{module_name}', :git => '#{module_git}', :branch => '#{base_branch_name}'"
68
68
  elsif ModuleOperateType::RELEASE == module_operate_type
69
69
  module_git = BigkeeperParser.module_git(module_name)
70
70
  lastest_tag, is_spec = find_lastest_tag(module_name)
71
71
  if is_spec == true
72
72
  Logger.default("#{module_name} lastest tag is #{lastest_tag}, this tag has published.")
73
- "#{$1}pod '#{module_name}#{$4}', '#{lastest_tag}'"
73
+ "#{$1}pod '#{module_name}', '#{lastest_tag}'"
74
74
  else
75
75
  Logger.default("#{module_name} lastest tag is #{lastest_tag}, this tag not publish.")
76
- "#{$1}pod '#{module_name}#{$4}', :git => '#{module_git}', :tag => '#{lastest_tag}'"
76
+ "#{$1}pod '#{module_name}', :git => '#{module_git}', :tag => '#{lastest_tag}'"
77
77
  end
78
78
  else
79
79
  line
@@ -84,7 +84,7 @@ module BigKeeper
84
84
  def origin_config_of_module(module_name)
85
85
  origin_config = ''
86
86
 
87
- File.open("#{@path}/.bigkeeper/Podfile", 'r', :encoding => 'UTF-8') do |file|
87
+ File.open("#{@path}/.bigkeeper/Podfile", 'r') do |file|
88
88
  file.each_line do |line|
89
89
  if line =~ /(\s*)pod(\s*)('|")#{module_name}('|")([\s\S]*)/
90
90
  origin_config = line
@@ -3,9 +3,6 @@ module BigKeeper
3
3
  START = 1
4
4
  UPDATE = 2
5
5
  SWITCH = 3
6
- FINISH = 4
7
- PUBLISH = 5
8
- RELEASE = 6
9
6
 
10
7
  def self.name(type)
11
8
  if START == type
@@ -14,7 +14,7 @@ module BigKeeper
14
14
  if !git.has_remote_branch(path, branch_name) && !git.has_local_branch(path, branch_name)
15
15
 
16
16
  verify_special_branch(path, 'master')
17
- verify_special_branch(path, 'develop')
17
+ #verify_special_branch(path, 'develop')
18
18
 
19
19
  GitflowOperator.new.verify_git_flow(path)
20
20
 
@@ -114,9 +114,8 @@ module BigKeeper
114
114
  def branchs_with_type(path, type)
115
115
  branchs = []
116
116
  Dir.chdir(path) do
117
- IO.popen('git branch -a') do | io |
117
+ IO.popen('git branch -r') do | io |
118
118
  io.each do | line |
119
- branchs << line.gsub('\n', '') if line.include?('develop')
120
119
  branchs << line.gsub(/\s/, '') if line =~ /[\s\S]*#{GitflowType.name(type)}*/
121
120
  end
122
121
  end
@@ -154,71 +154,6 @@ module BigKeeper
154
154
  result_dic
155
155
  end
156
156
 
157
- def release_check_changed(path, user, module_name)
158
- module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
159
-
160
- git = GitOperator.new
161
- if !File.exist? module_full_path
162
- Logger.default("No local repository for module '#{module_name}', clone it...")
163
- module_git = BigkeeperParser.module_git(module_name)
164
- git.clone(File.expand_path("#{module_full_path}/../"), module_git)
165
- end
166
- GitService.new.verify_checkout_pull(module_full_path, 'develop')
167
- git.check_remote_branch_diff(module_full_path, 'develop', 'master')
168
- end
169
-
170
- def release_start(path, user, modules, module_name, version)
171
- module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
172
-
173
- git = GitOperator.new
174
- if !File.exist? module_full_path
175
- Logger.default("No local repository for module '#{module_name}', clone it...")
176
- module_git = BigkeeperParser.module_git(module_name)
177
- git.clone(File.expand_path("#{module_full_path}/../"), module_git)
178
- end
179
- #stash module
180
- StashService.new.stash(module_full_path, GitOperator.new.current_branch(module_full_path), module_name)
181
- # delete cache
182
- CacheOperator.new(module_full_path).clean()
183
- # checkout develop
184
- GitService.new.verify_checkout_pull(module_full_path, 'develop')
185
- DepService.dep_operator(path, user).release_module_start(modules, module_name, version)
186
-
187
- # Push home changes to remote
188
- Logger.highlight("Push branch 'develop' for #{module_name}...")
189
- GitService.new.verify_push(
190
- module_full_path,
191
- "release start for #{version}",
192
- 'develop',
193
- "#{module_name}")
194
- end
195
-
196
- def release_finish(path, user, modules, module_name, version)
197
- module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
198
-
199
- git = GitOperator.new
200
- if !File.exist? module_full_path
201
- Logger.default("No local repository for module '#{module_name}', clone it...")
202
- module_git = BigkeeperParser.module_git(module_name)
203
- git.clone(File.expand_path("#{module_full_path}/../"), module_git)
204
- end
205
- #stash module
206
- StashService.new.stash(module_full_path, GitOperator.new.current_branch(module_full_path), module_name)
207
- # delete cache
208
- CacheOperator.new(module_full_path).clean()
209
- # checkout develop
210
- GitService.new.verify_checkout_pull(module_full_path, 'develop')
211
- DepService.dep_operator(path, user).release_module_finish(modules, module_name, version)
212
-
213
- # Push home changes to remote
214
- Logger.highlight("Push branch 'develop' for #{module_name}...")
215
- GitService.new.verify_push(
216
- module_full_path,
217
- "release finish for #{version}",
218
- 'develop',
219
- "#{module_name}")
220
- end
221
-
222
157
  private :verify_module
223
158
  end
224
159
  end
@@ -50,7 +50,7 @@ module BigKeeper
50
50
 
51
51
  Logger.error("Can't find a Bigkeeper file in current directory.") if !FileOperator.definitely_exists?(bigkeeper)
52
52
 
53
- content = File.read(bigkeeper, :encoding => 'UTF-8')
53
+ content = File.read bigkeeper
54
54
  content.gsub!(/version\s/, 'BigKeeper::version ')
55
55
  content.gsub!(/user\s/, 'BigKeeper::user ')
56
56
  content.gsub!(/home\s/, 'BigKeeper::home ')
@@ -219,22 +219,6 @@ module BigKeeper
219
219
  @@config[:modules][module_name][:git]
220
220
  end
221
221
 
222
- def self.module_source(module_name)
223
- @@config[:modules][module_name][:mod_path]
224
- end
225
-
226
- def self.module_maven(module_name)
227
- @@config[:modules][module_name][:maven_group] + ':' + @@config[:modules][module_name][:maven_artifact]
228
- end
229
-
230
- def self.module_maven_artifact(module_name)
231
- @@config[:modules][module_name][:maven_artifact]
232
- end
233
-
234
- def self.module_version_alias(module_name)
235
- @@config[:modules][module_name][:version_alias]
236
- end
237
-
238
222
  def self.module_pulls(module_name)
239
223
  @@config[:modules][module_name][:pulls]
240
224
  end
@@ -19,9 +19,7 @@ module BigKeeper
19
19
  end
20
20
 
21
21
  def clean
22
- if File.exist?(@cache_path)
23
- FileUtils.rm_r(@cache_path)
24
- end
22
+ FileUtils.rm_r(@cache_path)
25
23
  end
26
24
  end
27
25
 
@@ -32,8 +30,8 @@ module BigKeeper
32
30
  FileUtils.mkdir_p(@cache_path) unless File.exist?(@cache_path)
33
31
 
34
32
  if File.exist?("#{@cache_path}/module.cache")
35
- file = File.open("#{@cache_path}/module.cache", 'r', :encoding => 'UTF-8')
36
- @modules = JSON.load(file.read(), :encoding => 'UTF-8')
33
+ file = File.open("#{@cache_path}/module.cache", 'r')
34
+ @modules = JSON.load(file.read())
37
35
  file.close
38
36
  else
39
37
  @modules = {"git" => {"all" => [], "current" => []}, "path" => {"all" => [], "add" => [], "del" => [], "current" => []}}
@@ -110,7 +108,7 @@ module BigKeeper
110
108
  end
111
109
 
112
110
  def cache_modules
113
- file = File.new("#{@cache_path}/module.cache", 'w', :encoding => 'UTF-8')
111
+ file = File.new("#{@cache_path}/module.cache", 'w')
114
112
  file << @modules.to_json
115
113
  file.close
116
114
  end
@@ -29,5 +29,5 @@ module BigKeeper
29
29
  return header_file_list+m_file_list
30
30
  end
31
31
  end
32
-
32
+
33
33
  end
@@ -110,7 +110,7 @@ module BigKeeper
110
110
 
111
111
  def discard(path)
112
112
  Dir.chdir(path) do
113
- `git checkout . && git clean -df`
113
+ `git checkout . && git clean -xdf`
114
114
  end
115
115
  end
116
116
 
@@ -127,14 +127,7 @@ module BigKeeper
127
127
  end
128
128
 
129
129
  def user
130
- name = `git config user.name`.chop
131
- cn_reg = /[\u4e00-\u9fa5]{1}/
132
- cn_arr = name.scan(cn_reg)
133
- if cn_arr.count > 0
134
- Logger.error("git config user.name has Chinese character")
135
- else
136
- name.gsub(/[^0-9A-Za-z]/, '').downcase
137
- end
130
+ `git config user.name`.chop
138
131
  end
139
132
 
140
133
  def tag(path, version)
@@ -181,22 +174,6 @@ module BigKeeper
181
174
  end
182
175
  end
183
176
 
184
- def check_remote_branch_diff(path, branch, compare_branch)
185
- fetch(path)
186
- compare_branch_commits = Array.new
187
- IO.popen("cd '#{path}';git log --left-right #{branch}...origin/#{compare_branch} --pretty=oneline") do |io|
188
- io.each do |line|
189
- compare_branch_commits.push(line) unless (line.include? '>') && (line.include? "Merge branch \'#{branch}\'")
190
- end
191
- end
192
- if compare_branch_commits.size > 0
193
- return true
194
- else
195
- return false
196
- end
197
- end
198
-
199
- # TODO: 需要改造,util方法不应该有业务逻辑
200
177
  def check_diff(path, branch, compare_branch)
201
178
  compare_branch_commits = Array.new
202
179
  IO.popen("cd '#{path}'; git log --left-right #{branch}...#{compare_branch} --pretty=oneline") do |io|
@@ -239,4 +216,6 @@ module BigKeeper
239
216
 
240
217
  end
241
218
 
219
+ # p GitOperator.new.user
220
+ # BigStash::StashOperator.new("/Users/mmoaay/Documents/eleme/BigKeeperMain").list
242
221
  end
@@ -0,0 +1,209 @@
1
+ require 'big_keeper/util/cache_operator'
2
+
3
+ module BigKeeper
4
+ # Operator for podfile
5
+ class GradleOperator
6
+ def initialize(path)
7
+ @path = path
8
+ end
9
+
10
+ def backup
11
+ cache_operator = CacheOperator.new(@path)
12
+
13
+ cache_operator.save('settings.gradle')
14
+
15
+ Dir.glob("#{@path}/*/build.gradle").each do |build_gradle_file_path|
16
+ build_gradle_file = build_gradle_file_path.gsub!(/#{@path}/, '')
17
+ cache_operator.save(build_gradle_file)
18
+ end
19
+ end
20
+
21
+ def recover(settings_config, build_config)
22
+ cache_operator = CacheOperator.new(@path)
23
+
24
+ cache_operator.load('settings.gradle') if settings_config
25
+
26
+ if build_config
27
+ Dir.glob("#{@path}/*/build.gradle").each do |build_gradle_file_path|
28
+ build_gradle_file = build_gradle_file_path.gsub!(/#{@path}/, '')
29
+ cache_operator.load(build_gradle_file)
30
+ end
31
+ end
32
+
33
+ cache_operator.clean
34
+ end
35
+
36
+ def update_settings_config(current_module_name, modules, module_operate_type, user)
37
+ return if modules.empty?
38
+
39
+ if ModuleOperateType::ADD == module_operate_type
40
+ modules.each do |module_name|
41
+ next if current_module_name == module_name
42
+
43
+ File.open("#{@path}/settings.gradle", 'a') do |file|
44
+ file.puts "\r\ninclude ':module:#{module_name.downcase}'\r\n"
45
+ file.puts "project(':module:#{module_name.downcase}')." \
46
+ "projectDir = new File(rootProject.projectDir," \
47
+ "'#{BigkeeperParser.module_path(user, module_name)}/#{module_name.downcase}-lib')\r\n"
48
+ end
49
+ end
50
+ else
51
+ modules.each do |module_name|
52
+ next if current_module_name == module_name
53
+ temp_file = Tempfile.new('.settings.gradle.tmp')
54
+ begin
55
+ File.open("#{@path}/settings.gradle", 'r') do |file|
56
+ file.each_line do |line|
57
+ unless line =~ /(\s*)include(\s*)('|")(\S*):#{module_name.downcase}('|")(\S*)/ ||
58
+ line =~ /(\s*)project\(('|")(\S*):#{module_name.downcase}('|")\).(\S*)/
59
+ temp_file.puts(line)
60
+ end
61
+ end
62
+ end
63
+ temp_file.close
64
+ FileUtils.mv(temp_file.path, "#{@path}/settings.gradle")
65
+ ensure
66
+ temp_file.close
67
+ temp_file.unlink
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ def update_build_config(current_module_name, modules, module_operate_type)
74
+ return if modules.empty?
75
+
76
+ Dir.glob("#{@path}/*/build.gradle").each do |file_path|
77
+ modules.each do |module_name|
78
+ next if current_module_name == module_name
79
+
80
+ temp_file = Tempfile.new('.build.gradle.tmp')
81
+ begin
82
+ version_flag = false
83
+ version_index = 0
84
+
85
+ File.open(file_path, 'r') do |file|
86
+ file.each_line do |line|
87
+ new_line, version_index, version_flag = generate_build_config(
88
+ line,
89
+ module_name,
90
+ module_operate_type,
91
+ version_index,
92
+ version_flag)
93
+
94
+ temp_file.puts(new_line)
95
+ end
96
+ end
97
+ temp_file.close
98
+ FileUtils.mv(temp_file.path, file_path)
99
+ ensure
100
+ temp_file.close
101
+ temp_file.unlink
102
+ end
103
+ end
104
+ end
105
+ end
106
+
107
+ def generate_build_config(line, module_name, module_operate_type, version_index, version_flag)
108
+ new_line = line
109
+
110
+ version_flag = true if line.downcase.include? 'modifypom'
111
+ if version_flag
112
+ version_index += 1 if line.include? '{'
113
+ version_index -= 1 if line.include? '}'
114
+
115
+ version_flag = false if 0 == version_flag
116
+
117
+ new_line = generate_version_config(line, module_name, module_operate_type)
118
+ else
119
+ new_line = generate_compile_config(line, module_name, module_operate_type)
120
+ end
121
+
122
+ [new_line, version_index, version_flag]
123
+ end
124
+
125
+ def generate_version_config(line, module_name, module_operate_type)
126
+ if ModuleOperateType::FINISH == module_operate_type || ModuleOperateType::PUBLISH == module_operate_type
127
+ branch_name = GitOperator.new.current_branch(@path)
128
+ full_name = ''
129
+
130
+ # Get version part of source.addition
131
+ if ModuleOperateType::PUBLISH == module_operate_type
132
+ full_name = branch_name.sub(/([\s\S]*)\/(\d+.\d+.\d+)_([\s\S]*)/){ $2 }
133
+ else
134
+ full_name = branch_name.sub(/([\s\S]*)\/([\s\S]*)/){ $2 }
135
+ end
136
+
137
+ line.sub(/(\s*)version ('|")(\S*)('|")([\s\S]*)/){
138
+ "#{$1}version '#{full_name}'#{$5}"
139
+ }
140
+ else
141
+ line
142
+ end
143
+ end
144
+
145
+ def generate_compile_config(line, module_name, module_operate_type)
146
+ if ModuleOperateType::ADD == module_operate_type
147
+ line.sub(/(\s*)compile(\s*)('|")(\S*):#{module_name.downcase}:(\S*)('|")(\S*)/){
148
+ "#{$1}compile project(':module:#{module_name.downcase}')"
149
+ }
150
+ elsif ModuleOperateType::DELETE == module_operate_type
151
+ line.sub(/(\s*)([\s\S]*)('|")(\S*):#{module_name.downcase}:(\S*)('|")(\S*)/){
152
+ origin_config_of_module = origin_config_of_module(module_name)
153
+ if origin_config_of_module.empty?
154
+ line
155
+ else
156
+ origin_config_of_module
157
+ end
158
+ }
159
+ elsif ModuleOperateType::FINISH == module_operate_type || ModuleOperateType::PUBLISH == module_operate_type
160
+ branch_name = GitOperator.new.current_branch(@path)
161
+ full_name = ''
162
+
163
+ # Get version part of source.addition
164
+ if ModuleOperateType::PUBLISH == module_operate_type
165
+ full_name = branch_name.sub(/([\s\S]*)\/(\d+.\d+.\d+)_([\s\S]*)/){ $2 }
166
+ else
167
+ full_name = branch_name.sub(/([\s\S]*)\/([\s\S]*)/){ $2 }
168
+ end
169
+ line.sub(/(\s*)([\s\S]*)('|")(\S*):#{module_name.downcase}(:\S*)*('|")(\S*)/){
170
+ if $2.downcase.include? 'modulecompile'
171
+ "#{$1}moduleCompile '#{prefix_of_module(module_name)}:#{module_name.downcase}:#{full_name}-SNAPSHOT'"
172
+ else
173
+ "#{$1}compile '#{prefix_of_module(module_name)}:#{module_name.downcase}:#{full_name}-SNAPSHOT'"
174
+ end
175
+ }
176
+ else
177
+ line
178
+ end
179
+ end
180
+
181
+ def origin_config_of_module(module_name)
182
+ origin_config = ''
183
+
184
+ Dir.glob("#{@path}/.bigkeeper/*/build.gradle").each do |file|
185
+ File.open(file, 'r') do |file|
186
+ file.each_line do |line|
187
+ if line =~ /(\s*)([\s\S]*)('|")(\S*):#{module_name.downcase}:(\S*)('|")(\S*)/
188
+ origin_config = line
189
+ break
190
+ end
191
+ end
192
+ end
193
+ break unless origin_config.empty?
194
+ end
195
+
196
+ origin_config.chop
197
+ end
198
+
199
+ def prefix_of_module(module_name)
200
+ origin_config = origin_config_of_module(module_name)
201
+ prefix = origin_config.sub(/(\s*)([\s\S]*)('|")(\S*)#{module_name.downcase}(\S*)('|")(\S*)/){
202
+ $4
203
+ }
204
+ prefix.chop
205
+ end
206
+
207
+ private :generate_build_config, :generate_compile_config, :generate_version_config, :origin_config_of_module, :prefix_of_module
208
+ end
209
+ end