big_keeper 0.7.0 → 0.7.1

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/Gemfile.lock +1 -1
  3. data/README.md +79 -20
  4. data/bin/{big-keeper → bigkeeper} +0 -0
  5. data/docs/en-US/README.md +50 -0
  6. data/docs/zh-CN/BIGKEEPER_FILE.md +2 -2
  7. data/docs/zh-CN/FEATURE&HOTFIX.md +121 -0
  8. data/docs/zh-CN/PODFILE.md +43 -0
  9. data/docs/zh-CN/README.md +33 -15
  10. data/docs/zh-CN/RECOMMEND.md +22 -0
  11. data/docs/zh-CN/RELEASE.md +8 -5
  12. data/lib/big_keeper/command/feature&hotfix/delete.rb +33 -0
  13. data/lib/big_keeper/command/feature&hotfix/{feature_finish.rb → finish.rb} +13 -12
  14. data/lib/big_keeper/command/feature&hotfix/{feature_pull.rb → pull.rb} +4 -4
  15. data/lib/big_keeper/command/feature&hotfix/{feature_push.rb → push.rb} +4 -8
  16. data/lib/big_keeper/command/feature&hotfix/{feature_start.rb → start.rb} +7 -7
  17. data/lib/big_keeper/command/feature&hotfix/{feature_switch.rb → switch.rb} +6 -6
  18. data/lib/big_keeper/command/feature&hotfix/{feature_update.rb → update.rb} +7 -7
  19. data/lib/big_keeper/command/release/{release_home.rb → home.rb} +4 -4
  20. data/lib/big_keeper/command/release/module.rb +106 -0
  21. data/lib/big_keeper/model/gitflow_type.rb +13 -1
  22. data/lib/big_keeper/service/git_service.rb +84 -40
  23. data/lib/big_keeper/service/module_service.rb +52 -62
  24. data/lib/big_keeper/util/bigkeeper_parser.rb +19 -3
  25. data/lib/big_keeper/util/git_operator.rb +19 -12
  26. data/lib/big_keeper/version.rb +1 -1
  27. data/lib/big_keeper.rb +131 -25
  28. data/resources/banner.png +0 -0
  29. data/resources/keynote/big-keeper-readme-example.key +0 -0
  30. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.001.jpeg +0 -0
  31. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.002.jpeg +0 -0
  32. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.003.jpeg +0 -0
  33. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.004.jpeg +0 -0
  34. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.005.jpeg +0 -0
  35. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.006.jpeg +0 -0
  36. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.007.jpeg +0 -0
  37. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.008.jpeg +0 -0
  38. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.009.jpeg +0 -0
  39. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.010.jpeg +0 -0
  40. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.011.jpeg +0 -0
  41. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.012.jpeg +0 -0
  42. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.013.jpeg +0 -0
  43. data/resources/keynote/big-keeper-readme-feature/big-keeper-readme-feature.014.jpeg +0 -0
  44. data/resources/keynote/big-keeper-readme-feature.key +0 -0
  45. data/resources/keynote/big-keeper-readme-release.key +0 -0
  46. data/resources/readme/big-keeper-readme.008.png +0 -0
  47. data/resources/readme/big-keeper-readme.009.png +0 -0
  48. data/resources/readme/big-keeper-readme.010.png +0 -0
  49. data/resources/readme/big-keeper-readme.011.png +0 -0
  50. data/resources/readme/big-keeper-readme.012.png +0 -0
  51. metadata +40 -17
  52. data/docs/zh-CN/FEATURE.md +0 -88
  53. data/lib/big_keeper/command/release/release_module.rb +0 -86
  54. data/lib/big_keeper/command/release/release_module.sh +0 -44
  55. data/resources/readme/big-keeper-readme.008.jpeg +0 -0
  56. data/resources/readme/big-keeper-readme.009.jpeg +0 -0
  57. data/resources/readme/big-keeper-readme.010.jpeg +0 -0
@@ -2,23 +2,19 @@ require 'big_keeper/util/logger'
2
2
 
3
3
  module BigKeeper
4
4
 
5
- def self.feature_push(path, user, comment)
5
+ def self.push(path, user, comment, type)
6
6
  begin
7
7
  # Parse Bigkeeper file
8
8
  BigkeeperParser.parse("#{path}/Bigkeeper")
9
-
10
9
  branch_name = GitOperator.new.current_branch(path)
11
- Logger.error("Not a feature branch, exit.") unless branch_name.include? 'feature'
10
+
11
+ Logger.error("Not a #{GitflowType.name(type)} branch, exit.") unless branch_name.include? GitflowType.name(type)
12
12
 
13
13
  modules = PodfileOperator.new.modules_with_type("#{path}/Podfile",
14
14
  BigkeeperParser.module_names, ModuleType::PATH)
15
15
 
16
16
  modules.each do |module_name|
17
- module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
18
- module_branch_name = GitOperator.new.current_branch(module_full_path)
19
-
20
- Logger.highlight("Push branch '#{branch_name}' for module '#{module_name}'...")
21
- GitService.new.verify_push(path, comment, module_branch_name, module_name)
17
+ ModuleService.new.push(path, user, module_name, branch_name, type, comment)
22
18
  end
23
19
 
24
20
  Logger.highlight("Push branch '#{branch_name}' for 'Home'...")
@@ -13,16 +13,16 @@ require 'big_keeper/service/module_service'
13
13
 
14
14
 
15
15
  module BigKeeper
16
- def self.feature_start(path, version, user, name, modules)
16
+ def self.start(path, version, user, name, modules, type)
17
17
  begin
18
18
  # Parse Bigkeeper file
19
19
  BigkeeperParser.parse("#{path}/Bigkeeper")
20
20
 
21
21
  version = BigkeeperParser.version if version == 'Version in Bigkeeper file'
22
- feature_name = "#{version}_#{user}_#{name}"
23
- branch_name = "#{GitflowType.name(GitflowType::FEATURE)}/#{feature_name}"
22
+ full_name = "#{version}_#{user}_#{name}"
23
+ branch_name = "#{GitflowType.name(type)}/#{full_name}"
24
24
 
25
- GitService.new.verify_branch(path, branch_name, OperateType::START)
25
+ GitService.new.verify_home_branch(path, branch_name, OperateType::START)
26
26
 
27
27
  stash_modules = PodfileOperator.new.modules_with_type("#{path}/Podfile",
28
28
  BigkeeperParser.module_names, ModuleType::PATH)
@@ -41,18 +41,18 @@ module BigKeeper
41
41
 
42
42
  Logger.highlight("Add branch '#{branch_name}' for 'Home'...")
43
43
  # Start home feature
44
- GitService.new.start(path, feature_name, GitflowType::FEATURE)
44
+ GitService.new.start(path, full_name, type)
45
45
 
46
46
  # Modify podfile as path and Start modules feature
47
47
  modules.each do |module_name|
48
- ModuleService.new.add(path, user, module_name, feature_name, GitflowType::FEATURE)
48
+ ModuleService.new.add(path, user, module_name, full_name, type)
49
49
  end
50
50
 
51
51
  # pod install
52
52
  PodOperator.pod_install(path)
53
53
 
54
54
  # Push home changes to remote
55
- GitService.new.verify_push(path, "init #{GitflowType.name(GitflowType::FEATURE)} #{feature_name}", branch_name, 'Home')
55
+ GitService.new.verify_push(path, "init #{GitflowType.name(type)} #{full_name}", branch_name, 'Home')
56
56
 
57
57
  # Open home workspace
58
58
  `open #{path}/*.xcworkspace`
@@ -4,16 +4,16 @@ require 'big_keeper/util/logger'
4
4
  require 'big_keeper/util/pod_operator'
5
5
 
6
6
  module BigKeeper
7
- def self.feature_switch(path, version, user, name)
7
+ def self.switch_to(path, version, user, name, type)
8
8
  begin
9
9
  # Parse Bigkeeper file
10
10
  BigkeeperParser.parse("#{path}/Bigkeeper")
11
11
 
12
12
  version = BigkeeperParser.version if version == 'Version in Bigkeeper file'
13
- feature_name = "#{version}_#{user}_#{name}"
14
- branch_name = "#{GitflowType.name(GitflowType::FEATURE)}/#{feature_name}"
13
+ full_name = "#{version}_#{user}_#{name}"
14
+ branch_name = "#{GitflowType.name(type)}/#{full_name}"
15
15
 
16
- GitService.new.verify_branch(path, branch_name, OperateType::SWITCH)
16
+ GitService.new.verify_home_branch(path, branch_name, OperateType::SWITCH)
17
17
 
18
18
  stash_modules = PodfileOperator.new.modules_with_type("#{path}/Podfile",
19
19
  BigkeeperParser.module_names, ModuleType::PATH)
@@ -22,7 +22,7 @@ module BigKeeper
22
22
  StashService.new.stash_all(path, branch_name, user, stash_modules)
23
23
 
24
24
  # Switch to new feature
25
- GitOperator.new.git_checkout(path, branch_name)
25
+ GitOperator.new.checkout(path, branch_name)
26
26
  GitOperator.new.pull(path)
27
27
 
28
28
  # Apply home stash
@@ -32,7 +32,7 @@ module BigKeeper
32
32
  BigkeeperParser.module_names, ModuleType::PATH)
33
33
 
34
34
  modules.each do |module_name|
35
- ModuleService.new.switch(path, user, module_name, branch_name)
35
+ ModuleService.new.switch_to(path, user, module_name, branch_name, type)
36
36
  end
37
37
 
38
38
  # pod install
@@ -13,15 +13,15 @@ require 'big_keeper/service/module_service'
13
13
 
14
14
 
15
15
  module BigKeeper
16
- def self.feature_update(path, user, modules)
16
+ def self.update(path, user, modules, type)
17
17
  begin
18
18
  # Parse Bigkeeper file
19
19
  BigkeeperParser.parse("#{path}/Bigkeeper")
20
-
21
20
  branch_name = GitOperator.new.current_branch(path)
22
- Logger.error("Not a feature branch, exit.") unless branch_name.include? 'feature'
23
21
 
24
- feature_name = branch_name.gsub(/feature\//, '')
22
+ Logger.error("Not a #{GitflowType.name(type)} branch, exit.") unless branch_name.include? GitflowType.name(type)
23
+
24
+ full_name = branch_name.gsub(/#{GitflowType.name(type)}\//, '')
25
25
 
26
26
  current_modules = PodfileOperator.new.modules_with_type("#{path}/Podfile",
27
27
  BigkeeperParser.module_names, ModuleType::PATH)
@@ -41,15 +41,15 @@ module BigKeeper
41
41
  del_modules = current_modules - modules
42
42
 
43
43
  if add_modules.empty? and del_modules.empty?
44
- Logger.info("There is nothing changed with modules #{modules}.")
44
+ Logger.default("There is nothing changed with modules #{modules}.")
45
45
  else
46
46
  # Modify podfile as path and Start modules feature
47
47
  add_modules.each do |module_name|
48
- ModuleService.new.add(path, user, module_name, feature_name, GitflowType::FEATURE)
48
+ ModuleService.new.add(path, user, module_name, full_name, type)
49
49
  end
50
50
 
51
51
  del_modules.each do |module_name|
52
- ModuleService.new.del(path, user, module_name, feature_name, GitflowType::FEATURE)
52
+ ModuleService.new.del(path, user, module_name, full_name, type)
53
53
  end
54
54
 
55
55
  # pod install
@@ -16,12 +16,12 @@ module BigKeeper
16
16
  if GitOperator.new.has_branch(path, "release/#{version}")
17
17
  if GitOperator.new.current_branch(path) == "release/#{version}"
18
18
  GitOperator.new.commit(path, "release: V #{version}")
19
- GitOperator.new.first_push(path, "release/#{version}")
19
+ GitOperator.new.push_to_remote(path, "release/#{version}")
20
20
  GitflowOperator.new.finish_release(path, version)
21
21
  if GitOperator.new.current_branch(path) == "master"
22
22
  GitOperator.new.tag(path, version)
23
23
  else
24
- GitOperator.new.git_checkout(path, "master")
24
+ GitOperator.new.checkout(path, "master")
25
25
  GitOperator.new.tag(path, version)
26
26
  end
27
27
  else
@@ -43,10 +43,10 @@ module BigKeeper
43
43
  # step 1 checkout release
44
44
  if GitOperator.new.current_branch(project_path) != "release/#{version}"
45
45
  if GitOperator.new.has_branch(project_path, "release/#{version}")
46
- GitOperator.new.git_checkout(project_path, "release/#{version}")
46
+ GitOperator.new.checkout(project_path, "release/#{version}")
47
47
  else
48
48
  GitflowOperator.new.start(project_path, version, GitflowType::RELEASE)
49
- GitOperator.new.first_push(project_path, "release/#{version}")
49
+ GitOperator.new.push_to_remote(project_path, "release/#{version}")
50
50
  end
51
51
  end
52
52
 
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/ruby
2
+ require 'big_keeper/util/podfile_operator'
3
+ require 'big_keeper/util/gitflow_operator'
4
+ require 'big_keeper/model/podfile_type'
5
+ require 'big_keeper/util/info_plist_operator'
6
+ require 'big_keeper/util/git_operator'
7
+ require 'big_keeper/util/logger'
8
+
9
+ module BigKeeper
10
+ def self.release_module_start(path, version, user, module_name)
11
+ BigkeeperParser.parse("#{path}/Bigkeeper")
12
+
13
+ Dir.chdir(path) do
14
+ git_info = GitInfo.new(BigkeeperParser::home_git, GitType::TAG, version)
15
+ module_path = self.get_module_path_default(path, user, module_name)
16
+ start_module_release(module_path, version, module_name, git_info, user)
17
+ end
18
+ end
19
+
20
+ def self.release_module_finish(path, version, user, module_name)
21
+ BigkeeperParser.parse("#{path}/Bigkeeper")
22
+ module_path = self.get_module_path_default(path, user, module_name)
23
+
24
+ Logger.error("current branch has changed") unless GitOperator.new.has_changes(module_path)
25
+ # check out master
26
+ if GitOperator.new.current_branch(module_path) != "master"
27
+ current_name = GitOperator.new.current_branch(module_path)
28
+ GitOperator.new.checkout(module_path, "master")
29
+ Logger.highlight("Push branch '#{current_name}' for '#{module_name}'...")
30
+ GitService.new.verify_push(module_path, "finish #{GitflowType.name(GitflowType::RELEASE)} #{current_name}", "master", "#{module_name}")
31
+ end
32
+ return
33
+
34
+ Dir.chdir(module_path) do
35
+ # rebase develop to master
36
+ Logger.highlight(%Q(Rebase develop to master))
37
+
38
+ #修改 podspec 文件
39
+ # TO DO: - advanced to use Regular Expression
40
+ PodfileOperator.new.podspec_change(%Q(#{module_path}/#{module_name}.podspec), version, module_name)
41
+
42
+ GitService.new.verify_rebase(module_path, 'develop', "#{module_name}")
43
+ GitOperator.new.verify_push(module_path, "finish rebase develop to master", "master", "#{module_name}")
44
+ GitOperator.new.tag(module_path, version)
45
+
46
+ Logger.highlight(%Q(Start Pod repo push #{module_name}))
47
+ IO.popen("pod repo push #{module_name} #{module_name}.podspec --allow-warnings --sources=#{BigkeeperParser::sourcemodule_path}") do |io|
48
+ io.each do |line|
49
+ has_error = true if line.include? "ERROR"
50
+ end
51
+ end
52
+ if has_error
53
+ Logger.error("Pod repo push in '#{module_name}'")
54
+ return
55
+ end
56
+
57
+ Logger.highlight(%Q(Success release #{module_name} V#{version}))
58
+ end
59
+ end
60
+
61
+ private
62
+ def self.start_module_release(module_path, version, module_name, source, user)
63
+ if GitOperator.new.has_changes(module_path)
64
+ StashService.new.stash_all(module_path, GitOperator.new.current_branch(module_path), user, module_name.split())
65
+ end
66
+
67
+ # step 1 checkout to develop branch
68
+ Logger.highlight(%Q(Start checkout #{module_name} to Branch develop))
69
+ if GitOperator.new.current_branch(module_path) != "develop"
70
+ if GitOperator.new.has_branch(module_path, "develop")
71
+ GitOperator.new.checkout(module_path, "develop")
72
+ else
73
+ Logger.error("Cann't find develop branch, please check.")
74
+ end
75
+ end
76
+
77
+ Dir.chdir(module_path) do
78
+ # Pod lib lint
79
+ Logger.highlight(%Q(Start Pod lib lint #{module_name}))
80
+ has_error = false
81
+ IO.popen("pod lib lint --allow-warnings --verbose --use-libraries --sources=#{BigkeeperParser::sourcemodule_path}") do |io|
82
+ io.each do |line|
83
+ has_error = true if line.include? "ERROR"
84
+ end
85
+ end
86
+ if has_error
87
+ Logger.error("Pod lib error in '#{module_name}'")
88
+ return
89
+ end
90
+ end
91
+
92
+ GitOperator.new.commit(module_path, "update podspec")
93
+ GitOperator.new.first_push(module_path, GitOperator.new.current_branch(module_path))
94
+ Logger.highlight(%Q(Pod lib lint success))
95
+ end
96
+
97
+ def self.get_module_path_default(path, user, module_name)
98
+ module_path = BigkeeperParser::module_path(user, module_name)
99
+ if module_path == "../#{module_name}"
100
+ path_array = path.split('/')
101
+ path_array.pop()
102
+ module_path = path_array.join('/') + "/#{module_name}"
103
+ end
104
+ module_path
105
+ end
106
+ end
@@ -12,7 +12,19 @@ module BigKeeper
12
12
  elsif RELEASE == type
13
13
  "release"
14
14
  else
15
- name
15
+ "feature"
16
+ end
17
+ end
18
+
19
+ def self.base_branch(type)
20
+ if FEATURE == type
21
+ "develop"
22
+ elsif HOTFIX == type
23
+ "master"
24
+ elsif RELEASE == type
25
+ "develop"
26
+ else
27
+ "master"
16
28
  end
17
29
  end
18
30
  end
@@ -7,70 +7,82 @@ module BigKeeper
7
7
  # Operator for got
8
8
  class GitService
9
9
  def start(path, name, type)
10
- if GitOperator.new.has_remote_branch(path, 'master')
11
- if GitOperator.new.has_local_branch(path, 'master')
12
- if GitOperator.new.has_commits(path, 'master')
13
- Logger.error(%Q('master' has unpushed commits, you should fix it))
14
- else
15
- GitOperator.new.git_checkout(path, 'master')
16
- GitOperator.new.pull(path)
17
- end
18
- else
19
- GitOperator.new.git_checkout(path, 'master')
10
+ git = GitOperator.new
11
+
12
+ branch_name = "#{GitflowType.name(type)}/#{name}"
13
+ if !git.has_remote_branch(path, branch_name) && !git.has_local_branch(path, branch_name)
14
+
15
+ verify_special_branch(path, 'master')
16
+ verify_special_branch(path, 'develop')
17
+
18
+ GitflowOperator.new.start(path, name, type)
19
+ git.push_to_remote(path, branch_name)
20
+ else
21
+ verify_checkout(path, branch_name)
22
+
23
+ if !git.has_remote_branch(path, branch_name)
24
+ git.push_to_remote(path, branch_name)
20
25
  end
21
26
  end
27
+ end
22
28
 
23
- if GitOperator.new.has_remote_branch(path, 'develop')
24
- if GitOperator.new.has_local_branch(path, 'develop')
25
- if GitOperator.new.has_commits(path, 'develop')
26
- Logger.error(%Q('develop' has unpushed commits, you should fix it))
27
- else
28
- GitOperator.new.git_checkout(path, 'develop')
29
- GitOperator.new.pull(path)
29
+ def verify_checkout(path, branch_name)
30
+ Dir.chdir(path) do
31
+ cmd = "git checkout -b #{branch_name}"
32
+ if GitOperator.new.has_branch(path, branch_name)
33
+ cmd = "git checkout #{branch_name}"
34
+ end
35
+ IO.popen(cmd) do |io|
36
+ io.each do |line|
37
+ Logger.error("Checkout #{branch_name} failed.") if line.include? 'error'
30
38
  end
31
- else
32
- GitOperator.new.git_checkout(path, 'develop')
33
39
  end
34
40
  end
41
+ end
35
42
 
36
- if !GitflowOperator.new.verify_git_flow(path)
37
- GitOperator.new.first_push(path, 'develop') if !GitOperator.new.has_remote_branch(path, 'develop')
38
- GitOperator.new.first_push(path, 'master') if !GitOperator.new.has_remote_branch(path, 'master')
39
- end
43
+ def verify_special_branch(path, name)
44
+ git = GitOperator.new
40
45
 
41
- branch_name = "#{GitflowType.name(type)}/#{name}"
42
- if GitOperator.new.has_branch(path, branch_name)
43
- GitOperator.new.git_checkout(path, branch_name)
44
- GitOperator.new.pull(path)
46
+ if git.has_remote_branch(path, name)
47
+ if git.has_local_branch(path, name)
48
+ if git.has_commits(path, name)
49
+ Logger.error(%Q('#{name}' has unpushed commits, you should fix it manually...))
50
+ end
51
+ pull(path, name)
52
+ else
53
+ git.checkout(path, name)
54
+ end
45
55
  else
46
- GitflowOperator.new.start(path, name, type)
47
- GitOperator.new.first_push(path, branch_name)
56
+ verify_checkout(path, name)
57
+ git.push_to_remote(path, name)
48
58
  end
49
59
  end
50
60
 
51
- def verify_branch(path, branch_name, type)
61
+ def verify_home_branch(path, branch_name, type)
52
62
  Logger.highlight('Sync local branchs from remote, waiting...')
53
- GitOperator.new.git_fetch(path)
63
+ git = GitOperator.new
64
+
65
+ git.fetch(path)
54
66
 
55
67
  if OperateType::START == type
56
- if GitOperator.new.current_branch(path) == branch_name
68
+ if git.current_branch(path) == branch_name
57
69
  Logger.error(%(Current branch is '#{branch_name}' already. Use 'update' please))
58
70
  end
59
- if GitOperator.new.has_branch(path, branch_name)
71
+ if git.has_branch(path, branch_name)
60
72
  Logger.error(%(Branch '#{branch_name}' already exists. Use 'switch' please))
61
73
  end
62
74
  elsif OperateType::SWITCH == type
63
- if !GitOperator.new.has_branch(path, branch_name)
75
+ if !git.has_branch(path, branch_name)
64
76
  Logger.error(%(Can't find a branch named '#{branch_name}'. Use 'start' please))
65
77
  end
66
- if GitOperator.new.current_branch(path) == branch_name
78
+ if git.current_branch(path) == branch_name
67
79
  Logger.error(%(Current branch is '#{branch_name}' already. Use 'update' please))
68
80
  end
69
81
  elsif OperateType::UPDATE == type
70
- if !GitOperator.new.has_branch(path, branch_name)
82
+ if !git.has_branch(path, branch_name)
71
83
  Logger.error(%(Can't find a branch named '#{branch_name}'. Use 'start' please))
72
84
  end
73
- if GitOperator.new.current_branch(path) != branch_name
85
+ if git.current_branch(path) != branch_name
74
86
  Logger.error(%(Current branch is not '#{branch_name}'. Use 'switch' please))
75
87
  end
76
88
  else
@@ -90,14 +102,46 @@ module BigKeeper
90
102
  branchs
91
103
  end
92
104
 
105
+ def pull(path, branch_name)
106
+ git = GitOperator.new
107
+ if git.current_branch(path) == branch_name
108
+ git.pull(path)
109
+ else
110
+ Dir.chdir(path) do
111
+ `git pull origin #{branch_name}:#{branch_name}`
112
+ end
113
+ end
114
+ end
115
+
116
+ def verify_del(path, branch_name, name, type)
117
+ git = GitOperator.new
118
+
119
+ if git.has_local_branch(path, branch_name)
120
+ Logger.highlight("Delete local branch '#{branch_name}' for '#{name}'...")
121
+
122
+ if git.current_branch(path) == branch_name
123
+ git.dicard(path)
124
+ git.checkout(path, GitflowType.base_branch(type))
125
+ end
126
+ git.del_local(path, branch_name)
127
+ end
128
+
129
+ if git.has_remote_branch(path, branch_name)
130
+ Logger.highlight("Delete remote branch '#{branch_name}' for '#{name}'...")
131
+ git.del_remote(path, branch_name)
132
+ end
133
+ end
134
+
93
135
  def verify_push(path, comment, branch_name, name)
94
136
  git = GitOperator.new
95
137
  if git.has_changes(path)
96
138
  git.commit(path, comment)
97
139
  if git.has_remote_branch(path, branch_name)
98
- git.push(path)
140
+ Dir.chdir(path) do
141
+ `git push`
142
+ end
99
143
  else
100
- git.first_push(path, branch_name)
144
+ git.push_to_remote(path, branch_name)
101
145
  end
102
146
  else
103
147
  Logger.default("Nothing to push for '#{name}'.")
@@ -126,7 +170,7 @@ module BigKeeper
126
170
  end
127
171
  end
128
172
  `git push -f origin #{branch_name}`
129
- GitOperator.new.git_checkout(path, 'develop')
173
+ GitOperator.new.checkout(path, 'develop')
130
174
  end
131
175
  end
132
176
  end
@@ -4,91 +4,81 @@ require 'big_keeper/util/logger'
4
4
  module BigKeeper
5
5
  # Operator for got
6
6
  class ModuleService
7
- def pull(path, user, module_name, branch_name)
8
- module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
9
7
 
10
- Logger.highlight("Pull branch '#{branch_name}' for module '#{module_name}'...")
8
+ def verify_module(path, user, module_name, home_branch_name, type)
9
+ name = home_branch_name.gsub(/#{GitflowType.name(type)}\//, '')
10
+ module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
11
11
 
12
+ git = GitOperator.new
12
13
  if !File.exist? module_full_path
13
14
  Logger.default("No local repository for module '#{module_name}', clone it...")
14
15
  module_git = BigkeeperParser.module_git(module_name)
15
- GitOperator.new.clone(File.expand_path("#{module_full_path}/../"), module_git)
16
- GitOperator.new.git_checkout(module_full_path, branch_name)
17
- else
18
- current_branch_name = GitOperator.new.current_branch(module_full_path)
19
- if current_branch_name != branch_name
20
- Logger.default("Current branch of '#{module_name}' is '#{current_branch_name}',\
21
- stash it and checkout '#{branch_name}'...")
22
-
23
- StashService.new.stash(module_full_path, current_branch_name, module_name)
24
-
25
- GitOperator.new.git_checkout(module_full_path, branch_name)
26
- end
27
- GitOperator.new.pull(module_full_path)
16
+ git.new.clone(File.expand_path("#{module_full_path}/../"), module_git)
28
17
  end
29
- end
30
18
 
31
- def switch(path, user, module_name, branch_name)
32
- module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
19
+ current_branch_name = git.current_branch(module_full_path)
20
+ if current_branch_name != home_branch_name
21
+ # stash current branch
22
+ StashService.new.stash(module_full_path, current_branch_name, module_name)
33
23
 
34
- Logger.highlight("Switch to branch '#{branch_name}' for module '#{module_name}'...")
24
+ GitService.new.start(module_full_path, name, type)
35
25
 
36
- if !File.exist? module_full_path
37
- Logger.default("No local repository for module '#{module_name}', clone it...")
38
- module_git = BigkeeperParser.module_git(module_name)
39
- GitOperator.new.clone(File.expand_path("#{module_full_path}/../"), module_git)
40
- GitOperator.new.git_checkout(module_full_path, branch_name)
41
- else
42
- GitOperator.new.git_checkout(module_full_path, branch_name)
43
- GitOperator.new.pull(module_full_path)
26
+ StashService.new.pop_stash(module_full_path, home_branch_name, module_name)
44
27
  end
45
-
46
- StashService.new.pop_stash(module_full_path, branch_name, module_name)
47
28
  end
48
29
 
49
- def finish(path, user, module_name)
50
- module_git = BigkeeperParser.module_git(module_name)
30
+ def push(path, user, module_name, home_branch_name, type, comment)
31
+ Logger.highlight("Push branch '#{home_branch_name}' for module '#{module_name}'...")
32
+
33
+ verify_module(path, user, module_name, home_branch_name, type)
34
+
51
35
  module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
52
- branch_name = GitOperator.new.current_branch(module_full_path)
36
+ GitService.new.verify_push(module_full_path, comment, home_branch_name, module_name)
37
+ end
53
38
 
54
- Logger.highlight("Finish branch '#{branch_name}' for module '#{module_name}'...")
39
+ def pull(path, user, module_name, home_branch_name, type)
40
+ Logger.highlight("Pull branch '#{home_branch_name}' for module '#{module_name}'...")
55
41
 
56
- PodfileOperator.new.find_and_replace("#{path}/Podfile",
57
- module_name,
58
- ModuleType::GIT,
59
- GitInfo.new(module_git, GitType::BRANCH, branch_name))
42
+ verify_module(path, user, module_name, home_branch_name, type)
60
43
 
61
- GitService.new.verify_rebase(module_full_path, 'develop', module_name)
44
+ module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
45
+ GitOperator.new.pull(module_full_path)
46
+ end
62
47
 
63
- `open #{BigkeeperParser.module_pulls(module_name)}`
48
+ def switch_to(path, user, module_name, home_branch_name, type)
49
+ Logger.highlight("Switch to branch '#{home_branch_name}' for module '#{module_name}'...")
50
+
51
+ verify_module(path, user, module_name, home_branch_name, type)
64
52
  end
65
53
 
66
- def add(path, user, module_name, name, type)
67
- branch_name = "#{GitflowType.name(type)}/#{name}"
54
+ def finish(path, user, module_name, home_branch_name, type)
55
+ Logger.highlight("Finish branch '#{home_branch_name}' for module '#{module_name}'...")
56
+
57
+ verify_module(path, user, module_name, home_branch_name, type)
68
58
 
69
- Logger.highlight("Add branch '#{branch_name}' for module '#{module_name}'...")
59
+ module_git = BigkeeperParser.module_git(module_name)
60
+ PodfileOperator.new.find_and_replace("#{path}/Podfile",
61
+ module_name,
62
+ ModuleType::GIT,
63
+ GitInfo.new(module_git, GitType::BRANCH, home_branch_name))
70
64
 
71
65
  module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
72
66
 
73
- # clone module if not exist
74
- if !File.exist? module_full_path
75
- Logger.default("No local repository for module #{module_name}, clone it...")
76
- module_git = BigkeeperParser.module_git(module_name)
77
- GitOperator.new.clone(File.expand_path("#{module_full_path}/../"), module_git)
78
- end
67
+ GitService.new.verify_push(module_full_path, "finish branch #{home_branch_name}", home_branch_name, module_name)
68
+
69
+ GitService.new.verify_rebase(module_full_path, GitflowType.base_branch(type), module_name)
79
70
 
80
- # stash current branch
81
- current_branch_name = GitOperator.new.current_branch(module_full_path)
71
+ `open #{BigkeeperParser.module_pulls(module_name)}`
72
+ end
82
73
 
83
- StashService.new.stash(module_full_path, current_branch_name, module_name)
74
+ def add(path, user, module_name, name, type)
75
+ home_branch_name = "#{GitflowType.name(type)}/#{name}"
76
+ Logger.highlight("Add branch '#{home_branch_name}' for module '#{module_name}'...")
84
77
 
85
- # start new feature/hotfix
86
- GitService.new.start(module_full_path, name, type)
87
78
 
88
- StashService.new.pop_stash(module_full_path, branch_name, module_name)
79
+ verify_module(path, user, module_name, home_branch_name, type)
89
80
 
90
81
  module_path = BigkeeperParser.module_path(user, module_name)
91
-
92
82
  PodfileOperator.new.find_and_replace("#{path}/Podfile",
93
83
  module_name,
94
84
  ModuleType::PATH,
@@ -96,23 +86,23 @@ module BigKeeper
96
86
  end
97
87
 
98
88
  def del(path, user, module_name, name, type)
99
- branch_name = "#{GitflowType.name(type)}/#{name}"
89
+ home_branch_name = "#{GitflowType.name(type)}/#{name}"
100
90
 
101
- Logger.highlight("Delete branch '#{branch_name}' for module '#{module_name}'...")
91
+ Logger.highlight("Delete branch '#{home_branch_name}' for module '#{module_name}'...")
102
92
 
103
93
  module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
104
94
 
105
- StashService.new.stash(module_full_path, branch_name, module_name)
95
+ StashService.new.stash(module_full_path, home_branch_name, module_name)
106
96
 
107
- GitOperator.new.git_checkout(module_full_path, 'develop')
108
- GitOperator.new.del(module_full_path, branch_name)
97
+ GitOperator.new.checkout(module_full_path, GitflowType.base_branch(type))
98
+ # GitOperator.new.del(module_full_path, home_branch_name)
109
99
 
110
100
  module_git = BigkeeperParser.module_git(module_name)
111
101
 
112
102
  PodfileOperator.new.find_and_replace("#{path}/Podfile",
113
103
  module_name,
114
104
  ModuleType::GIT,
115
- GitInfo.new(module_git, GitType::BRANCH, 'develop'))
105
+ GitInfo.new(module_git, GitType::BRANCH, GitflowType.base_branch(type)))
116
106
  end
117
107
  end
118
108
  end