kookeeper 3.0.0 → 3.0.3

Sign up to get free protection for your applications and to get access to all the features.
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