bigkeeper 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 028f56615f3e793abad38eed28a1f898564632a3
4
- data.tar.gz: 2143d81a7144a0611bd4bb5ec5ba3fe8d34a032d
3
+ metadata.gz: 67a9534eec7e2adda494fbf338a2d425d8a50880
4
+ data.tar.gz: cfdf86a415c35767c26378f750293f9ca352f73e
5
5
  SHA512:
6
- metadata.gz: 767a5d482e00d1eefb7a95863d8c1990405656187ee168edb9726ab78e5f8d07398349fac58a52404c3edb9dc6f1296fbd6bbaac22a7da174ae12ae5a90e819e
7
- data.tar.gz: 2dcd82312c0cb2dc2c387cff5ac9e588f216c70e4ea8311d1b1626c6fb67c84c0fe3f231f4ce4aad260ba29c011a9f71a9e017a4c7e07e5cf0d0ee2757895fd2
6
+ metadata.gz: 3bcd74eca37de2258644c22e37290918cc3e5709a1bab3be4c9d1de36705f17edaf9d82fea873c5c734c8a894ad5c9b647e3d0b5c10ab4bc245600eb8ba347b8
7
+ data.tar.gz: 07ab4bc44a44426a1706a6a87b62c0148a7cd6dd0f14056bf44773a36f7fc55488d03f83f025e6da980c1f3b883b5ca9c349f7b19b8b13255cb992a4a50ed9e5
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bigkeeper (0.7.8)
4
+ bigkeeper (0.8.0)
5
5
  big_stash (~> 0.1)
6
6
  cocoapods
7
7
  colorize
@@ -111,4 +111,4 @@ DEPENDENCIES
111
111
  rubocop (~> 0.50.0)
112
112
 
113
113
  BUNDLED WITH
114
- 1.15.4
114
+ 1.16.1
@@ -4,6 +4,7 @@ require 'big_keeper/version'
4
4
 
5
5
  require 'big_keeper/util/bigkeeper_parser'
6
6
  require 'big_keeper/util/git_operator'
7
+ require 'big_keeper/util/verify_operator'
7
8
 
8
9
  require 'big_keeper/model/gitflow_type'
9
10
 
@@ -25,6 +26,11 @@ module BigKeeper
25
26
  flag %i[v ver], default_value: 'Version in Bigkeeper file'
26
27
  flag %i[u user], default_value: GitOperator.new.user.gsub(/[^0-9A-Za-z]/, '').downcase
27
28
 
29
+ if VerifyOperator.already_in_process?
30
+ p %Q(There is another 'big' command in process, please wait)
31
+ exit
32
+ end
33
+
28
34
  if !GitflowOperator.new.verify_git_flow_command
29
35
  p %Q('git-flow' not found, use 'brew install git-flow' to install it)
30
36
  exit
@@ -127,11 +127,25 @@ module BigKeeper
127
127
 
128
128
  c.desc "List all the #{GitflowType.name(type)}s"
129
129
  c.command :list do |list|
130
- list.action do |global_options, options, args|
131
- Logger.highlight("Generating feature tree of all version...") if args.length < 1
132
- path = File.expand_path(global_options[:path])
133
- user = global_options[:user].gsub(/[^0-9A-Za-z]/, '').downcase
134
- list(path,user,type)
130
+ list.flag %i[v version] , default_value: 'all versions'
131
+ list.desc "Print list of TREE format."
132
+ list.command :tree do |tree|
133
+ tree.action do |global_options, options, args|
134
+ Logger.highlight("Generating #{GitflowType.name(type)} tree of all version...") if args.length < 1
135
+ path = File.expand_path(global_options[:path])
136
+ user = global_options[:user].gsub(/[^0-9A-Za-z]/, '').downcase
137
+ list(path, user, type, options)
138
+ end
139
+ end
140
+
141
+ list.desc "Print list of JSON format."
142
+ list.command :json do |json|
143
+ json.action do |global_options, options, args|
144
+ options[:json] = true
145
+ path = File.expand_path(global_options[:path])
146
+ user = global_options[:user].gsub(/[^0-9A-Za-z]/, '').downcase
147
+ list(path, user, type, options)
148
+ end
135
149
  end
136
150
  end
137
151
  end
@@ -5,38 +5,59 @@ require 'big_keeper/service/module_service'
5
5
 
6
6
 
7
7
  module BigKeeper
8
- def self.list(path,user,type)
8
+ def self.list(path, user, type, options)
9
9
  BigkeeperParser.parse("#{path}/Bigkeeper")
10
+ home_path = File.expand_path(path)
10
11
  #get home project branches
11
- branches = GitService.new.branchs_with_type(File.expand_path(path), type)
12
+ branches = GitService.new.branchs_with_type(home_path, type)
12
13
  #get modules list
14
+ is_print_log = false if options[:json]
15
+ #get search version
16
+ version = options[:version]
17
+ cache_path = File.expand_path("#{path}/.bigkeeper")
18
+ json_path = "#{cache_path}/branches.json"
13
19
  begin
14
- modules = BigkeeperParser.module_names
15
- file = File.new("#{path}/.bigkeeper/feature_list", 'w')
20
+ #get cache file path
21
+ FileUtils.mkdir_p(cache_path) unless File.exist?(cache_path)
22
+ file = File.new(json_path, 'w')
16
23
  begin
17
- #read git info
18
- git_operator = GitOperator.new
19
- modules.each do |module_name|
20
- module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
21
- #local project verify
22
- if !File.exist? module_full_path
23
- Logger.default("No local repository for module '#{module_name}', clone it...")
24
- module_git = BigkeeperParser.module_git(module_name)
25
- git_operator.clone(File.expand_path("#{module_full_path}/../"), module_git)
26
- end
27
- feature_modules_list = ModuleService.new.list(module_full_path, user, module_name)
28
- dic = {}
29
- dic[module_name] = feature_modules_list
30
- file << dic
31
- file << "\n\n"
32
- end
33
- file.close
24
+ #get all modules info
25
+ module_list_dic = get_module_info(path, user, type, version, branches)
26
+ file << module_list_dic.to_json
27
+ file.close
34
28
  end
35
-
36
29
  #print list
37
- ListGenerator.generate(file,branches)
30
+ generate_list_with_option(options, json_path, version, branches)
38
31
  ensure
39
32
  file.close
40
33
  end
41
34
  end
35
+
36
+ def self.get_module_info(path, user, type, version, home_branches)
37
+ #get module list
38
+ modules = BigkeeperParser.module_names
39
+ git_operator = GitOperator.new
40
+ module_info_list = []
41
+ modules.each do |module_name|
42
+ module_full_path = BigkeeperParser.module_full_path(path, user, module_name)
43
+ #local project verify
44
+ if !File.exist? module_full_path
45
+ Logger.default("No local repository for module '#{module_name}', clone it...") if is_print_log
46
+ module_git = BigkeeperParser.module_git(module_name)
47
+ git_operator.clone(File.expand_path("#{module_full_path}/../"), module_git)
48
+ end
49
+ #每个模块详细信息
50
+ module_branch_info = ModuleService.new.module_info(module_full_path, home_branches, user, type, module_name, version)
51
+ module_info_list << module_branch_info
52
+ end
53
+ module_info_list
54
+ end
55
+
56
+ def self.generate_list_with_option(options, file_path, version, home_branches)
57
+ if options[:json]
58
+ ListGenerator.generate_json(file_path, home_branches, version)
59
+ else
60
+ ListGenerator.generate_tree(file_path, home_branches, version)
61
+ end
62
+ end
42
63
  end
@@ -5,12 +5,11 @@ module BigKeeper
5
5
  def self.pod_command
6
6
  desc 'Podfile operation'
7
7
  command :podfile do |podfile|
8
- podfile.flag %i[pod podfile]
9
8
  podfile.desc 'Podfile'
10
9
 
11
10
  podfile.desc 'Detect podname should be locked.'
12
11
  podfile.command :detect do |detect|
13
- detect.action do |global_options,options,args|
12
+ detect.action do |global_options, options, args|
14
13
  path = File.expand_path(global_options[:path])
15
14
  podfile_detect(path)
16
15
  end
@@ -14,7 +14,7 @@ module BigKeeper
14
14
  # Get modules' name
15
15
  module_list = BigkeeperParser.module_names
16
16
  # initialize PodfileDetector
17
- detector = PodfileDetector.new(path,module_list)
17
+ detector = PodfileDetector.new(path, module_list)
18
18
  # Get unlocked third party pods list
19
19
  unlock_pod_list = detector.get_unlock_pod_list
20
20
  # Print out unlock pod list
@@ -31,15 +31,15 @@ module BigKeeper
31
31
  # Get modules' name
32
32
  module_list = BigkeeperParser.module_names
33
33
  # initialize PodfileDetector
34
- detector = PodfileDetector.new(path,module_list)
34
+ detector = PodfileDetector.new(path, module_list)
35
35
  # Get unlocked third party pods list
36
36
  unlock_pod_list = detector.get_unlock_pod_list
37
37
  # Get Version
38
- dictionary = detector.deal_lock_file(path,unlock_pod_list)
38
+ dictionary = detector.deal_lock_file(path, unlock_pod_list)
39
39
  if dictionary.empty?
40
40
  Logger.warning("There is nothing to be locked.")
41
41
  else
42
- PodfileOperator.new.find_and_lock("#{path}/Podfile",dictionary)
42
+ PodfileOperator.new.find_and_lock("#{path}/Podfile", dictionary)
43
43
  Logger.highlight("The Podfile has been changed.")
44
44
  Logger.separator
45
45
  end
@@ -61,7 +61,7 @@ module BigKeeper
61
61
  if module_dictionary.empty?
62
62
  Logger.warning("There is nothing to be upgrade.")
63
63
  else
64
- PodfileOperator.new.find_and_upgrade("#{path}/Podfile",module_dictionary)
64
+ PodfileOperator.new.find_and_upgrade("#{path}/Podfile", module_dictionary)
65
65
  Logger.highlight("The Podfile has been changed.")
66
66
  end
67
67
  end
@@ -34,6 +34,7 @@ module BigKeeper
34
34
  end
35
35
 
36
36
  c.desc 'release module'
37
+ c.switch [:i,:ignore]
37
38
  c.command :module do |m|
38
39
  m.desc 'Start release module project'
39
40
  m.command :start do |start|
@@ -45,11 +46,12 @@ module BigKeeper
45
46
  help_now!('module name is required') if args.length != 1
46
47
  raise Logger.error("release version is required") if version == nil
47
48
  module_name = args[0]
48
- release_module_start(path, version, user, module_name)
49
+ release_module_start(path, version, user, module_name, options[:ignore])
49
50
  end
50
51
  end
51
52
 
52
53
  m.desc 'finish release module project'
54
+ m.switch [:s,:spec]
53
55
  m.command :finish do |finish|
54
56
  finish.action do |global_options, options, args|
55
57
  path = File.expand_path(global_options[:path])
@@ -59,7 +61,7 @@ module BigKeeper
59
61
  help_now!('module name is required') if args.length != 1
60
62
  raise Logger.error("release version is required") if version == nil
61
63
  module_name = args[0]
62
- release_module_finish(path, version, user, module_name)
64
+ release_module_finish(path, version, user, module_name, options[:spec])
63
65
  end
64
66
  end
65
67
  end
@@ -4,64 +4,64 @@ require 'big_keeper/util/gitflow_operator'
4
4
  require 'big_keeper/dependency/dep_type'
5
5
  require 'big_keeper/util/info_plist_operator'
6
6
  require 'big_keeper/util/logger'
7
+ require 'big_keeper/util/xcode_operator'
7
8
 
8
9
  module BigKeeper
9
10
  def self.release_home_start(path, version, user)
10
11
  BigkeeperParser.parse("#{path}/Bigkeeper")
11
- start_release(path, version, BigkeeperParser::module_names, user)
12
- end
13
12
 
14
- def self.release_home_finish(path, version)
15
- Dir.chdir(path) do
13
+ modules = BigkeeperParser.module_names
14
+
15
+ #stash
16
+ StashService.new.stash_all(path, GitOperator.new.current_branch(path), user, modules)
17
+
18
+ # check
19
+ GitOperator.new.check_merge(path, "feature/#{version}")
20
+ GitOperator.new.check_diff(path, "develop", "master")
21
+
22
+ #checkout release branch
23
+ Logger.highlight(%Q(Start to checkout Branch release/#{version}))
24
+ if GitOperator.new.current_branch(path) != "release/#{version}"
16
25
  if GitOperator.new.has_branch(path, "release/#{version}")
17
- if GitOperator.new.current_branch(path) == "release/#{version}"
18
- GitOperator.new.commit(path, "release: V #{version}")
19
- GitOperator.new.push_to_remote(path, "release/#{version}")
20
- GitflowOperator.new.finish_release(path, version)
21
- if GitOperator.new.current_branch(path) == "master"
22
- GitOperator.new.tag(path, version)
23
- else
24
- GitOperator.new.checkout(path, "master")
25
- GitOperator.new.tag(path, version)
26
- end
27
- else
28
- raise Logger.error("Not in release branch, please check your branches.")
29
- end
26
+ GitOperator.new.checkout(path, "release/#{version}")
30
27
  else
31
- raise Logger.error("Not has release branch, please use release start first.")
28
+ GitflowOperator.new.start(path, version, GitflowType::RELEASE)
29
+ GitOperator.new.push_to_remote(path, "release/#{version}")
32
30
  end
33
31
  end
34
- end
35
32
 
36
- private
37
- def self.start_release(project_path, version, modules, user)
38
- Dir.chdir(project_path) do
39
- # step 0 Stash current branch
40
- StashService.new.stash_all(project_path, GitOperator.new.current_branch(project_path), user, modules)
33
+ Logger.highlight(%Q(Start to release/#{version}))
34
+ # step 2 replace_modules
35
+ PodfileOperator.new.replace_all_module_release(path,
36
+ user,
37
+ modules,
38
+ ModuleOperateType::RELEASE)
39
+
40
+ # step 3 change Info.plist value
41
+ InfoPlistOperator.new.change_version_build(path, version)
41
42
 
42
- Logger.highlight(%Q(Start to checkout Branch release/#{version}))
43
- # step 1 checkout release
44
- if GitOperator.new.current_branch(project_path) != "release/#{version}"
45
- if GitOperator.new.has_branch(project_path, "release/#{version}")
46
- GitOperator.new.checkout(project_path, "release/#{version}")
43
+ DepService.dep_operator(path, user).install(true)
44
+ XcodeOperator.open_workspace(path)
45
+ end
46
+
47
+ def self.release_home_finish(path, version)
48
+ if GitOperator.new.has_branch(path, "release/#{version}")
49
+ if GitOperator.new.current_branch(path) == "release/#{version}"
50
+ GitOperator.new.commit(path, "release: V #{version}")
51
+ GitOperator.new.push_to_remote(path, "release/#{version}")
52
+ GitflowOperator.new.finish_release(path, version)
53
+ if GitOperator.new.current_branch(path) == "master"
54
+ GitOperator.new.tag(path, version)
47
55
  else
48
- GitflowOperator.new.start(project_path, version, GitflowType::RELEASE)
49
- GitOperator.new.push_to_remote(project_path, "release/#{version}")
56
+ GitOperator.new.checkout(path, "master")
57
+ GitOperator.new.tag(path, version)
50
58
  end
59
+ else
60
+ raise Logger.error("Not in release branch, please check your branches.")
51
61
  end
52
-
53
- Logger.highlight(%Q(Start to release/#{version}))
54
- # step 2 replace_modules
55
- PodfileOperator.new.replace_all_module_release(project_path,
56
- user,
57
- modules,
58
- version)
59
-
60
- # step 3 change Info.plist value
61
- InfoPlistOperator.new.change_version_build(project_path, version)
62
-
63
- DepService.dep_operator(project_path, user).install(true)
64
- `open #{project_path}/*.xcworkspace`
62
+ else
63
+ raise Logger.error("Not has release branch, please use release start first.")
65
64
  end
66
65
  end
66
+
67
67
  end
@@ -5,102 +5,55 @@ require 'big_keeper/dependency/dep_type'
5
5
  require 'big_keeper/util/info_plist_operator'
6
6
  require 'big_keeper/util/git_operator'
7
7
  require 'big_keeper/util/logger'
8
+ require 'big_keeper/util/pod_operator'
8
9
 
9
10
  module BigKeeper
10
- def self.release_module_start(path, version, user, module_name)
11
+ def self.release_module_start(path, version, user, module_name, ignore)
11
12
  BigkeeperParser.parse("#{path}/Bigkeeper")
13
+ module_path = BigkeeperParser.module_full_path(path, user, module_name)
12
14
 
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
15
+ # stash
16
+ StashService.new.stash(module_path, GitOperator.new.current_branch(module_path), module_name)
19
17
 
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}")
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))
31
23
  end
32
- return
33
24
 
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
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")
56
28
 
57
- Logger.highlight(%Q(Success release #{module_name} V#{version}))
58
- end
29
+ Logger.highlight(%Q(#{module_name} release start finish))
59
30
  end
60
31
 
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
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)
76
36
 
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
37
+ # check commit
38
+ Logger.error("current branch has unpush files") if GitOperator.new.has_changes(module_path)
39
+ # check out master
40
+ Logger.highlight("'#{module_name}' checkout branch to master...")
41
+ GitService.new.verify_checkout_pull(module_path, "master")
42
+
43
+ Logger.highlight(%Q(Merge develop to master))
44
+ # merge develop to master
45
+ GitOperator.new.merge(module_path, "develop")
46
+ GitOperator.new.push_to_remote(module_path, "master")
47
+
48
+ #修改 podspec 文件
49
+ # TO DO: - advanced to use Regular Expression
50
+ has_change = PodfileOperator.new.podspec_change(%Q(#{module_path}/#{module_name}.podspec), version, module_name)
51
+ GitService.new.verify_push(module_path, "Change version number", "master", "#{module_name}") if has_change == true
52
+ GitOperator.new.tag(module_path, version)
53
+ # pod repo push
54
+ if spec == true
55
+ PodOperator.pod_repo_push(module_path, module_name, BigkeeperParser.source_spec_path(module_name), version)
90
56
  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
57
  end
96
58
 
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
59
  end
@@ -3,6 +3,7 @@ require 'big_keeper/dependency/dep_operator'
3
3
  require 'big_keeper/util/pod_operator'
4
4
  require 'big_keeper/util/xcode_operator'
5
5
  require 'big_keeper/util/cache_operator'
6
+ require 'big_keeper/util/file_operator'
6
7
 
7
8
  module BigKeeper
8
9
  # Operator for podfile
@@ -64,6 +65,16 @@ module BigKeeper
64
65
  branch_name = GitOperator.new.current_branch(@path)
65
66
  base_branch_name = GitflowType.base_branch(GitService.new.current_branch_type(@path))
66
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
67
78
  else
68
79
  line
69
80
  end
@@ -85,6 +96,35 @@ module BigKeeper
85
96
  origin_config.chop
86
97
  end
87
98
 
88
- private :generate_module_config, :origin_config_of_module
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
89
129
  end
90
130
  end
@@ -1,8 +1,8 @@
1
1
 
2
2
  module BigKeeper
3
3
 
4
- class Podfile_Modle
5
- attr_accessor :name,:git,:path,:configurations,:branch,:tag,:comment
4
+ class PodfileModel
5
+ attr_accessor :name, :git, :path, :configurations, :branch,:tag, :comment
6
6
  def initialize(sentence)
7
7
  if sentence.include?('#')
8
8
  list = sentence.split('#')
@@ -43,6 +43,11 @@ module BigKeeper
43
43
  end
44
44
  end
45
45
 
46
+ def verify_checkout_pull(path, branch_name)
47
+ GitService.new.verify_checkout(path, branch_name)
48
+ GitService.new.pull(path, branch_name)
49
+ end
50
+
46
51
  def verify_special_branch(path, name)
47
52
  git = GitOperator.new
48
53
 
@@ -113,9 +118,9 @@ module BigKeeper
113
118
  def branchs_with_type(path, type)
114
119
  branchs = []
115
120
  Dir.chdir(path) do
116
- IO.popen('git branch -a') do |io|
117
- io.each do |line|
118
- branchs << line.rstrip if line =~ /(\* | )#{GitflowType.name(type)}*/
121
+ IO.popen('git branch -a') do | io |
122
+ io.each do | line |
123
+ branchs << line.gsub(/\s/, '') if line =~ /[\s\S]*#{GitflowType.name(type)}*/
119
124
  end
120
125
  end
121
126
  end
@@ -137,14 +137,21 @@ module BigKeeper
137
137
  ModuleCacheOperator.new(path).del_path_module(module_name)
138
138
  end
139
139
 
140
- def list(path, user, module_path)
141
- branches_name = []
142
- IO.popen("cd #{path}; git branch -a") do |io|
143
- io.each do |line|
144
- branches_name << line.strip if line.include? 'feature'
140
+ def module_info(module_path, home_branch_name, user, type, module_name, version)
141
+ result_dic = {}
142
+ matched_branches = []
143
+ branches = GitService.new.branchs_with_type(module_path, type)
144
+ if version == 'all versions'
145
+ matched_branches = branches
146
+ else
147
+ branches.each do | branch |
148
+ matched_branches << branch if branch.include?(version)
145
149
  end
146
150
  end
147
- branches_name
151
+ result_dic[:module_name] = module_name
152
+ result_dic[:current_branch] = GitOperator.new.current_branch(module_path)
153
+ result_dic[:branches] = matched_branches
154
+ result_dic
148
155
  end
149
156
 
150
157
  private :verify_module
@@ -27,6 +27,7 @@ module BigKeeper
27
27
 
28
28
  def self.source(name)
29
29
  BigkeeperParser.parse_source(name)
30
+ yield if block_given?
30
31
  end
31
32
 
32
33
  # Bigkeeper file parser
@@ -43,23 +44,25 @@ module BigKeeper
43
44
  content.gsub!(/version\s/, 'BigKeeper::version ')
44
45
  content.gsub!(/user\s/, 'BigKeeper::user ')
45
46
  content.gsub!(/home\s/, 'BigKeeper::home ')
47
+ content.gsub!(/source\s/, 'BigKeeper::source ')
46
48
  content.gsub!(/mod\s/, 'BigKeeper::mod ')
47
49
  content.gsub!(/modules\s/, 'BigKeeper::modules ')
48
- content.gsub!(/source\s/, 'BigKeeper::source ')
49
50
  eval content
50
- # p @@config
51
51
  end
52
52
  end
53
53
 
54
- def self.parse_version(name)
55
- @@config[:version] = name
54
+ def self.parse_source(name)
55
+ @@config.delete("tmpSpec")
56
+ source_split = name.split(",") unless name.split(",").length != 2
57
+ if source_split != nil
58
+ sources = Hash["#{source_split[1].lstrip}" => "#{source_split[0]}"]
59
+ @@config[:source] = sources
60
+ @@config[:tmpSpec] = source_split[1].lstrip
61
+ end
56
62
  end
57
63
 
58
- def self.parse_source(name)
59
- sources = []
60
- sources << @@config[:source]
61
- sources << name
62
- @@config[:source] = sources
64
+ def self.parse_version(name)
65
+ @@config[:version] = name
63
66
  end
64
67
 
65
68
  def self.parse_user(name)
@@ -96,6 +99,9 @@ module BigKeeper
96
99
  end
97
100
 
98
101
  def self.parse_modules_mod(name, params)
102
+ if @@config[:source] != nil
103
+ params[:spec] = "#{@@config[:tmpSpec]}"
104
+ end
99
105
  modules = @@config[:modules]
100
106
  modules[name] = params
101
107
  @@config[:modules] = modules
@@ -123,12 +129,17 @@ module BigKeeper
123
129
  @@config[:home][:pulls]
124
130
  end
125
131
 
126
- def self.sourcemodule_path
127
- if @@config[:source] == nil
128
- return ""
129
- else
130
- @@config[:source].join(",").reverse.chop.reverse
131
- end
132
+ def self.source_spec_path(module_name)
133
+ spec = @@config[:modules][module_name][:spec]
134
+ @@config[:source][spec]
135
+ end
136
+
137
+ def self.source_spec_name(module_name)
138
+ spec = @@config[:modules][module_name][:spec]
139
+ end
140
+
141
+ def self.sources
142
+ @@config[:source].keys
132
143
  end
133
144
 
134
145
  def self.module_full_path(home_path, user_name, module_name)
@@ -11,5 +11,11 @@ module BigKeeper
11
11
  def find_all(path, name)
12
12
  Dir.glob("#{path}/*/#{name}")
13
13
  end
14
+
15
+ def current_username
16
+ current_name = `whoami`
17
+ current_name.chomp
18
+ end
19
+
14
20
  end
15
21
  end
@@ -13,7 +13,7 @@ module BigKeeper
13
13
  has_branch = false
14
14
  IO.popen("cd #{path}; git branch -r") do |io|
15
15
  io.each do |line|
16
- has_branch = true if line =~ /([\s\S]*)#{branch_name}$/
16
+ has_branch = true if line.include? branch_name
17
17
  end
18
18
  end
19
19
  has_branch
@@ -23,7 +23,7 @@ module BigKeeper
23
23
  has_branch = false
24
24
  IO.popen("cd #{path}; git branch") do |io|
25
25
  io.each do |line|
26
- has_branch = true if line =~ /([\s\S]*)#{branch_name}$/
26
+ has_branch = true if line.include? branch_name
27
27
  end
28
28
  end
29
29
  has_branch
@@ -33,7 +33,7 @@ module BigKeeper
33
33
  has_branch = false
34
34
  IO.popen("cd #{path}; git branch -a") do |io|
35
35
  io.each do |line|
36
- has_branch = true if line =~ /([\s\S]*)#{branch_name}$/
36
+ has_branch = true if line.include? branch_name
37
37
  end
38
38
  end
39
39
  has_branch
@@ -88,7 +88,7 @@ module BigKeeper
88
88
 
89
89
  def has_commits(path, branch_name)
90
90
  has_commits = false
91
- IO.popen("cd #{path}; git log #{branch_name} --not --remotes") do |io|
91
+ IO.popen("cd #{path}; git log --branches --not --remotes") do |io|
92
92
  io.each do |line|
93
93
  has_commits = true if line.include? branch_name
94
94
  end
@@ -130,11 +130,71 @@ module BigKeeper
130
130
  end
131
131
 
132
132
  def tag(path, version)
133
- Dir.chdir(path) do
134
- `git tag -a #{version} -m "release: V #{version}" master`
135
- `git push --tags`
133
+ tags = Array.new
134
+ IO.popen("cd #{path}; git tag") do |io|
135
+ io.each do |line|
136
+ tags << line
137
+ end
138
+ end
139
+ unless tags.include? "#{version}\n"
140
+ Dir.chdir(path) do
141
+ `git tag -a #{version} -m "release: V #{version}" master;`
142
+ `git push --tags`
143
+ end
144
+ return
145
+ end
146
+ Logger.highlight("tag already exists in the remote, skip this step")
147
+ end
148
+
149
+ def tag_list(path)
150
+ tag_list = Array.new
151
+ IO.popen("cd #{path}; git tag -l") do |io|
152
+ io.each do |line|
153
+ unless line=~(/[a-zA-Z]/)
154
+ tag_list << line
155
+ end
156
+ end
136
157
  end
158
+ tag_list
137
159
  end
160
+
161
+ def check_merge(path, condition)
162
+ unmerged_branch = Array.new
163
+ IO.popen("cd #{path}; git branch --no-merged") do |io|
164
+ io.each do |line|
165
+ unmerged_branch.push(line) if line.include? "#{condition}"
166
+ end
167
+ end
168
+ if (unmerged_branch.size > 0)
169
+ unmerged_branch.map { |item|
170
+ Logger.default(item)
171
+ }
172
+ Logger.error("Still has unmerged feature branch, please check")
173
+ end
174
+ end
175
+
176
+ def check_diff(path, branch, compare_branch)
177
+ compare_branch_commits = Array.new
178
+ IO.popen("cd #{path}; git log --left-right #{branch}...#{compare_branch} --pretty=oneline") do |io|
179
+ io.each do |line|
180
+ compare_branch_commits.push(line) if (line.include? '>') && (line.include? "Merge branch #{branch} into #{compare_branch}")
181
+ end
182
+ end
183
+ if compare_branch_commits.size > 0
184
+ compare_branch_commits.map { |item|
185
+ Logger.default(item)
186
+ }
187
+ Logger.error("#{compare_branch} branch has commit dont committed in #{branch}, please check")
188
+ return
189
+ end
190
+ end
191
+
192
+ def merge(path, branch_name)
193
+ IO.popen("cd #{path}; git merge #{branch_name}") do |line|
194
+ Logger.error("Merge conflict in #{branch_name}") if line.include? 'Merge conflict'
195
+ end
196
+ end
197
+
138
198
  end
139
199
 
140
200
  # p GitOperator.new.user
@@ -1,24 +1,67 @@
1
1
  require 'big_keeper/util/logger'
2
+ require 'json'
2
3
 
3
4
  module BigKeeper
4
5
  class ListGenerator
5
- def self.generate(file_path,branches_name)
6
+ #generate tree print throught console
7
+ def self.generate_tree(file_path, home_branches, version)
6
8
  module_branches_dic = {}
7
- home_name = BigkeeperParser.home_name
8
- File.open(file_path, 'r') do |file|
9
- file.each_line do |line|
10
- if /=>/ =~ line.delete('{}"')
11
- module_branches_dic[$~.pre_match] = $~.post_match.delete('[]"').split(',')
9
+ json_data = File.read(file_path)
10
+ module_branches_dic = JSON.parse(json_data)
11
+ to_tree(module_branches_dic, home_branches, version)
12
+ end
13
+
14
+ #generate json print throught console
15
+ def self.generate_json(file_path, home_branches, version)
16
+ module_branches_dic = {}
17
+ json_data = File.read(file_path)
18
+ module_branches_dic = JSON.parse(json_data)
19
+ json = to_json(home_branches, module_branches_dic, version)
20
+ puts JSON.pretty_generate(json)
21
+ end
22
+
23
+ def self.to_json(home_branches, module_info_list, version)
24
+ json_array = []
25
+ print_all = version == "all versions"
26
+ home_branches.each do | home_branch_name |
27
+ next unless home_branch_name.include?(version) || print_all
28
+ branch_dic = {}
29
+ involve_modules = []
30
+ module_info_list.collect do | module_info_dic |
31
+ next unless module_info_dic["branches"] != nil
32
+ module_name = module_info_dic["module_name"]
33
+ module_info_dic["branches"].each do | module_branch |
34
+ if module_branch.strip.delete("*") == home_branch_name
35
+ module_current_info = {}
36
+ module_current_info["module_name"] = module_name
37
+ module_current_info["current_branch"] = module_info_dic["current_branch"]
38
+ involve_modules << module_current_info
39
+ end
40
+ end
12
41
  end
13
- end
42
+ branch_dic["home_branche_name"] = home_branch_name
43
+ branch_dic["involve_modules"] = involve_modules
44
+ json_array << branch_dic
14
45
  end
46
+ json_array
47
+ end
15
48
 
16
- branches_name.each do |branch_name|
17
- Logger.highlight(" #{home_name} - #{branch_name} ")
18
- module_branches_dic.keys.each do |module_name|
19
- module_branches_dic[module_name].each do |module_branch|
20
- if module_branch.include?(branch_name.strip.delete('*'))
21
- Logger.default(" |_ _ _ #{module_name} - #{branch_name}")
49
+ def self.to_tree(module_branches_dic, branches_name, version)
50
+ home_name = BigkeeperParser.home_name
51
+ print_all = version == "all versions"
52
+ branches_name.each do | home_branch_name |
53
+ next unless home_branch_name.include?(version) || print_all
54
+ Logger.highlight(home_branch_name.strip)
55
+ module_branches_dic.each do | module_info_dic |
56
+ module_name = module_info_dic["module_name"]
57
+ next if module_info_dic["branches"] == nil
58
+ module_info_dic["branches"].each do | module_branch |
59
+ if module_branch.include?(home_branch_name.strip.delete('*'))
60
+ if !module_branch.include?("*") && home_branch_name.include?("*")
61
+ Logger.warning(" ├── #{module_name} (current branch :#{module_info_dic["current_branch"]})")
62
+ else
63
+ Logger.default(" ├── #{module_name}")
64
+ end
22
65
  break
23
66
  end
24
67
  end
@@ -6,22 +6,65 @@ module BigKeeper
6
6
  def self.pod_install(path, repo_update)
7
7
  # pod install
8
8
  if repo_update
9
- Logger.highlight('Start pod repo update, waiting...')
10
- cmd = 'pod repo update'
11
- Open3.popen3(cmd) do |stdin , stdout , stderr, wait_thr|
12
- while line = stdout.gets
13
- puts line
14
- end
15
- end
9
+ PodOperator.pod_update_private_repos(true)
16
10
  end
17
11
  Logger.highlight('Start pod install, waiting...')
18
12
  cmd = "pod install --project-directory=#{path}"
19
- Open3.popen3(cmd) do |stdin , stdout , stderr, wait_thr|
13
+ Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
20
14
  while line = stdout.gets
21
15
  puts line
22
16
  end
23
17
  end
24
18
  Logger.highlight('Finish pod install.')
25
19
  end
20
+
21
+ def self.pod_repo_push(path, module_name, source, version)
22
+ Logger.highlight(%Q(Start Pod repo push #{module_name}))
23
+ Dir.chdir(path) do
24
+ command = ""
25
+ p BigkeeperParser.source_spec_name(module_name)
26
+ if source.length > 0
27
+ command = "pod repo push #{BigkeeperParser.source_spec_name(module_name)} #{module_name}.podspec --allow-warnings --sources=#{source} --verbose --use-libraries"
28
+ else
29
+ command = "pod repo push #{BigkeeperParser.source_spec_name(module_name)} #{module_name}.podspec --allow-warnings --verbose --use-libraries"
30
+ end
31
+
32
+ IO.popen(command) do |io|
33
+ is_success = false
34
+ error_info = Array.new
35
+ io.each do |line|
36
+ error_info.push(line)
37
+ is_success = true if line.include? "Updating spec repo"
38
+ end
39
+ unless is_success
40
+ puts error_info
41
+ Logger.error("Fail: '#{module_name}' Pod repo fail")
42
+ end
43
+ Logger.highlight(%Q(Success release #{module_name} V#{version}))
44
+ end
45
+ end
46
+ end
47
+
48
+ def self.pod_update_private_repos(update_private)
49
+ if update_private
50
+ BigkeeperParser.sources.map { |spec|
51
+ Logger.highlight('Start pod repo update, waiting...')
52
+ cmd = "pod repo update #{spec}"
53
+ cmd(cmd)
54
+ }
55
+ else
56
+ cmd = "pod repo update"
57
+ cmd(cmd)
58
+ end
59
+ end
60
+
61
+ def self.cmd(cmd)
62
+ Open3.popen3(cmd) do |stdin , stdout , stderr, wait_thr|
63
+ while line = stdout.gets
64
+ puts line
65
+ end
66
+ end
67
+ end
68
+
26
69
  end
27
70
  end
@@ -10,7 +10,7 @@ class PodfileDetector
10
10
  $unlock_pod_list = []
11
11
  $modify_pod_list = {}
12
12
 
13
- def initialize(main_path,module_list)
13
+ def initialize(main_path, module_list)
14
14
  @module_list = module_list
15
15
  @main_path = main_path
16
16
  end
@@ -22,13 +22,16 @@ class PodfileDetector
22
22
  deal_podfile_line(sentence) unless sentence =~(/(\d+.){1,2}\d+/)
23
23
  end
24
24
  $unlock_pod_list
25
- # p $unlock_pod_list
26
25
  end
27
26
 
28
27
  def deal_podfile_line(sentence)
29
- if sentence.include?('pod ')
30
- pod_model = Podfile_Modle.new(sentence)
31
- if !pod_model.name.empty? && pod_model.configurations != '[\'Debug\']' && pod_model.path == nil && pod_model.tag == nil
28
+ return unless !sentence.strip.start_with?("#")
29
+ if sentence.strip.include?('pod ')
30
+ pod_model = PodfileModel.new(sentence)
31
+ if !pod_model.name.empty? &&
32
+ pod_model.configurations != '[\'Debug\']' &&
33
+ pod_model.path == nil &&
34
+ pod_model.tag == nil
32
35
  $unlock_pod_list << pod_model.name unless @module_list.include?(pod_model.name)
33
36
  end
34
37
  pod_model
@@ -36,7 +39,7 @@ class PodfileDetector
36
39
  end
37
40
 
38
41
 
39
- def deal_lock_file(main_path,deal_list)
42
+ def deal_lock_file(main_path, deal_list)
40
43
  $result = {}
41
44
  podfile_lock_lines = File.readlines("#{main_path}/Podfile.lock")
42
45
  Logger.highlight("Analyzing Podfile.lock...") unless podfile_lock_lines.size.zero?
@@ -52,7 +55,7 @@ class PodfileDetector
52
55
  temp_version = get_lock_version(temp_sentence)
53
56
  if temp_version != nil
54
57
  if current_version != nil
55
- $result[pod_name] = chose_version(current_version,temp_version)
58
+ $result[pod_name] = chose_version(current_version, temp_version)
56
59
  else
57
60
  $result[pod_name] = temp_version
58
61
  end
@@ -64,7 +67,7 @@ class PodfileDetector
64
67
 
65
68
  def self.get_pod_model(sentence)
66
69
  if sentence.include?('pod ')
67
- pod_model = Podfile_Modle.new(sentence)
70
+ pod_model = PodfileModel.new(sentence)
68
71
  return pod_model
69
72
  end
70
73
  end
@@ -31,7 +31,6 @@ class PodfileModuleDetector
31
31
  end
32
32
  end
33
33
 
34
-
35
34
  def get_pod_search_result(pod_name)
36
35
  #输入pod Search 结果
37
36
  `pod search #{pod_name} --ios --simple >> #{@main_path}/bigKeeperPodInfo.tmp`
@@ -42,7 +41,7 @@ class PodfileModuleDetector
42
41
  Logger.highlight("Analyzing modules info...") unless podfile_lines.size.zero?
43
42
  podfile_lines.collect do |sentence|
44
43
  if sentence =~(/pod/)
45
- sentence = sentence.sub('pod','')
44
+ sentence = sentence.sub('pod', '')
46
45
  sentence = sentence.delete('\n\'')
47
46
  match_result = sentence.split(',')
48
47
  pod_name = match_result[0].strip
@@ -17,7 +17,7 @@ module BigKeeper
17
17
  false
18
18
  end
19
19
 
20
- def generate_pod_config(pod_name, version,comment)
20
+ def generate_pod_config(pod_name, version, comment)
21
21
  module_config = ''
22
22
  if comment != nil
23
23
  module_config = " pod '#{pod_name}' , '#{version}' # #{comment}"
@@ -30,9 +30,9 @@ module BigKeeper
30
30
  module_names.each do |module_name|
31
31
  DepService.dep_operator(path, user).update_module_config(
32
32
  module_name,
33
- ModuleType::GIT,
34
- GitInfo.new(BigkeeperParser.module_git(module_name), GitType::TAG, version))
33
+ ModuleOperateType::RELEASE)
35
34
  end
35
+
36
36
  end
37
37
 
38
38
  def find_and_lock(podfile, dictionary)
@@ -43,7 +43,7 @@ module BigKeeper
43
43
  pod_model = PodfileDetector.get_pod_model(line)
44
44
  if pod_model != nil && pod_model.name != nil && dictionary[pod_model.name] != nil
45
45
  # p "#{pod_name},#{dictionary[pod_name]}"
46
- temp_file.puts generate_pod_config(pod_model.name,dictionary[pod_model.name],pod_model.comment)
46
+ temp_file.puts generate_pod_config(pod_model.name, dictionary[pod_model.name], pod_model.comment)
47
47
  else
48
48
  temp_file.puts line
49
49
  end
@@ -64,7 +64,7 @@ module BigKeeper
64
64
  file.each_line do |line|
65
65
  pod_model = PodfileDetector.get_pod_model(line)
66
66
  if pod_model != nil && pod_model.name != nil && dictionary[pod_model.name] != nil
67
- temp_file.puts generate_pod_config(pod_model.name,dictionary[pod_model.name],pod_model.comment)
67
+ temp_file.puts generate_pod_config(pod_model.name, dictionary[pod_model.name], pod_model.comment)
68
68
  else
69
69
  temp_file.puts line
70
70
  end
@@ -80,13 +80,21 @@ module BigKeeper
80
80
 
81
81
  def podspec_change(podspec_file, version, module_name)
82
82
  temp_file = Tempfile.new(".#{module_name}.podspec")
83
+ has_change = false
83
84
  begin
84
85
  File.open(podspec_file, 'r') do |file|
85
86
  file.each_line do |line|
86
87
  if line.include?("s.version")
87
88
  temp_line = line
88
- if temp_line.split("=")[0].delete(" ") == "s.version"
89
- temp_file.puts "s.version = '#{version}'"
89
+ temp_line_arr = temp_line.split("=")
90
+ if temp_line_arr[0].delete(" ") == "s.version"
91
+ unless temp_line_arr[temp_line_arr.length - 1].include? "#{version}"
92
+ temp_file.puts "s.version = '#{version}'"
93
+ has_change = true
94
+ else
95
+ temp_file.puts line
96
+ Logger.highlight("The version in PodSpec is equal your input version")
97
+ end
90
98
  else
91
99
  temp_file.puts line
92
100
  end
@@ -101,6 +109,7 @@ module BigKeeper
101
109
  temp_file.close
102
110
  temp_file.unlink
103
111
  end
112
+ has_change
104
113
  end
105
114
 
106
115
  private :generate_pod_config
@@ -0,0 +1,17 @@
1
+ module BigKeeper
2
+ # Operator for got
3
+ class VerifyOperator
4
+ def self.already_in_process?
5
+ already_in_process = false
6
+ Open3.popen3('ps -ef|grep big -c') do |stdin , stdout , stderr, wait_thr|
7
+ while line = stdout.gets
8
+ if line.rstrip.to_i > 3
9
+ already_in_process = true
10
+ break
11
+ end
12
+ end
13
+ end
14
+ already_in_process
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module BigKeeper
2
- VERSION = "0.8.0"
2
+ VERSION = "0.8.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bigkeeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - mmoaay
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-10 00:00:00.000000000 Z
11
+ date: 2018-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli
@@ -264,6 +264,7 @@ files:
264
264
  - lib/big_keeper/util/podfile_detector.rb
265
265
  - lib/big_keeper/util/podfile_module.rb
266
266
  - lib/big_keeper/util/podfile_operator.rb
267
+ - lib/big_keeper/util/verify_operator.rb
267
268
  - lib/big_keeper/util/xcode_operator.rb
268
269
  - lib/big_keeper/version.rb
269
270
  - resources/banner.png