kookeeper 3.0.2 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) 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/CODE_OF_CONDUCT.md +46 -0
  7. data/CONTRIBUTING.md +70 -0
  8. data/Gemfile +10 -0
  9. data/Gemfile.lock +145 -0
  10. data/LICENSE +21 -0
  11. data/README.md +113 -0
  12. data/big_keeper.gemspec +50 -0
  13. data/docs/en-US/FEATURE.md +0 -0
  14. data/docs/en-US/README.md +54 -0
  15. data/docs/zh-CN/BIGKEEPER_FILE.md +84 -0
  16. data/docs/zh-CN/FEATURE&HOTFIX.md +88 -0
  17. data/docs/zh-CN/IMAGE.md +0 -0
  18. data/docs/zh-CN/PODFILE.md +43 -0
  19. data/docs/zh-CN/README.md +113 -0
  20. data/docs/zh-CN/RECOMMEND.md +22 -0
  21. data/docs/zh-CN/RELEASE.md +60 -0
  22. data/docs/zh-CN/SPEC.md +39 -0
  23. data/lib/big_keeper/command/feature&hotfix/delete.rb +40 -0
  24. data/lib/big_keeper/command/feature&hotfix/finish.rb +54 -0
  25. data/lib/big_keeper/command/feature&hotfix/list.rb +63 -0
  26. data/lib/big_keeper/command/feature&hotfix/publish.rb +56 -0
  27. data/lib/big_keeper/command/feature&hotfix/pull.rb +26 -0
  28. data/lib/big_keeper/command/feature&hotfix/push.rb +27 -0
  29. data/lib/big_keeper/command/feature&hotfix/rebase.rb +32 -0
  30. data/lib/big_keeper/command/feature&hotfix/start.rb +74 -0
  31. data/lib/big_keeper/command/feature&hotfix/switch.rb +46 -0
  32. data/lib/big_keeper/command/feature&hotfix/update.rb +66 -0
  33. data/lib/big_keeper/command/feature&hotfix.rb +167 -0
  34. data/lib/big_keeper/command/image/image.rb +0 -0
  35. data/lib/big_keeper/command/image.rb +28 -0
  36. data/lib/big_keeper/command/pod/podfile.rb +69 -0
  37. data/lib/big_keeper/command/pod.rb +42 -0
  38. data/lib/big_keeper/command/release/home.rb +91 -0
  39. data/lib/big_keeper/command/release/module.rb +61 -0
  40. data/lib/big_keeper/command/release.rb +75 -0
  41. data/lib/big_keeper/command/spec/add.rb +9 -0
  42. data/lib/big_keeper/command/spec/analyze.rb +88 -0
  43. data/lib/big_keeper/command/spec/delete.rb +9 -0
  44. data/lib/big_keeper/command/spec/list.rb +19 -0
  45. data/lib/big_keeper/command/spec/search.rb +9 -0
  46. data/lib/big_keeper/command/spec/sync.rb +12 -0
  47. data/lib/big_keeper/command/spec.rb +78 -0
  48. data/lib/big_keeper/dependency/dep_gradle_operator.rb +56 -0
  49. data/lib/big_keeper/dependency/dep_operator.rb +32 -0
  50. data/lib/big_keeper/dependency/dep_pod_operator.rb +130 -0
  51. data/lib/big_keeper/dependency/dep_service.rb +14 -0
  52. data/lib/big_keeper/dependency/dep_type.rb +33 -0
  53. data/lib/big_keeper/model/gitflow_type.rb +43 -0
  54. data/lib/big_keeper/model/library_model.rb +116 -0
  55. data/lib/big_keeper/model/operate_type.rb +27 -0
  56. data/lib/big_keeper/model/podfile_model.rb +33 -0
  57. data/lib/big_keeper/service/git_service.rb +210 -0
  58. data/lib/big_keeper/service/module_service.rb +159 -0
  59. data/lib/big_keeper/service/stash_service.rb +45 -0
  60. data/lib/big_keeper/util/bigkeeper_parser.rb +244 -0
  61. data/lib/big_keeper/util/cache_operator.rb +116 -0
  62. data/lib/big_keeper/util/code_operator.rb +37 -0
  63. data/lib/big_keeper/util/file_operator.rb +33 -0
  64. data/lib/big_keeper/util/git_operator.rb +221 -0
  65. data/lib/big_keeper/util/gitflow_operator.rb +51 -0
  66. data/lib/big_keeper/util/gradle_operator.rb +209 -0
  67. data/lib/big_keeper/util/info_plist_operator.rb +46 -0
  68. data/lib/big_keeper/util/leancloud_logger.rb +72 -0
  69. data/lib/big_keeper/util/list_generator.rb +101 -0
  70. data/lib/big_keeper/util/logger.rb +46 -0
  71. data/lib/big_keeper/util/pod_operator.rb +70 -0
  72. data/lib/big_keeper/util/podfile_detector.rb +111 -0
  73. data/lib/big_keeper/util/podfile_module.rb +63 -0
  74. data/lib/big_keeper/util/podfile_operator.rb +117 -0
  75. data/lib/big_keeper/util/verify_operator.rb +17 -0
  76. data/lib/big_keeper/util/xcode_operator.rb +15 -0
  77. data/lib/big_keeper/version.rb +3 -0
  78. data/lib/big_keeper.rb +71 -0
  79. data/resources/banner.png +0 -0
  80. data/resources/command.png +0 -0
  81. data/resources/keynote/big-keeper-readme-analyze.key +0 -0
  82. data/resources/keynote/big-keeper-readme-example.key +0 -0
  83. data/resources/keynote/big-keeper-readme-feature.key +0 -0
  84. data/resources/keynote/big-keeper-readme-release.key +0 -0
  85. data/resources/readme/big-keeper-readme.001.png +0 -0
  86. metadata +85 -2
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/ruby
2
+ require 'big_keeper/util/podfile_operator'
3
+ require 'big_keeper/util/gitflow_operator'
4
+ require 'big_keeper/dependency/dep_type'
5
+ require 'big_keeper/util/info_plist_operator'
6
+ require 'big_keeper/util/git_operator'
7
+ require 'big_keeper/util/logger'
8
+ require 'big_keeper/util/pod_operator'
9
+
10
+ module BigKeeper
11
+ def self.release_module_start(path, version, user, module_name, ignore)
12
+ BigkeeperParser.parse("#{path}/Bigkeeper")
13
+ module_path = BigkeeperParser.module_full_path(path, user, module_name)
14
+
15
+ # stash
16
+ StashService.new.stash(module_path, GitOperator.new.current_branch(module_path), module_name)
17
+
18
+ #check
19
+ if ignore != true
20
+ GitOperator.new.check_merge(module_path, "feature/#{version}")
21
+ GitOperator.new.check_diff(module_path, "develop", "master")
22
+ Logger.highlight(%Q(#{module_name} release check finish))
23
+ end
24
+
25
+ # checkout to develop branch
26
+ Logger.highlight(%Q(Start checkout #{module_name} to Branch develop))
27
+ GitService.new.verify_checkout_pull(module_path, "develop")
28
+
29
+ Logger.highlight(%Q(#{module_name} release start finish))
30
+ end
31
+
32
+ ## release finish
33
+ def self.release_module_finish(path, version, user, module_name, spec)
34
+ BigkeeperParser.parse("#{path}/Bigkeeper")
35
+ module_path = BigkeeperParser.module_full_path(path, user, module_name)
36
+
37
+ # check commit
38
+ Logger.error("current branch has unpush files") if GitOperator.new.has_changes(module_path)
39
+
40
+ #修改 podspec 文件
41
+ # TO DO: - advanced to use Regular Expression
42
+ has_change = PodfileOperator.new.podspec_change(%Q(#{module_path}/#{module_name}.podspec), version, module_name)
43
+ GitService.new.verify_push(module_path, "Change version number", "develop", "#{module_name}") if has_change == true
44
+
45
+ # check out master
46
+ Logger.highlight("'#{module_name}' checkout branch to master...")
47
+ GitService.new.verify_checkout_pull(module_path, "master")
48
+
49
+ Logger.highlight(%Q(Merge develop to master))
50
+ # merge develop to master
51
+ GitOperator.new.merge(module_path, "develop")
52
+ GitOperator.new.push_to_remote(module_path, "master")
53
+
54
+ GitOperator.new.tag(module_path, version)
55
+ # pod repo push
56
+ if spec == true
57
+ PodOperator.pod_repo_push(module_path, module_name, BigkeeperParser.source_spec_path(module_name), version)
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,75 @@
1
+ require 'big_keeper/command/release/home'
2
+ require 'big_keeper/command/release/module'
3
+ require 'big_keeper/util/leancloud_logger'
4
+
5
+ module BigKeeper
6
+ def self.release_command
7
+ desc 'Gitflow release operations'
8
+ command :release do |c|
9
+
10
+ c.desc 'Release home project operations'
11
+ c.command :home do |home|
12
+ home.desc 'Start release home project'
13
+ home.command :start do |start|
14
+ start.action do |global_options, options, args|
15
+ path = File.expand_path(global_options[:path])
16
+ version = global_options[:ver]
17
+ user = global_options[:user].gsub(/[^0-9A-Za-z]/, '').downcase
18
+ LeanCloudLogger.instance.set_command("release/home/start")
19
+
20
+ help_now!('user name is required') if user and user.empty?
21
+ raise Logger.error("release version is required") if version == nil
22
+ release_home_start(path, version, user)
23
+ end
24
+ end
25
+
26
+ home.desc 'Finish release home project'
27
+ home.command :finish do |finish|
28
+ finish.action do |global_options, options, args|
29
+ path = File.expand_path(global_options[:path])
30
+ version = global_options[:ver]
31
+ LeanCloudLogger.instance.set_command("release/home/finish")
32
+
33
+ raise Logger.error("release version is required") if version == nil
34
+ release_home_finish(path, version)
35
+ end
36
+ end
37
+ end
38
+
39
+ c.desc 'release module'
40
+ c.switch [:i,:ignore]
41
+ c.command :module do |m|
42
+ m.desc 'Start release module project'
43
+ m.command :start do |start|
44
+ start.action do |global_options, options, args|
45
+ path = File.expand_path(global_options[:path])
46
+ version = global_options[:ver]
47
+ user = global_options[:user].gsub(/[^0-9A-Za-z]/, '').downcase
48
+ LeanCloudLogger.instance.set_command("release/module/start")
49
+
50
+ help_now!('module name is required') if args.length != 1
51
+ raise Logger.error("release version is required") if version == nil
52
+ module_name = args[0]
53
+ release_module_start(path, version, user, module_name, options[:ignore])
54
+ end
55
+ end
56
+
57
+ m.desc 'finish release module project'
58
+ m.switch [:s,:spec]
59
+ m.command :finish do |finish|
60
+ finish.action do |global_options, options, args|
61
+ path = File.expand_path(global_options[:path])
62
+ version = global_options[:ver]
63
+ user = global_options[:user].gsub(/[^0-9A-Za-z]/, '').downcase
64
+ LeanCloudLogger.instance.set_command("release/module/finish")
65
+
66
+ help_now!('module name is required') if args.length != 1
67
+ raise Logger.error("release version is required") if version == nil
68
+ module_name = args[0]
69
+ release_module_finish(path, version, user, module_name, options[:spec])
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,9 @@
1
+ require 'big_keeper/util/bigkeeper_parser'
2
+ require 'big_keeper/dependency/dep_type'
3
+ require 'big_keeper/util/logger'
4
+
5
+ module BigKeeper
6
+ def self.spec_add
7
+ Logger.default('Coming soon.')
8
+ end
9
+ end
@@ -0,0 +1,88 @@
1
+ require 'big_keeper/util/bigkeeper_parser'
2
+ require 'big_keeper/dependency/dep_type'
3
+ require 'big_keeper/util/logger'
4
+ require 'big_keeper/model/library_model'
5
+
6
+ module BigKeeper
7
+ def self.spec_analyze(path,is_all,find_module_names)
8
+ # Parse Bigkeeper file
9
+ BigkeeperParser.parse("#{path}/Bigkeeper")
10
+
11
+ is_default = !is_all&&find_module_names.size==0
12
+ if is_all && find_module_names.size>0
13
+ Logger.error("parameter conflict: [--all] | [module_names]")
14
+ return
15
+ end
16
+ Logger.highlight('Start spec analyze...')
17
+ Logger.default(Time.now.to_s)
18
+
19
+ # Parse Bigkeeper file
20
+ # BigkeeperParser.parse("#{path}/Bigkeeper")
21
+ # module_names = BigkeeperParser.module_names
22
+
23
+ # find modules
24
+ Logger.highlight('Get all modules...')
25
+ module_names = []
26
+ pod_path = path+"/Pods/"
27
+ dir = Dir.open(pod_path)
28
+ dir.each do |dir_name|
29
+ if !dir_name.include?(".") && dir_name != "Headers" && dir_name != "Local Podspecs" && dir_name != "Target Support Files"
30
+ module_names[module_names.size]=dir_name
31
+ end
32
+ end
33
+
34
+ for input_moudle_name in find_module_names do
35
+ if !module_names.include?(input_moudle_name)
36
+ Logger.error("["+input_moudle_name+"] not exist.")
37
+ end
38
+ end
39
+
40
+ # setup modules
41
+ module_list = []
42
+ module_keyword_map = Hash.new
43
+ file_count = 0
44
+ for module_name in module_names do
45
+ library = LibraryModel.new(module_name)
46
+ library.get_all_public_file(path)
47
+ module_list[module_list.size]=library
48
+ module_keyword_map[module_name]=library.keyword_list
49
+ if is_all || find_module_names.include?(library.name)
50
+ file_count = file_count + library.file_list.size
51
+ end
52
+ end
53
+ # analyze modules spec
54
+
55
+ Logger.highlight('Analyze modules...')
56
+ Logger.default(Time.now.to_s)
57
+ file_index = 0
58
+ for library in module_list do
59
+ if is_all || find_module_names.include?(library.name)
60
+ Logger.default('Analyzing ' + library.name)
61
+ file_index = file_index + library.file_list.size
62
+ library.spec_dependece_library(module_keyword_map.clone)#(Hash.new(module_keyword_map)).to_hash)
63
+ progress = (file_index*100.0)/file_count
64
+ progress = format("%.02f", progress).to_f
65
+ Logger.default('progress >>>> ' + String(progress) + '% [' + library.name + ' done] ')
66
+ end
67
+ end
68
+ Logger.highlight('Analyze complete.')
69
+ Logger.default(Time.now.to_s)
70
+
71
+ # log spec info
72
+ for library in module_list do
73
+ if is_all || find_module_names.include?(library.name)
74
+ Logger.highlight("\n-"+library.name+":")
75
+ for spec_library in library.spec_library do
76
+ puts " -"+spec_library
77
+ end
78
+ end
79
+ end
80
+
81
+ # save cache to file
82
+ if is_all
83
+
84
+ end
85
+
86
+ end
87
+
88
+ end
@@ -0,0 +1,9 @@
1
+ require 'big_keeper/util/bigkeeper_parser'
2
+ require 'big_keeper/dependency/dep_type'
3
+ require 'big_keeper/util/logger'
4
+
5
+ module BigKeeper
6
+ def self.spec_delete
7
+ Logger.default('Coming soon.')
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ require 'logger'
2
+ require 'json'
3
+
4
+ module BigKeeper
5
+ def self.spec_list(path, user, options)
6
+ BigkeeperParser.parse("#{path}/Bigkeeper")
7
+
8
+ module_dic = BigkeeperParser.parse_modules
9
+ module_list = Array.new
10
+ module_dic.keys.each do | key |
11
+ dic = Hash["module_name" => key,
12
+ "git" => module_dic[key][:git],
13
+ "pulls" => module_dic[key][:pulls]]
14
+ module_list << dic
15
+ end
16
+ json = JSON.pretty_generate(module_list)
17
+ puts json
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ require 'big_keeper/util/bigkeeper_parser'
2
+ require 'big_keeper/dependency/dep_type'
3
+ require 'big_keeper/util/logger'
4
+
5
+ module BigKeeper
6
+ def self.spec_search
7
+ Logger.default('Coming soon.')
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ require 'big_keeper/util/bigkeeper_parser'
2
+ require 'big_keeper/dependency/dep_type'
3
+ require 'big_keeper/util/logger'
4
+
5
+ module BigKeeper
6
+ def self.spec_sync(path, version, user, module_name)
7
+ # Parse Bigkeeper file
8
+ BigkeeperParser.parse("#{path}/Bigkeeper")
9
+
10
+ Logger.default('Coming soon.')
11
+ end
12
+ end
@@ -0,0 +1,78 @@
1
+ require 'big_keeper/command/spec/analyze'
2
+ require 'big_keeper/command/spec/list'
3
+ require 'big_keeper/command/spec/add'
4
+ require 'big_keeper/command/spec/delete'
5
+ require 'big_keeper/command/spec/search'
6
+ require 'big_keeper/command/spec/sync'
7
+ require 'big_keeper/util/leancloud_logger'
8
+
9
+ module BigKeeper
10
+
11
+ def self.spec_command
12
+ desc 'Spec operations'
13
+
14
+ command :spec do |spec|
15
+ spec.switch [:a,:all]
16
+ spec.desc 'Analyze spec dependency infomation.'
17
+ spec.command :analyze do |analyze|
18
+ analyze.action do |global_options, options, args|
19
+ LeanCloudLogger.instance.set_command("spec/analyze")
20
+
21
+ path = File.expand_path(global_options[:path])
22
+ is_all = options[:all]
23
+ module_names = args
24
+ spec_analyze(path, is_all, module_names)
25
+ end
26
+ end
27
+
28
+ spec.desc 'List all the specs.'
29
+ spec.command :list do | list |
30
+ list.action do |global_options, options, args|
31
+ LeanCloudLogger.instance.set_command("spec/list")
32
+
33
+ path = File.expand_path(global_options[:path])
34
+ version = global_options[:ver]
35
+ user = global_options[:user].gsub(/[^0-9A-Za-z]/, '').downcase
36
+
37
+ spec_list(path, user, options)
38
+ end
39
+ end
40
+
41
+ spec.desc 'Sync Module dependency from Home.'
42
+ spec.command :sync do | sync|
43
+ sync.action do |global_options, options, args|
44
+ LeanCloudLogger.instance.set_command("spec/sync")
45
+
46
+ path = File.expand_path(global_options[:path])
47
+ version = global_options[:ver]
48
+ user = global_options[:user].gsub(/[^0-9A-Za-z]/, '').downcase
49
+ module_name = args
50
+
51
+ spec_sync(path, version, user, module_name)
52
+ end
53
+ end
54
+
55
+ spec.desc 'Add a spec (Coming soon).'
56
+ spec.command :add do |add|
57
+ add.action do
58
+ spec_add()
59
+ end
60
+ end
61
+
62
+ spec.desc 'Delete a spec (Coming soon).'
63
+ spec.command :delete do |delete|
64
+ delete.action do
65
+ spec_delete()
66
+ end
67
+ end
68
+
69
+ spec.desc 'Search a spec with name (Coming soon).'
70
+ spec.command :search do |search|
71
+ search.action do
72
+ spec_search()
73
+ end
74
+ end
75
+
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,56 @@
1
+ require 'big_keeper/dependency/dep_operator'
2
+ require 'big_keeper/util/gradle_operator'
3
+
4
+ module BigKeeper
5
+ # Operator for podfile
6
+ class DepGradleOperator < DepOperator
7
+
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
+ end
16
+
17
+ def recover
18
+ GradleOperator.new(@path).recover(true, false)
19
+ end
20
+
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
25
+ if ModuleOperateType::ADD == module_operate_type
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)
35
+ elsif ModuleOperateType::DELETE == module_operate_type
36
+ GradleOperator.new(module_full_path).recover(true, true)
37
+ elsif ModuleOperateType::FINISH == module_operate_type
38
+ modules = ModuleCacheOperator.new(@path).all_path_modules
39
+ GradleOperator.new(module_full_path).update_build_config(module_name, modules, ModuleOperateType::FINISH)
40
+ elsif ModuleOperateType::PUBLISH == module_operate_type
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)
44
+ end
45
+
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)
48
+ end
49
+
50
+ def install(should_update)
51
+ end
52
+
53
+ def open
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,32 @@
1
+ module BigKeeper
2
+ # Operator for podfile
3
+ class DepOperator
4
+ @path
5
+ @user
6
+
7
+ def initialize(path, user)
8
+ @path = path
9
+ @user = user
10
+ end
11
+
12
+ def backup
13
+ raise "You should override this method in subclass."
14
+ end
15
+
16
+ def recover
17
+ raise "You should override this method in subclass."
18
+ end
19
+
20
+ def update_module_config(module_name, module_operate_type)
21
+ raise "You should override this method in subclass."
22
+ end
23
+
24
+ def install(should_update)
25
+ raise "You should override this method in subclass."
26
+ end
27
+
28
+ def open
29
+ raise "You should override this method in subclass."
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,130 @@
1
+ require 'big_keeper/dependency/dep_operator'
2
+
3
+ require 'big_keeper/util/pod_operator'
4
+ require 'big_keeper/util/xcode_operator'
5
+ require 'big_keeper/util/cache_operator'
6
+ require 'big_keeper/util/file_operator'
7
+
8
+ module BigKeeper
9
+ # Operator for podfile
10
+ class DepPodOperator < DepOperator
11
+ def backup
12
+ CacheOperator.new(@path).save('Podfile')
13
+ end
14
+
15
+ def recover
16
+ cache_operator = CacheOperator.new(@path)
17
+ cache_operator.load('Podfile')
18
+ cache_operator.clean
19
+ end
20
+
21
+ def update_module_config(module_name, module_operate_type)
22
+ file = "#{@path}/Podfile"
23
+ temp_file = Tempfile.new('.Podfile.tmp')
24
+
25
+ begin
26
+ File.open(file, 'r') do |file|
27
+ file.each_line do |line|
28
+ temp_file.puts generate_module_config(line, module_name, module_operate_type)
29
+ end
30
+ end
31
+ temp_file.close
32
+ FileUtils.mv(temp_file.path, file)
33
+ ensure
34
+ temp_file.close
35
+ temp_file.unlink
36
+ end
37
+ end
38
+
39
+ def install(should_update)
40
+ PodOperator.pod_install(@path, should_update)
41
+ end
42
+
43
+ def open
44
+ XcodeOperator.open_workspace(@path)
45
+ end
46
+
47
+ def generate_module_config(line, module_name, module_operate_type)
48
+ line.sub(/(\s*)pod(\s*)('|")#{module_name}('|")([\s\S]*)/){
49
+ if ModuleOperateType::ADD == module_operate_type
50
+ module_path = BigkeeperParser.module_path(@user, module_name)
51
+ "#{$1}pod '#{module_name}', :path => '#{module_path}'"
52
+ elsif ModuleOperateType::DELETE == module_operate_type
53
+ origin_config_of_module = origin_config_of_module(module_name)
54
+ if origin_config_of_module.empty?
55
+ line
56
+ else
57
+ origin_config_of_module
58
+ end
59
+ elsif ModuleOperateType::FINISH == module_operate_type
60
+ module_git = BigkeeperParser.module_git(module_name)
61
+ branch_name = GitOperator.new.current_branch(@path)
62
+ "#{$1}pod '#{module_name}', :git => '#{module_git}', :branch => '#{branch_name}'"
63
+ elsif ModuleOperateType::PUBLISH == module_operate_type
64
+ module_git = BigkeeperParser.module_git(module_name)
65
+ branch_name = GitOperator.new.current_branch(@path)
66
+ base_branch_name = GitflowType.base_branch(GitService.new.current_branch_type(@path))
67
+ "#{$1}pod '#{module_name}', :git => '#{module_git}', :branch => '#{base_branch_name}'"
68
+ elsif ModuleOperateType::RELEASE == module_operate_type
69
+ module_git = BigkeeperParser.module_git(module_name)
70
+ lastest_tag, is_spec = find_lastest_tag(module_name)
71
+ if is_spec == true
72
+ Logger.default("#{module_name} lastest tag is #{lastest_tag}, this tag has published.")
73
+ "#{$1}pod '#{module_name}', '#{lastest_tag}'"
74
+ else
75
+ Logger.default("#{module_name} lastest tag is #{lastest_tag}, this tag not publish.")
76
+ "#{$1}pod '#{module_name}', :git => '#{module_git}', :tag => '#{lastest_tag}'"
77
+ end
78
+ else
79
+ line
80
+ end
81
+ }
82
+ end
83
+
84
+ def origin_config_of_module(module_name)
85
+ origin_config = ''
86
+
87
+ File.open("#{@path}/.bigkeeper/Podfile", 'r') do |file|
88
+ file.each_line do |line|
89
+ if line =~ /(\s*)pod(\s*)('|")#{module_name}('|")([\s\S]*)/
90
+ origin_config = line
91
+ break
92
+ end
93
+ end
94
+ end
95
+
96
+ origin_config.chop
97
+ end
98
+
99
+ def find_lastest_tag(module_name)
100
+ username = FileOperator.new.current_username
101
+ tags_repos_pwd = Array.new
102
+ tags_spec_list = Array.new
103
+ tags_module_list = Array.new
104
+
105
+ IO.popen("find /Users/#{username}/.cocoapods/repos -type d -name #{module_name}") do |io|
106
+ io.each do |line|
107
+ tags_repos_pwd.push(line) if line.include? "#{module_name}"
108
+ end
109
+ end
110
+ for pwd in tags_repos_pwd do
111
+ path = pwd.chomp
112
+ IO.popen("cd '#{path}'; ls") do |io|
113
+ io.each do |line|
114
+ tags_spec_list.push(line)
115
+ end
116
+ end
117
+ end
118
+
119
+ tags_module_list = GitOperator.new.tag_list(BigkeeperParser.module_full_path(@path, @user, module_name))
120
+ last_tag = tags_module_list[tags_module_list.length - 1]
121
+ if tags_module_list.include?(last_tag) && tags_spec_list.include?(last_tag)
122
+ return [last_tag.chomp, true]
123
+ else
124
+ return [last_tag.chomp, false]
125
+ end
126
+ end
127
+
128
+ private :generate_module_config, :origin_config_of_module, :find_lastest_tag
129
+ end
130
+ end
@@ -0,0 +1,14 @@
1
+ require 'big_keeper/util/git_operator'
2
+ require 'big_keeper/model/gitflow_type'
3
+ require 'big_keeper/model/operate_type'
4
+ require 'big_keeper/util/logger'
5
+ require 'big_keeper/dependency/dep_type'
6
+
7
+ module BigKeeper
8
+ # Operator for podfile
9
+ class DepService
10
+ def self.dep_operator(path, user)
11
+ DepType.operator(path, user)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,33 @@
1
+ require 'big_keeper/dependency/dep_operator'
2
+ require 'big_keeper/dependency/dep_pod_operator'
3
+ require 'big_keeper/dependency/dep_gradle_operator'
4
+ require 'big_keeper/util/file_operator'
5
+
6
+ module BigKeeper
7
+ module DepType
8
+ NONE = 0
9
+ COCOAPODS = 1
10
+ GRADLE = 2
11
+
12
+ def self.type(path)
13
+ if FileOperator.definitely_exists?("#{path}/Podfile")
14
+ COCOAPODS
15
+ elsif FileOperator.definitely_exists?("#{path}/build.gradle")
16
+ GRADLE
17
+ else
18
+ NONE
19
+ end
20
+ end
21
+
22
+ def self.operator(path, user)
23
+ operator_type = type(path)
24
+ if COCOAPODS == operator_type
25
+ DepPodOperator.new(path, user)
26
+ elsif GRADLE == operator_type
27
+ DepGradleOperator.new(path, user)
28
+ else
29
+ DepOperator.new(path, user)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,43 @@
1
+ module BigKeeper
2
+ module GitflowType
3
+ FEATURE = 1
4
+ HOTFIX = 2
5
+ RELEASE = 3
6
+
7
+ def self.name(type)
8
+ if FEATURE == type
9
+ "feature"
10
+ elsif HOTFIX == type
11
+ "hotfix"
12
+ elsif RELEASE == type
13
+ "release"
14
+ else
15
+ "feature"
16
+ end
17
+ end
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
+
31
+ def self.base_branch(type)
32
+ if FEATURE == type
33
+ "develop"
34
+ elsif HOTFIX == type
35
+ "master"
36
+ elsif RELEASE == type
37
+ "develop"
38
+ else
39
+ "master"
40
+ end
41
+ end
42
+ end
43
+ end