bigkeeper 0.7.6 → 0.7.7

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