bigkeeper 0.7.6 → 0.7.7

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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/big_keeper.gemspec +3 -3
  4. data/docs/en-US/README.md +2 -2
  5. data/docs/zh-CN/BIGKEEPER_FILE.md +2 -2
  6. data/docs/zh-CN/FEATURE&HOTFIX.md +18 -11
  7. data/lib/big_keeper.rb +9 -289
  8. data/lib/big_keeper/command/feature&hotfix.rb +140 -0
  9. data/lib/big_keeper/command/feature&hotfix/finish.rb +7 -4
  10. data/lib/big_keeper/command/feature&hotfix/publish.rb +7 -6
  11. data/lib/big_keeper/command/feature&hotfix/pull.rb +2 -2
  12. data/lib/big_keeper/command/feature&hotfix/push.rb +2 -2
  13. data/lib/big_keeper/command/feature&hotfix/rebase.rb +2 -2
  14. data/lib/big_keeper/command/feature&hotfix/start.rb +16 -6
  15. data/lib/big_keeper/command/feature&hotfix/switch.rb +4 -6
  16. data/lib/big_keeper/command/feature&hotfix/update.rb +6 -4
  17. data/lib/big_keeper/command/pod.rb +36 -0
  18. data/lib/big_keeper/command/release.rb +68 -0
  19. data/lib/big_keeper/command/release/home.rb +2 -1
  20. data/lib/big_keeper/dependency/dep_gradle_operator.rb +26 -130
  21. data/lib/big_keeper/dependency/dep_operator.rb +4 -10
  22. data/lib/big_keeper/dependency/dep_pod_operator.rb +9 -53
  23. data/lib/big_keeper/dependency/dep_service.rb +2 -2
  24. data/lib/big_keeper/dependency/dep_type.rb +4 -4
  25. data/lib/big_keeper/model/gitflow_type.rb +12 -0
  26. data/lib/big_keeper/service/git_service.rb +2 -2
  27. data/lib/big_keeper/service/module_service.rb +15 -6
  28. data/lib/big_keeper/util/cache_operator.rb +69 -0
  29. data/lib/big_keeper/util/gradle_operator.rb +151 -0
  30. data/lib/big_keeper/util/podfile_operator.rb +4 -4
  31. data/lib/big_keeper/version.rb +1 -1
  32. data/resources/keynote/big-keeper-readme-feature.key +0 -0
  33. metadata +10 -6
@@ -53,13 +53,14 @@ module BigKeeper
53
53
  Logger.highlight(%Q(Start to release/#{version}))
54
54
  # step 2 replace_modules
55
55
  PodfileOperator.new.replace_all_module_release(project_path,
56
+ user,
56
57
  modules,
57
58
  version)
58
59
 
59
60
  # step 3 change Info.plist value
60
61
  InfoPlistOperator.new.change_version_build(project_path, version)
61
62
 
62
- DepService.dep_operator(project_path).install(true, user)
63
+ DepService.dep_operator(project_path, user).install(true)
63
64
  `open #{project_path}/*.xcworkspace`
64
65
  end
65
66
  end
@@ -1,160 +1,56 @@
1
1
  require 'big_keeper/dependency/dep_operator'
2
+ require 'big_keeper/util/gradle_operator'
2
3
 
3
4
  module BigKeeper
4
5
  # Operator for podfile
5
6
  class DepGradleOperator < DepOperator
6
7
 
7
8
  def backup
8
- cache_operator = CacheOperator.new(@path)
9
- cache_operator.save('settings.gradle')
10
- Dir.glob("#{@path}/*/build.gradle").each do |build_gradle_file_path|
11
- build_gradle_file = build_gradle_file_path.gsub!(/#{@path}/, '')
12
- cache_operator.save(build_gradle_file)
13
- end
9
+ GradleOperator.new(@path).backup
14
10
  end
15
11
 
16
12
  def recover
17
- cache_operator = CacheOperator.new(@path)
18
-
19
- cache_operator.load('settings.gradle')
20
- Dir.glob("#{@path}/*/build.gradle").each do |build_gradle_file_path|
21
- build_gradle_file = build_gradle_file_path.gsub!(/#{@path}/, '')
22
- cache_operator.load(build_gradle_file)
23
- end
24
-
25
- cache_operator.clean
26
- end
27
-
28
- def modules_with_branch(modules, branch_name)
29
- full_name = branch_name.sub(/([\s\S]*)\/([\s\S]*)/){ $2 }
30
- file = "#{@path}/app/build.gradle"
31
-
32
- matched_modules = []
33
- File.open(file, 'r') do |file|
34
- file.each_line do |line|
35
- modules.each do |module_name|
36
- if line =~ /compile\s*'\S*#{module_name.downcase}:#{full_name}'\S*/
37
- matched_modules << module_name
38
- break
39
- end
40
- end
41
- end
42
- end
43
- matched_modules
13
+ GradleOperator.new(@path).recover
44
14
  end
45
15
 
46
- def modules_with_type(modules, module_type)
47
- file = "#{@path}/app/build.gradle"
16
+ def update_module_config(module_name, module_type, source)
17
+ GradleOperator.new(@path).update_module_config(module_name, module_type, source)
48
18
 
49
- matched_modules = []
50
- File.open(file, 'r') do |file|
51
- file.each_line do |line|
52
- modules.each do |module_name|
53
- if line =~ regex(module_type, module_name)
54
- matched_modules << module_name
55
- break
56
- end
57
- end
58
- end
59
- end
60
- matched_modules
61
- end
19
+ module_full_path = BigkeeperParser.module_full_path(@path, @user, module_name)
62
20
 
63
- def regex(module_type, module_name)
64
21
  if ModuleType::PATH == module_type
65
- /compile\s*project\('\S*#{module_name.downcase}'\)\S*/
66
- elsif ModuleType::GIT == module_type
67
- /compile\s*'\S*#{module_name.downcase}\S*'\S*/
68
- elsif ModuleType::SPEC == module_type
69
- /compile\s*'\S*#{module_name.downcase}\S*'\S*/
70
- else
71
- //
72
- end
73
- end
22
+ GradleOperator.new(module_full_path).backup
74
23
 
75
- def update_module_config(module_name, module_type, source)
76
- Dir.glob("#{@path}/*/build.gradle").each do |file|
77
- temp_file = Tempfile.new('.build.gradle.tmp')
78
- begin
79
- File.open(file, 'r') do |file|
80
- file.each_line do |line|
81
- temp_file.puts generate_build_config(line, module_name, module_type, source)
82
- end
83
- end
84
- temp_file.close
85
- FileUtils.mv(temp_file.path, file)
86
- ensure
87
- temp_file.close
88
- temp_file.unlink
24
+ all_path_modules = ModuleCacheOperator.new(@path).all_path_modules
25
+ all_path_modules.each do |path_module_name|
26
+ next if path_module_name == module_name
27
+ module_full_path = BigkeeperParser.module_full_path(@path, @user, path_module_name)
28
+ GradleOperator.new(module_full_path).update_module_config(module_name, module_type, source)
89
29
  end
90
- end
91
- end
92
-
93
- def install(should_update, user)
94
- modules = modules_with_type(BigkeeperParser.module_names, ModuleType::PATH)
95
-
96
- CacheOperator.new(@path).load('settings.gradle')
30
+ elsif ModuleType::GIT == module_type
31
+ GradleOperator.new(module_full_path).recover
97
32
 
98
- begin
99
- File.open("#{@path}/settings.gradle", 'a') do |file|
100
- modules.each do |module_name|
101
- file.puts "include ':#{module_name.downcase}'\r\n"
102
- file.puts "project(':#{module_name.downcase}')." \
103
- "projectDir = new File(rootProject.projectDir," \
104
- "'#{BigkeeperParser.module_path(user, module_name)}/#{module_name.downcase}-lib')\r\n"
105
- end
33
+ all_path_modules = ModuleCacheOperator.new(@path).all_path_modules
34
+ all_path_modules.each do |path_module_name|
35
+ next if path_module_name == module_name
36
+ module_full_path = BigkeeperParser.module_full_path(@path, @user, path_module_name)
37
+ GradleOperator.new(module_full_path).update_module_config(module_name, module_type, source)
106
38
  end
107
- ensure
39
+ else
108
40
  end
109
41
  end
110
42
 
111
- def prefix_of_module(module_name)
112
- file = "#{@path}/.bigkeeper/app/build.gradle"
113
- prefix = ''
43
+ def install(should_update)
44
+ modules = ModuleCacheOperator.new(@path).all_path_modules
45
+ GradleOperator.new(@path).update_setting_config('', @user, modules)
114
46
 
115
- File.open(file, 'r') do |file|
116
- file.each_line do |line|
117
- if line =~ /(\s*)([\s\S]*)'(\S*)#{module_name.downcase}(\S*)'(\S*)/
118
- prefix = line.sub(/(\s*)([\s\S]*)'(\S*)#{module_name.downcase}(\S*)'(\S*)/){
119
- $3
120
- }
121
- end
122
- end
47
+ modules.each do |module_name|
48
+ module_full_path = BigkeeperParser.module_full_path(@path, @user, module_name)
49
+ GradleOperator.new(module_full_path).update_setting_config(module_name, @user, modules)
123
50
  end
124
-
125
- prefix.chop
126
51
  end
127
52
 
128
53
  def open
129
54
  end
130
-
131
- def generate_build_config(line, module_name, module_type, source)
132
- if ModuleType::PATH == module_type
133
- line.sub(/(\s*)([\s\S]*)'(\S*)#{module_name.downcase}(\S*)'(\S*)/){
134
- "#{$1}compile project(':#{module_name.downcase}')"
135
- }
136
- elsif ModuleType::GIT == module_type
137
- branch_name = GitOperator.new.current_branch(@path)
138
- full_name = ''
139
-
140
- # Get version part of source.addition
141
- if 'develop' == source.addition || 'master' == source.addition
142
- full_name = branch_name.sub(/([\s\S]*)\/(\d+.\d+.\d+)_([\s\S]*)/){ $2 }
143
- else
144
- full_name = branch_name.sub(/([\s\S]*)\/([\s\S]*)/){ $2 }
145
- end
146
- line.sub(/(\s*)([\s\S]*)'(\S*)#{module_name.downcase}(\S*)'(\S*)/){
147
- "#{$1}compile '#{prefix_of_module(module_name)}#{module_name.downcase}:#{full_name}'"
148
- }
149
- elsif ModuleType::SPEC == module_type
150
- line.sub(/(\s*)([\s\S]*)'(\S*)#{module_name.downcase}(\S*)'(\S*)/){
151
- "#{$1}compile '#{prefix_of_module(module_name)}#{module_name.downcase}:#{source}'"
152
- }
153
- else
154
- line
155
- end
156
- end
157
-
158
- private :generate_build_config, :regex, :prefix_of_module
159
55
  end
160
56
  end
@@ -2,9 +2,11 @@ module BigKeeper
2
2
  # Operator for podfile
3
3
  class DepOperator
4
4
  @path
5
+ @user
5
6
 
6
- def initialize(path)
7
+ def initialize(path, user)
7
8
  @path = path
9
+ @user = user
8
10
  end
9
11
 
10
12
  def backup
@@ -15,19 +17,11 @@ module BigKeeper
15
17
  raise "You should override this method in subclass."
16
18
  end
17
19
 
18
- def modules_with_branch(modules, branch_name)
19
- raise "You should override this method in subclass."
20
- end
21
-
22
- def modules_with_type(modules, module_type)
23
- raise "You should override this method in subclass."
24
- end
25
-
26
20
  def update_module_config(module_name, module_type, source)
27
21
  raise "You should override this method in subclass."
28
22
  end
29
23
 
30
- def install(should_update, user)
24
+ def install(should_update)
31
25
  raise "You should override this method in subclass."
32
26
  end
33
27
 
@@ -17,50 +17,6 @@ module BigKeeper
17
17
  cache_operator.clean
18
18
  end
19
19
 
20
- def modules_with_branch(modules, branch_name)
21
- file = "#{@path}/Podfile"
22
- matched_modules = []
23
- File.open(file, 'r') do |file|
24
- file.each_line do |line|
25
- modules.each do |module_name|
26
- if line =~ /pod\s*'#{module_name}'\s*,\s*:git\s*=>\s*\S*\s*,\s*:branch\s*=>\s*'#{branch_name}'\s*/
27
- matched_modules << module_name
28
- break
29
- end
30
- end
31
- end
32
- end
33
- matched_modules
34
- end
35
-
36
- def modules_with_type(modules, module_type)
37
- file = "#{@path}/Podfile"
38
- matched_modules = []
39
- File.open(file, 'r') do |file|
40
- file.each_line do |line|
41
- modules.each do |module_name|
42
- if line =~ /pod\s*'#{module_name}'\s*,#{regex(module_type)}/
43
- matched_modules << module_name
44
- break
45
- end
46
- end
47
- end
48
- end
49
- matched_modules
50
- end
51
-
52
- def regex(module_type)
53
- if ModuleType::PATH == module_type
54
- "\s*:path\s*=>\s*"
55
- elsif ModuleType::GIT == module_type
56
- "\s*:git\s*=>\s*"
57
- elsif ModuleType::SPEC == module_type
58
- "\s*'"
59
- else
60
- ""
61
- end
62
- end
63
-
64
20
  def update_module_config(module_name, module_type, source)
65
21
  file = "#{@path}/Podfile"
66
22
  temp_file = Tempfile.new('.Podfile.tmp')
@@ -79,7 +35,7 @@ module BigKeeper
79
35
  end
80
36
  end
81
37
 
82
- def install(should_update, user)
38
+ def install(should_update)
83
39
  PodOperator.pod_install(@path, should_update)
84
40
  end
85
41
 
@@ -88,29 +44,29 @@ module BigKeeper
88
44
  end
89
45
 
90
46
  def generate_module_config(line, module_name, module_type, source)
91
- line.sub(/(\s*)pod(\s*)'(\S*)#{module_name}(\S*)'([\s\S]*)#([\s\S]*)/){
47
+ line.sub(/(\s*)pod(\s*)('|")#{module_name}('|")([\s\S]*)/){
92
48
  if ModuleType::PATH == module_type
93
- "#{$1}pod '#{module_name}', :path => '#{source}' ##{$6}"
49
+ "#{$1}pod '#{module_name}', :path => '#{source}'"
94
50
  elsif ModuleType::GIT == module_type
95
51
  # puts source.base
96
52
  # puts source.addition
97
53
  if GitType::BRANCH == source.type
98
- "#{$1}pod '#{module_name}', :git => '#{source.base}', :branch => '#{source.addition}' ##{$6}"
54
+ "#{$1}pod '#{module_name}', :git => '#{source.base}', :branch => '#{source.addition}'"
99
55
  elsif GitType::TAG == source.type
100
- "#{$1}pod '#{module_name}', :git => '#{source.base}', :tag => '#{source.addition}' ##{$6}"
56
+ "#{$1}pod '#{module_name}', :git => '#{source.base}', :tag => '#{source.addition}'"
101
57
  elsif GitType::COMMIT == source.type
102
- "#{$1}pod '#{module_name}', :git => '#{source.base}', :commit => '#{source.addition}' ##{$6}"
58
+ "#{$1}pod '#{module_name}', :git => '#{source.base}', :commit => '#{source.addition}'"
103
59
  else
104
- "#{$1}pod '#{module_name}', :git => '#{source.base}' ##{$6}"
60
+ "#{$1}pod '#{module_name}', :git => '#{source.base}'"
105
61
  end
106
62
  elsif ModuleType::SPEC == module_type
107
- "#{$1}pod '#{module_name}', '#{source}' ##{$6}"
63
+ "#{$1}pod '#{module_name}', '#{source}'"
108
64
  else
109
65
  line
110
66
  end
111
67
  }
112
68
  end
113
69
 
114
- private :generate_module_config, :regex
70
+ private :generate_module_config
115
71
  end
116
72
  end
@@ -7,8 +7,8 @@ require 'big_keeper/dependency/dep_type'
7
7
  module BigKeeper
8
8
  # Operator for podfile
9
9
  class DepService
10
- def self.dep_operator(path)
11
- DepType.operator(path)
10
+ def self.dep_operator(path, user)
11
+ DepType.operator(path, user)
12
12
  end
13
13
  end
14
14
  end
@@ -19,14 +19,14 @@ module BigKeeper
19
19
  end
20
20
  end
21
21
 
22
- def self.operator(path)
22
+ def self.operator(path, user)
23
23
  operator_type = type(path)
24
24
  if COCOAPODS == operator_type
25
- DepPodOperator.new(path)
25
+ DepPodOperator.new(path, user)
26
26
  elsif GRADLE == operator_type
27
- DepGradleOperator.new(path)
27
+ DepGradleOperator.new(path, user)
28
28
  else
29
- DepOperator.new(path)
29
+ DepOperator.new(path, user)
30
30
  end
31
31
  end
32
32
  end
@@ -16,6 +16,18 @@ module BigKeeper
16
16
  end
17
17
  end
18
18
 
19
+ def self.command(type)
20
+ if FEATURE == type
21
+ :feature
22
+ elsif HOTFIX == type
23
+ :hotfix
24
+ elsif RELEASE == type
25
+ :release
26
+ else
27
+ :feature
28
+ end
29
+ end
30
+
19
31
  def self.base_branch(type)
20
32
  if FEATURE == type
21
33
  "develop"
@@ -13,11 +13,11 @@ module BigKeeper
13
13
  branch_name = "#{GitflowType.name(type)}/#{name}"
14
14
  if !git.has_remote_branch(path, branch_name) && !git.has_local_branch(path, branch_name)
15
15
 
16
- GitflowOperator.new.verify_git_flow(path)
17
-
18
16
  verify_special_branch(path, 'master')
19
17
  verify_special_branch(path, 'develop')
20
18
 
19
+ GitflowOperator.new.verify_git_flow(path)
20
+
21
21
  GitflowOperator.new.start(path, name, type)
22
22
  git.push_to_remote(path, branch_name)
23
23
  else
@@ -1,5 +1,7 @@
1
1
  require 'big_keeper/service/git_service'
2
+
2
3
  require 'big_keeper/util/logger'
4
+ require 'big_keeper/util/cache_operator'
3
5
 
4
6
  module BigKeeper
5
7
  # Operator for got
@@ -72,12 +74,13 @@ module BigKeeper
72
74
 
73
75
  verify_module(path, user, module_name, home_branch_name, type)
74
76
 
75
- GitService.new.verify_push(module_full_path, "publish branch #{home_branch_name}", home_branch_name, module_name)
76
-
77
77
  module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
78
+ GitService.new.verify_push(module_full_path, "publish branch #{home_branch_name}", home_branch_name, module_name)
78
79
  GitService.new.verify_rebase(module_full_path, GitflowType.base_branch(type), module_name)
79
80
 
80
81
  `open #{BigkeeperParser.module_pulls(module_name)}`
82
+
83
+ ModuleCacheOperator.new(path).del_branch_module(module_name)
81
84
  end
82
85
 
83
86
  def finish(path, user, module_name, home_branch_name, type)
@@ -89,10 +92,13 @@ module BigKeeper
89
92
  GitService.new.verify_push(module_full_path, "finish branch #{home_branch_name}", home_branch_name, module_name)
90
93
 
91
94
  module_git = BigkeeperParser.module_git(module_name)
92
- DepService.dep_operator(path).update_module_config(
95
+
96
+ DepService.dep_operator(path, user).update_module_config(
93
97
  module_name,
94
98
  ModuleType::GIT,
95
99
  GitInfo.new(module_git, GitType::BRANCH, home_branch_name))
100
+
101
+ ModuleCacheOperator.new(path).add_branch_module(module_name)
96
102
  end
97
103
 
98
104
  def add(path, user, module_name, name, type)
@@ -103,10 +109,12 @@ module BigKeeper
103
109
  verify_module(path, user, module_name, home_branch_name, type)
104
110
 
105
111
  module_path = BigkeeperParser.module_path(user, module_name)
106
- DepService.dep_operator(path).update_module_config(
112
+ DepService.dep_operator(path, user).update_module_config(
107
113
  module_name,
108
114
  ModuleType::PATH,
109
115
  module_path)
116
+
117
+ ModuleCacheOperator.new(path).add_path_module(module_name)
110
118
  end
111
119
 
112
120
  def del(path, user, module_name, name, type)
@@ -122,11 +130,12 @@ module BigKeeper
122
130
  # GitOperator.new.del(module_full_path, home_branch_name)
123
131
 
124
132
  module_git = BigkeeperParser.module_git(module_name)
125
-
126
- DepService.dep_operator(path).update_module_config(
133
+ DepService.dep_operator(path, user).update_module_config(
127
134
  module_name,
128
135
  ModuleType::GIT,
129
136
  GitInfo.new(module_git, GitType::BRANCH, GitflowType.base_branch(type)))
137
+
138
+ ModuleCacheOperator.new(path).del_path_module(module_name)
130
139
  end
131
140
  end
132
141
  end