big_keeper 0.4.0 → 0.5.0
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -1
- data/big_keeper.gemspec +2 -0
- data/docs/zh-CN/RELEASE.md +20 -0
- data/lib/big_keeper.rb +42 -20
- data/lib/big_keeper/command/feature_pull.rb +1 -1
- data/lib/big_keeper/command/feature_switch.rb +1 -1
- data/lib/big_keeper/command/podfile_lock.rb +43 -8
- data/lib/big_keeper/command/release_home.rb +40 -27
- data/lib/big_keeper/command/release_module.rb +15 -15
- data/lib/big_keeper/model/podfile_model.rb +33 -0
- data/lib/big_keeper/service/git_service.rb +3 -3
- data/lib/big_keeper/service/module_service.rb +2 -2
- data/lib/big_keeper/util/git_operator.rb +8 -4
- data/lib/big_keeper/util/gitflow_operator.rb +10 -0
- data/lib/big_keeper/util/log_util.rb +40 -0
- data/lib/big_keeper/util/podfile_detector.rb +40 -72
- data/lib/big_keeper/util/podfile_operator.rb +32 -1
- data/lib/big_keeper/version.rb +1 -1
- metadata +33 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a3c399d6961d86ef419b46541eed58b809c484d
|
4
|
+
data.tar.gz: 699643b23a3b95ef5d843918d0c4f1f8999be335
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 878010d015f1fab7c07d1392152badae3ef259e5c63b0b916ba0169be9fc616e25a7a6d59f2d35d76619a4567b06a20297e298b091bb599824ce39ce1c41d2fc
|
7
|
+
data.tar.gz: 0b5cbce481f7330aaef652251c01e3ceab73b93bb4f6261ff414426cdce77bed903213e51d69e75e09606b2d023756efb84ad35e34ecf4ec0f4fcc3422cd2e1f
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
big_keeper (0.
|
4
|
+
big_keeper (0.4.0)
|
5
5
|
big_stash (~> 0.1)
|
6
6
|
cocoapods
|
7
|
+
colorize
|
7
8
|
gli (~> 2.16)
|
8
9
|
plist
|
9
10
|
|
@@ -54,6 +55,7 @@ GEM
|
|
54
55
|
netrc (= 0.7.8)
|
55
56
|
cocoapods-try (1.1.0)
|
56
57
|
colored2 (3.1.2)
|
58
|
+
colorize (0.8.1)
|
57
59
|
escape (0.0.4)
|
58
60
|
fourflusher (2.0.1)
|
59
61
|
fuzzy_match (2.0.4)
|
@@ -101,6 +103,7 @@ DEPENDENCIES
|
|
101
103
|
big_stash (~> 0.1)
|
102
104
|
bundler (~> 1.15)
|
103
105
|
cocoapods
|
106
|
+
colorize
|
104
107
|
gli (~> 2.16)
|
105
108
|
plist
|
106
109
|
rake (~> 10.0)
|
data/big_keeper.gemspec
CHANGED
@@ -34,6 +34,7 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_runtime_dependency "big_stash", "~> 0.1"
|
35
35
|
spec.add_runtime_dependency "cocoapods"
|
36
36
|
spec.add_runtime_dependency "plist"
|
37
|
+
spec.add_runtime_dependency "colorize"
|
37
38
|
|
38
39
|
spec.add_development_dependency "bundler", "~> 1.15"
|
39
40
|
spec.add_development_dependency "rake", "~> 10.0"
|
@@ -41,5 +42,6 @@ Gem::Specification.new do |spec|
|
|
41
42
|
spec.add_development_dependency "big_stash", "~> 0.1"
|
42
43
|
spec.add_development_dependency "cocoapods"
|
43
44
|
spec.add_development_dependency "plist"
|
45
|
+
spec.add_development_dependency "colorize"
|
44
46
|
spec.add_development_dependency "rubocop", "~> 0.50.0"
|
45
47
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# release - 功能开发流程
|
2
|
+
|
3
|
+
直接在命令行执行 `big-keeper release --help` 可以查看其提供的所有功能:
|
4
|
+
```
|
5
|
+
// todo
|
6
|
+
```
|
7
|
+
全局参数如下:
|
8
|
+
|
9
|
+
- -u, --user:用户名,默认是 git global config 的 user.name,会显示在命令提示信息中,比如上述提示信息中的默认用户名是 mmoaay
|
10
|
+
|
11
|
+
- -p, --path:项目路径名,默认是当前所在的路径
|
12
|
+
|
13
|
+
- -v, --version:项目版本号,默认是当前所在的路径
|
14
|
+
|
15
|
+
功能列表如下:
|
16
|
+
|
17
|
+
- home: 发布主工程命令
|
18
|
+
- start: 开始发布主工程的某个版本
|
19
|
+
- finish:
|
20
|
+
- module: 发布模块命令
|
data/lib/big_keeper.rb
CHANGED
@@ -15,6 +15,7 @@ require 'big_keeper/command/feature_pull'
|
|
15
15
|
require 'big_keeper/command/feature_push'
|
16
16
|
require 'big_keeper/command/release_home'
|
17
17
|
require 'big_keeper/command/release_module'
|
18
|
+
require 'big_keeper/command/podfile_lock'
|
18
19
|
|
19
20
|
require 'big_keeper/service/git_service'
|
20
21
|
|
@@ -28,7 +29,7 @@ module BigKeeper
|
|
28
29
|
|
29
30
|
flag %i[p path], default_value: './'
|
30
31
|
flag %i[v ver], default_value: 'Version in Bigkeeper file'
|
31
|
-
flag %i[u user], default_value: GitOperator.new.user
|
32
|
+
flag %i[u user], default_value: GitOperator.new.user.gsub(/[^0-9A-Za-z]/, '').downcase
|
32
33
|
|
33
34
|
path = ''
|
34
35
|
version = ''
|
@@ -37,7 +38,12 @@ module BigKeeper
|
|
37
38
|
pre do |global_options, _command, options, args|
|
38
39
|
path = File.expand_path(global_options[:path])
|
39
40
|
version = global_options[:ver]
|
40
|
-
user = global_options[:user]
|
41
|
+
user = global_options[:user].gsub(/[^0-9A-Za-z]/, '').downcase
|
42
|
+
end
|
43
|
+
|
44
|
+
if !GitflowOperator.new.verify_git_flow_command
|
45
|
+
p %Q('git-flow' not found, use 'brew install git-flow' to install it)
|
46
|
+
exit
|
41
47
|
end
|
42
48
|
|
43
49
|
desc 'Feature operations'
|
@@ -46,7 +52,6 @@ module BigKeeper
|
|
46
52
|
c.desc 'Start a new feature with name for given modules and main project'
|
47
53
|
c.command :start do |start|
|
48
54
|
start.action do |global_options, options, args|
|
49
|
-
user = user.gsub(/[^0-9A-Za-z]/, '').downcase
|
50
55
|
help_now!('user name is required') if user and user.empty?
|
51
56
|
help_now!('feature name is required') if args.length < 1
|
52
57
|
name = args[0]
|
@@ -58,7 +63,6 @@ module BigKeeper
|
|
58
63
|
c.desc 'Update moduels for the feature with name'
|
59
64
|
c.command :update do |update|
|
60
65
|
update.action do |global_options, options, args|
|
61
|
-
user = user.gsub(/[^0-9A-Za-z]/, '').downcase
|
62
66
|
help_now!('user name is required') if user and user.empty?
|
63
67
|
modules = args[(0...args.length)] if args.length > 0
|
64
68
|
feature_update(path, user, modules)
|
@@ -68,7 +72,6 @@ module BigKeeper
|
|
68
72
|
c.desc 'Switch to the feature with name'
|
69
73
|
c.command :switch do |switch|
|
70
74
|
switch.action do |global_options, options, args|
|
71
|
-
user = user.gsub(/[^0-9A-Za-z]/, '').downcase
|
72
75
|
help_now!('user name is required') if user and user.empty?
|
73
76
|
help_now!('feature name is required') if args.length < 1
|
74
77
|
name = args[0]
|
@@ -79,7 +82,6 @@ module BigKeeper
|
|
79
82
|
c.desc 'Pull remote changes for current feature'
|
80
83
|
c.command :pull do |pull|
|
81
84
|
pull.action do |global_options, options, args|
|
82
|
-
user = user.gsub(/[^0-9A-Za-z]/, '').downcase
|
83
85
|
help_now!('user name is required') if user and user.empty?
|
84
86
|
feature_pull(path, user)
|
85
87
|
end
|
@@ -88,7 +90,6 @@ module BigKeeper
|
|
88
90
|
c.desc 'Push local changes to remote for current feature'
|
89
91
|
c.command :push do |push|
|
90
92
|
push.action do |global_options, options, args|
|
91
|
-
user = user.gsub(/[^0-9A-Za-z]/, '').downcase
|
92
93
|
help_now!('user name is required') if user and user.empty?
|
93
94
|
help_now!('comment message is required') if args.length < 1
|
94
95
|
comment = args[0]
|
@@ -99,7 +100,6 @@ module BigKeeper
|
|
99
100
|
c.desc 'Finish current feature'
|
100
101
|
c.command :finish do |finish|
|
101
102
|
finish.action do |global_options, options, args|
|
102
|
-
user = user.gsub(/[^0-9A-Za-z]/, '').downcase
|
103
103
|
help_now!('user name is required') if user and user.empty?
|
104
104
|
feature_finish(path, user)
|
105
105
|
end
|
@@ -124,11 +124,6 @@ module BigKeeper
|
|
124
124
|
home.desc 'Start release home project'
|
125
125
|
home.command :start do |start|
|
126
126
|
start.action do |global_options, options, args|
|
127
|
-
# path(optional): path of the Bigkeeper file in project
|
128
|
-
# version(optional): if null, will read verson in Bigkeeper file
|
129
|
-
# e.g: ruby big_keeper.rb -p /Users/SFM/Downloads/BigKeeperMain-master
|
130
|
-
# /Bigkeeper -v 3.0.0 release home start
|
131
|
-
user = user.gsub(/[^0-9A-Za-z]/, '').downcase
|
132
127
|
help_now!('user name is required') if user and user.empty?
|
133
128
|
release_home_start(path, version, user)
|
134
129
|
end
|
@@ -140,17 +135,44 @@ module BigKeeper
|
|
140
135
|
release_home_finish(path, version)
|
141
136
|
end
|
142
137
|
end
|
138
|
+
end
|
143
139
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
140
|
+
c.desc 'Start release module'
|
141
|
+
c.command :module do |finish|
|
142
|
+
finish.action do |global_options, options, args|
|
143
|
+
help_now!('module name is required') if args.length != 1
|
144
|
+
module_name = args[0]
|
145
|
+
start_module_release(path, version, user, module_name)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
desc 'Podfile operation'
|
151
|
+
command :podfile do |podfile|
|
152
|
+
podfile.flag %i[pod podfile]
|
153
|
+
podfile.desc 'Podfile'
|
154
|
+
path = ''
|
155
|
+
|
156
|
+
podfile.desc 'Detect podname should be locked.'
|
157
|
+
podfile.command :detect do |detect|
|
158
|
+
detect.action do |global_options,options,args|
|
159
|
+
podfile_detect(path)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
podfile.desc 'Lock podname should be locked.'
|
164
|
+
podfile.command :lock do |lock|
|
165
|
+
lock.action do |global_options, options, args|
|
166
|
+
podfile_lock(path)
|
151
167
|
end
|
152
168
|
end
|
153
169
|
end
|
154
170
|
|
171
|
+
desc 'Version'
|
172
|
+
command :version do |version|
|
173
|
+
version.action do |global_options, options, args|
|
174
|
+
p "big-keeper (#{VERSION})"
|
175
|
+
end
|
176
|
+
end
|
155
177
|
exit run(ARGV)
|
156
178
|
end
|
@@ -20,7 +20,7 @@ module BigKeeper
|
|
20
20
|
|
21
21
|
# Switch to new feature
|
22
22
|
GitOperator.new.git_checkout(path, branch_name)
|
23
|
-
GitOperator.new.pull(path
|
23
|
+
GitOperator.new.pull(path)
|
24
24
|
|
25
25
|
modules = PodfileOperator.new.modules_with_type("#{path}/Podfile",
|
26
26
|
BigkeeperParser.module_names, ModuleType::PATH)
|
@@ -1,16 +1,51 @@
|
|
1
1
|
|
2
|
-
require '
|
3
|
-
require '
|
4
|
-
require '
|
5
|
-
require '
|
2
|
+
require 'big_keeper/util/podfile_detector'
|
3
|
+
require 'big_keeper/util/podfile_operator'
|
4
|
+
require 'big_keeper/util/gitflow_operator'
|
5
|
+
require 'big_keeper/util/bigkeeper_parser'
|
6
|
+
require 'big_keeper/model/podfile_type'
|
7
|
+
require 'big_keeper/util/log_util'
|
6
8
|
|
7
9
|
module BigKeeper
|
10
|
+
|
11
|
+
def self.podfile_detect(path)
|
12
|
+
# Parse Bigkeeper file
|
13
|
+
BigkeeperParser.parse("#{path}/Bigkeeper")
|
14
|
+
# Get modulars' name
|
15
|
+
modular_list = BigkeeperParser.module_names
|
16
|
+
# initialize PodfileDetector
|
17
|
+
detector = PodfileDetector.new(path,modular_list)
|
18
|
+
# Get unlocked third party pods list
|
19
|
+
unlock_pod_list = detector.get_unlock_pod_list
|
20
|
+
# Print out unlock pod list
|
21
|
+
unlock_pod_list.each do |pod_name|
|
22
|
+
BigKeeperLog.default("#{pod_name} should be locked.")
|
23
|
+
end
|
24
|
+
BigKeeperLog.separator
|
25
|
+
|
26
|
+
end
|
27
|
+
|
8
28
|
def self.podfile_lock(path)
|
9
|
-
begin
|
10
29
|
# Parse Bigkeeper file
|
11
30
|
BigkeeperParser.parse("#{path}/Bigkeeper")
|
12
|
-
|
13
|
-
|
14
|
-
|
31
|
+
# Get modulars' name
|
32
|
+
modular_list = BigkeeperParser.module_names
|
33
|
+
# initialize PodfileDetector
|
34
|
+
detector = PodfileDetector.new(path,modular_list)
|
35
|
+
# Get unlocked third party pods list
|
36
|
+
unlock_pod_list = detector.get_unlock_pod_list
|
37
|
+
# Get Version
|
38
|
+
dictionary = detector.deal_lock_file(path,unlock_pod_list)
|
39
|
+
if dictionary.empty?
|
40
|
+
BigKeeperLog.warning("There is nothing to be locked.")
|
41
|
+
else
|
42
|
+
PodfileOperator.new.find_and_lock("#{path}/Podfile",dictionary)
|
43
|
+
BigKeeperLog.highlight("The Podfile has been changed.")
|
44
|
+
BigKeeperLog.separator
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
|
15
49
|
end
|
50
|
+
|
16
51
|
end
|
@@ -4,10 +4,6 @@ require 'big_keeper/util/gitflow_operator'
|
|
4
4
|
require 'big_keeper/model/podfile_type'
|
5
5
|
require 'big_keeper/util/info_plist_operator'
|
6
6
|
|
7
|
-
# 1.切换主工程的分支到 release分支
|
8
|
-
# 2.替换当前 podfile 中每个 module 为 pod #{module_name}, :git => '#{source.base}', :tag => '#{source.addition}'
|
9
|
-
# 3.替换 info.plist 中的 build version
|
10
|
-
|
11
7
|
module BigKeeper
|
12
8
|
def self.release_home_start(path, version, user)
|
13
9
|
BigkeeperParser.parse("#{path}/Bigkeeper")
|
@@ -15,37 +11,54 @@ module BigKeeper
|
|
15
11
|
end
|
16
12
|
|
17
13
|
def self.release_home_finish(path, version)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
14
|
+
Dir.chdir(path) do
|
15
|
+
if GitOperator.new.has_branch(project_path, "release/#{version}")
|
16
|
+
if GitOperator.new.current_branch(project_path) != "release/#{version}"
|
17
|
+
GitOperator.new.commit(path, "release: V #{version}")
|
18
|
+
GitOperator.new.push(path, "release/#{version}")
|
19
|
+
GitflowOperator.new.finish_release(path, version)
|
20
|
+
if GitOperator.new.current_branch(project_path) == "master"
|
21
|
+
GitOperator.new.tag(path, version)
|
22
|
+
else
|
23
|
+
GitOperator.new.git_checkout(project_path, "master")
|
24
|
+
GitOperator.new.tag(path, version)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
raise "Not in release branch, please check your branches."
|
28
|
+
end
|
29
|
+
else
|
30
|
+
raise "Not has release branch, use release start first."
|
31
|
+
end
|
32
|
+
end
|
22
33
|
end
|
23
34
|
|
24
35
|
private
|
25
36
|
def self.start_release(project_path, version, modules, source, user)
|
26
|
-
|
27
|
-
|
37
|
+
Dir.chdir(project_path) do
|
38
|
+
# step 0 Stash current branch
|
39
|
+
StashService.new.stash(project_path, GitOperator.new.current_branch(project_path), user, modules)
|
28
40
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
41
|
+
# step 1 checkout release
|
42
|
+
if GitOperator.new.current_branch(project_path) != "release/#{version}"
|
43
|
+
if GitOperator.new.has_branch(project_path, "release/#{version}")
|
44
|
+
GitOperator.new.git_checkout(project_path, "release/#{version}")
|
45
|
+
else
|
46
|
+
GitflowOperator.new.start(project_path, version, GitflowType::RELEASE)
|
47
|
+
GitOperator.new.push(project_path, "release/#{version}")
|
48
|
+
end
|
36
49
|
end
|
37
|
-
end
|
38
50
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
51
|
+
# step 2 replace_modules
|
52
|
+
PodfileOperator.new.replace_all_module_release(%Q(#{project_path}/Podfile),
|
53
|
+
modules,
|
54
|
+
version,
|
55
|
+
source)
|
44
56
|
|
45
|
-
|
46
|
-
|
57
|
+
# step 3 change Info.plist value
|
58
|
+
InfoPlistOperator.new.change_version_build(project_path, version)
|
47
59
|
|
48
|
-
|
49
|
-
|
60
|
+
p `pod install --project-directory=#{project_path}`
|
61
|
+
p `open #{project_path}/*.xcworkspace`
|
62
|
+
end
|
50
63
|
end
|
51
64
|
end
|
@@ -4,24 +4,24 @@ require 'big_keeper/util/gitflow_operator'
|
|
4
4
|
require 'big_keeper/model/podfile_type'
|
5
5
|
require 'big_keeper/util/info_plist_operator'
|
6
6
|
|
7
|
-
# 替换当前 podfile 中某个 module 为 pod #{module_name}, :git => '#{source.base}', :tag => '#{source.addition}'
|
8
|
-
|
9
7
|
module BigKeeper
|
10
|
-
def self.start_module_release(path, module_name)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
def self.start_module_release(path, version, user, module_name)
|
9
|
+
main_path = File.expand_path("#{path}/Example")
|
10
|
+
module_release(main_path,
|
11
|
+
version,
|
12
|
+
BigkeeperParser::module_names,
|
13
|
+
GitInfo.new(BigkeeperParser::home_git, GitType::TAG, version), user)
|
16
14
|
end
|
17
15
|
|
18
16
|
private
|
19
|
-
def self.module_release(project_path, module_name, source)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
17
|
+
def self.module_release(project_path, version, module_name, source)
|
18
|
+
Dir.chdir(project_path) do
|
19
|
+
PodfileOperator.new.find_and_replace(%Q(#{project_path}/Podfile),
|
20
|
+
module_name,
|
21
|
+
ModuleType::GIT,
|
22
|
+
source)
|
23
|
+
p `pod install --project-directory=#{project_path}`
|
24
|
+
p `open #{project_path}/*.xcworkspace`
|
25
|
+
end
|
26
26
|
end
|
27
27
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
module BigKeeper
|
3
|
+
|
4
|
+
class Podfile_Modle
|
5
|
+
attr_accessor :name,:git,:path,:configurations,:branch,:tag,:comment
|
6
|
+
def initialize(sentence)
|
7
|
+
if sentence.include?('#')
|
8
|
+
list = sentence.split('#')
|
9
|
+
@comment = list[1]
|
10
|
+
sentence = list[0]
|
11
|
+
end
|
12
|
+
|
13
|
+
sentence_slip_list = sentence.split(',')
|
14
|
+
return if sentence_slip_list.size.zero?
|
15
|
+
for piece in sentence_slip_list do
|
16
|
+
if /:git =>/ =~ piece
|
17
|
+
@git = $~.post_match.strip
|
18
|
+
elsif /:path =>/ =~ piece
|
19
|
+
@path = $~.post_match.strip
|
20
|
+
elsif /:configurations =>/ =~ piece
|
21
|
+
@configurations = $~.post_match.strip
|
22
|
+
elsif /:branch =>/ =~ piece
|
23
|
+
@branch = $~.post_match.strip
|
24
|
+
elsif /:tag =>/ =~ piece
|
25
|
+
@tag = $~.post_match.strip
|
26
|
+
elsif /pod /=~ piece
|
27
|
+
@name = $~.post_match.delete("'\n ")
|
28
|
+
end
|
29
|
+
# p %Q{model name:#{@name},git:#{@git},path:#{@path},config:#{@configurations},branch:#{@branch},tag:#{@tag},comment:#{@comment}}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -12,7 +12,7 @@ module BigKeeper
|
|
12
12
|
raise %Q('master' has unpushed commits, you should fix it)
|
13
13
|
else
|
14
14
|
GitOperator.new.git_checkout(path, 'master')
|
15
|
-
GitOperator.new.pull(path
|
15
|
+
GitOperator.new.pull(path)
|
16
16
|
end
|
17
17
|
else
|
18
18
|
GitOperator.new.git_checkout(path, 'master')
|
@@ -25,7 +25,7 @@ module BigKeeper
|
|
25
25
|
raise %Q('develop' has unpushed commits, you should fix it)
|
26
26
|
else
|
27
27
|
GitOperator.new.git_checkout(path, 'develop')
|
28
|
-
GitOperator.new.pull(path
|
28
|
+
GitOperator.new.pull(path)
|
29
29
|
end
|
30
30
|
else
|
31
31
|
GitOperator.new.git_checkout(path, 'develop')
|
@@ -40,7 +40,7 @@ module BigKeeper
|
|
40
40
|
branch_name = "#{GitflowType.name(type)}/#{name}"
|
41
41
|
if GitOperator.new.has_branch(path, branch_name)
|
42
42
|
GitOperator.new.git_checkout(path, branch_name)
|
43
|
-
GitOperator.new.pull(path
|
43
|
+
GitOperator.new.pull(path)
|
44
44
|
else
|
45
45
|
GitflowOperator.new.start(path, name, type)
|
46
46
|
GitOperator.new.push(path, branch_name)
|
@@ -19,7 +19,7 @@ module BigKeeper
|
|
19
19
|
GitOperator.new.git_checkout(module_full_path, branch_name)
|
20
20
|
end
|
21
21
|
p "Pull branch #{branch_name} for module #{module_name}..."
|
22
|
-
GitOperator.new.pull(module_full_path
|
22
|
+
GitOperator.new.pull(module_full_path)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -34,7 +34,7 @@ module BigKeeper
|
|
34
34
|
GitOperator.new.git_checkout(module_full_path, branch_name)
|
35
35
|
else
|
36
36
|
GitOperator.new.git_checkout(module_full_path, branch_name)
|
37
|
-
GitOperator.new.pull(module_full_path
|
37
|
+
GitOperator.new.pull(module_full_path)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -39,7 +39,11 @@ module BigKeeper
|
|
39
39
|
|
40
40
|
def git_checkout(path, branch_name)
|
41
41
|
Dir.chdir(path) do
|
42
|
-
|
42
|
+
IO.popen("git checkout #{branch_name}") do |io|
|
43
|
+
io.each do |line|
|
44
|
+
raise "Checkout #{branch_name} failed." if line.include? 'error'
|
45
|
+
end
|
46
|
+
end
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
@@ -70,13 +74,13 @@ module BigKeeper
|
|
70
74
|
|
71
75
|
def push(path, branch_name)
|
72
76
|
Dir.chdir(path) do
|
73
|
-
p `git push origin #{branch_name}`
|
77
|
+
p `git push -u origin #{branch_name}`
|
74
78
|
end
|
75
79
|
end
|
76
80
|
|
77
|
-
def pull(path
|
81
|
+
def pull(path)
|
78
82
|
Dir.chdir(path) do
|
79
|
-
p `git pull
|
83
|
+
p `git pull`
|
80
84
|
end
|
81
85
|
end
|
82
86
|
|
@@ -10,6 +10,16 @@ module BigKeeper
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
def verify_git_flow_command
|
14
|
+
has_git_flow_command = false
|
15
|
+
IO.popen('command -v git-flow') do |io|
|
16
|
+
io.each do |line|
|
17
|
+
has_git_flow_command = true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
has_git_flow_command
|
21
|
+
end
|
22
|
+
|
13
23
|
def verify_git_flow(path)
|
14
24
|
has_git_flow = false
|
15
25
|
Dir.chdir(path) do
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'colorize'
|
2
|
+
|
3
|
+
module BigKeeper
|
4
|
+
DEFAULT_LOG = 1
|
5
|
+
HIGHLIGHT_LOG = 2
|
6
|
+
ERROR_LOG = 3
|
7
|
+
WARNING_LOG = 4
|
8
|
+
|
9
|
+
class BigKeeperLog
|
10
|
+
|
11
|
+
def self.log_with_type(sentence,type)
|
12
|
+
case type
|
13
|
+
when DEFAULT_LOG then puts sentence.to_s.colorize(:default)
|
14
|
+
when HIGHLIGHT_LOG then puts sentence.to_s.colorize(:green)
|
15
|
+
when ERROR_LOG then raise sentence.to_s.colorize(:red)
|
16
|
+
when WARNING_LOG then puts sentence.to_s.colorize(:yellow)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.default(sentence)
|
21
|
+
puts sentence.to_s.colorize(:default)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.highlight(sentence)
|
25
|
+
puts sentence.to_s.colorize(:green)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.error(sentence)
|
29
|
+
raise sentence.to_s.colorize(:red)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.warning(sentence)
|
33
|
+
puts sentence.to_s.colorize(:yellow)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.separator
|
37
|
+
puts "- - - - - - - - - - - - - - - - - - - - - - - - - - -".colorize(:light_blue)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -1,68 +1,57 @@
|
|
1
|
-
require '
|
1
|
+
require 'big_keeper/util/bigkeeper_parser'
|
2
|
+
require 'big_keeper/model/podfile_model'
|
3
|
+
require 'big_keeper/util/log_util'
|
2
4
|
|
3
|
-
|
4
|
-
main_path = File.expand_path(params[:main_path])
|
5
|
-
|
6
|
-
$modular_name_list = ["ELMKnightCollegeModule","LPDFoundationKit",
|
7
|
-
"LPDIntelligentDispatchModular","LPDUserRelevanceModular",
|
8
|
-
"LPDFeedbackModular","LPDQualityControlKit","LPDWalletModular",
|
9
|
-
"LPDRiderClassificationModular","LPDTransferOrderModular",
|
10
|
-
"LPDActivityModular","LPDPOIAddressService"]
|
5
|
+
module BigKeeper
|
11
6
|
|
12
7
|
class PodfileDetector
|
13
8
|
|
9
|
+
attr_accessor :modular_list, :main_path
|
14
10
|
$unlock_pod_list = []
|
15
11
|
$modify_pod_list = {}
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
|
13
|
+
def initialize(main_path,modular_list)
|
14
|
+
@modular_list = modular_list
|
15
|
+
@main_path = main_path
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_unlock_pod_list
|
19
|
+
podfile_lines = File.readlines("#{@main_path}/Podfile")
|
20
|
+
BigKeeperLog.highlight("Analyzing Podfile...") unless podfile_lines.size.zero?
|
19
21
|
podfile_lines.collect do |sentence|
|
20
|
-
deal_podfile_line(sentence) unless sentence =~(
|
22
|
+
deal_podfile_line(sentence) unless sentence =~(/(\d+.){1,2}\d+/)
|
21
23
|
end
|
22
|
-
|
23
|
-
|
24
|
-
p $modify_pod_list
|
24
|
+
return $unlock_pod_list
|
25
|
+
# p $unlock_pod_list
|
25
26
|
end
|
26
27
|
|
27
28
|
def deal_podfile_line(sentence)
|
28
29
|
if sentence.include?('pod ')
|
29
30
|
pod_model = Podfile_Modle.new(sentence)
|
30
|
-
# p pod_model
|
31
31
|
if !pod_model.name.empty? && pod_model.configurations != '[\'Debug\']' && pod_model.path == nil && pod_model.tag == nil
|
32
|
-
|
32
|
+
$unlock_pod_list << pod_model.name unless @modular_list.include?(pod_model.name)
|
33
33
|
end
|
34
34
|
return pod_model
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def get_pod_name(sentence)
|
39
|
-
# match_data = /\'\w*\'/.match(sentence)
|
40
|
-
# pod_name = match_data.to_a[0].delete('\'')
|
41
|
-
pod_model = deal_podfile_line(sentence)
|
42
|
-
pod_name = pod_model.name if pod_model != nil && pod_model.configurations.nil
|
43
|
-
# puts pod_name
|
44
|
-
$unlock_pod_list << pod_name unless modular_name_list.include pod_name
|
45
|
-
end
|
46
38
|
|
47
39
|
def deal_lock_file(main_path,deal_list)
|
48
40
|
$result = {}
|
49
41
|
podfile_lock_lines = File.readlines("#{main_path}/Podfile.lock")
|
50
|
-
|
42
|
+
BigKeeperLog.highlight("Analyzing Podfile.lock...") unless podfile_lock_lines.size.zero?
|
51
43
|
podfile_lock_lines.select do |sentence|
|
52
|
-
|
53
44
|
if sentence.include?('DEPENDENCIES') #指定范围解析 Dependencies 之前
|
54
45
|
break
|
55
46
|
end
|
56
47
|
|
57
48
|
temp_sentence = sentence.strip
|
58
49
|
pod_name = get_lock_podname(temp_sentence)
|
59
|
-
# p pod_name
|
60
50
|
if deal_list.include?(pod_name)
|
61
51
|
current_version = $result[pod_name]
|
62
52
|
temp_version = get_lock_version(temp_sentence)
|
63
53
|
if temp_version != nil
|
64
54
|
if current_version != nil
|
65
|
-
# p "cur_version #{current_version} temp_version #{temp_version}"
|
66
55
|
$result[pod_name] = chose_version(current_version,temp_version)
|
67
56
|
else
|
68
57
|
$result[pod_name] = temp_version
|
@@ -70,24 +59,37 @@ class PodfileDetector
|
|
70
59
|
end
|
71
60
|
end
|
72
61
|
end
|
73
|
-
|
62
|
+
return $result
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.get_pod_model(sentence)
|
66
|
+
if sentence.include?('pod ')
|
67
|
+
pod_model = Podfile_Modle.new(sentence)
|
68
|
+
return pod_model
|
69
|
+
end
|
74
70
|
end
|
75
71
|
|
72
|
+
def get_pod_name(sentence)
|
73
|
+
pod_model = deal_podfile_line(sentence)
|
74
|
+
pod_name = pod_model.name if pod_model != nil && pod_model.configurations.nil
|
75
|
+
@unlock_pod_list << pod_name unless @modular_list.include pod_name
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
|
76
80
|
def get_lock_podname(sentence) #获得pod名称
|
77
|
-
|
78
|
-
match_result = /(\d+.\d+.\d+)|(\d+.\d+)/.match(sentence.delete('- :~>='))
|
81
|
+
match_result = /(\d+.){1,2}\d+/.match(sentence.delete('- :~>='))
|
79
82
|
pod_name = match_result.pre_match unless match_result == nil
|
80
|
-
return pod_name.delete('(') unless pod_name == nil
|
83
|
+
return pod_name.delete('()') unless pod_name == nil
|
81
84
|
end
|
82
85
|
|
83
86
|
def get_lock_version(sentence)#获得pod版本号
|
84
|
-
|
85
|
-
|
86
|
-
end
|
87
|
-
return nil
|
87
|
+
match_result = /(\d+.){1,2}\d+/.match(sentence)
|
88
|
+
return match_result[0] unless match_result == nil
|
88
89
|
end
|
89
90
|
|
90
91
|
def chose_version(cur_version,temp_version)
|
92
|
+
# p "cur:#{cur_version},temp:#{temp_version}"
|
91
93
|
cur_list = cur_version.split('.')
|
92
94
|
temp_list = temp_version.split('.')
|
93
95
|
temp_list << 0.to_s if temp_list.size == 2
|
@@ -102,39 +104,5 @@ class PodfileDetector
|
|
102
104
|
end
|
103
105
|
return temp_version
|
104
106
|
end
|
105
|
-
|
106
107
|
end
|
107
|
-
|
108
|
-
class Podfile_Modle
|
109
|
-
attr_accessor :name,:git,:path,:configurations,:branch,:tag,:comment
|
110
|
-
def initialize(sentence)
|
111
|
-
if sentence.include?('#')
|
112
|
-
list = sentence.split('#')
|
113
|
-
@comment = list[1]
|
114
|
-
sentence = list[0]
|
115
|
-
end
|
116
|
-
|
117
|
-
sentence_slip_list = sentence.split(',')
|
118
|
-
return if sentence_slip_list.size.zero?
|
119
|
-
for piece in sentence_slip_list do
|
120
|
-
if /:git =>/ =~ piece
|
121
|
-
@git = $~.post_match.strip
|
122
|
-
elsif /:path =>/ =~ piece
|
123
|
-
@path = $~.post_match.strip
|
124
|
-
elsif /:configurations =>/ =~ piece
|
125
|
-
@configurations = $~.post_match.strip
|
126
|
-
elsif /:branch =>/ =~ piece
|
127
|
-
@branch = $~.post_match.strip
|
128
|
-
elsif /:tag =>/ =~ piece
|
129
|
-
@tag = $~.post_match.strip
|
130
|
-
elsif /pod /=~ piece
|
131
|
-
@name = $~.post_match.delete("'\n ")
|
132
|
-
end
|
133
|
-
# p %Q{model name:#{@name},git:#{@git},path:#{@path},config:#{@configurations},branch:#{@branch},tag:#{@tag},comment:#{@comment}}
|
134
|
-
end
|
135
|
-
end
|
136
108
|
end
|
137
|
-
|
138
|
-
# p params
|
139
|
-
# p main_path
|
140
|
-
PodfileDetector.new.get_unlock_pod_list(main_path)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'tempfile'
|
2
2
|
require 'fileutils'
|
3
3
|
require 'big_keeper/model/podfile_type'
|
4
|
+
require 'big_keeper/util/podfile_detector'
|
4
5
|
|
5
6
|
module BigKeeper
|
6
7
|
# Operator for podfile
|
@@ -74,6 +75,15 @@ module BigKeeper
|
|
74
75
|
module_config
|
75
76
|
end
|
76
77
|
|
78
|
+
def generate_pod_config(pod_name, version,comment)
|
79
|
+
module_config = ''
|
80
|
+
if comment != nil
|
81
|
+
module_config = " pod '#{pod_name}' , '#{version}' # #{comment}"
|
82
|
+
else
|
83
|
+
module_config = " pod '#{pod_name}' , '#{version}'"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
77
87
|
def replace_all_module_release(podfile, module_names, version, source)
|
78
88
|
|
79
89
|
module_names.each do |module_name|
|
@@ -106,6 +116,27 @@ module BigKeeper
|
|
106
116
|
# end
|
107
117
|
end
|
108
118
|
|
109
|
-
|
119
|
+
def find_and_lock(podfile,dictionary)
|
120
|
+
temp_file = Tempfile.new('.Podfile.tmp')
|
121
|
+
begin
|
122
|
+
File.open(podfile, 'r') do |file|
|
123
|
+
file.each_line do |line|
|
124
|
+
pod_model = PodfileDetector.get_pod_model(line)
|
125
|
+
if pod_model != nil && pod_model.name != nil && dictionary[pod_model.name] != nil
|
126
|
+
# p "#{pod_name},#{dictionary[pod_name]}"
|
127
|
+
temp_file.puts generate_pod_config(pod_model.name,dictionary[pod_model.name],pod_model.comment)
|
128
|
+
else
|
129
|
+
temp_file.puts line
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
temp_file.close
|
134
|
+
FileUtils.mv(temp_file.path, podfile)
|
135
|
+
ensure
|
136
|
+
temp_file.close
|
137
|
+
temp_file.unlink
|
138
|
+
end
|
139
|
+
end
|
140
|
+
private :generate_module_config,:generate_pod_config
|
110
141
|
end
|
111
142
|
end
|
data/lib/big_keeper/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: big_keeper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mmoaay
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gli
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: colorize
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: bundler
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,6 +164,20 @@ dependencies:
|
|
150
164
|
- - ">="
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: colorize
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
153
181
|
- !ruby/object:Gem::Dependency
|
154
182
|
name: rubocop
|
155
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -187,6 +215,7 @@ files:
|
|
187
215
|
- docs/zh-CN/BIGKEEPER_FILE.md
|
188
216
|
- docs/zh-CN/FEATURE.md
|
189
217
|
- docs/zh-CN/README.md
|
218
|
+
- docs/zh-CN/RELEASE.md
|
190
219
|
- lib/big_keeper.rb
|
191
220
|
- lib/big_keeper/command/feature_finish.rb
|
192
221
|
- lib/big_keeper/command/feature_pull.rb
|
@@ -201,6 +230,7 @@ files:
|
|
201
230
|
- lib/big_keeper/command/start_module_release.sh
|
202
231
|
- lib/big_keeper/model/gitflow_type.rb
|
203
232
|
- lib/big_keeper/model/operate_type.rb
|
233
|
+
- lib/big_keeper/model/podfile_model.rb
|
204
234
|
- lib/big_keeper/model/podfile_type.rb
|
205
235
|
- lib/big_keeper/service/git_service.rb
|
206
236
|
- lib/big_keeper/service/module_service.rb
|
@@ -209,6 +239,7 @@ files:
|
|
209
239
|
- lib/big_keeper/util/git_operator.rb
|
210
240
|
- lib/big_keeper/util/gitflow_operator.rb
|
211
241
|
- lib/big_keeper/util/info_plist_operator.rb
|
242
|
+
- lib/big_keeper/util/log_util.rb
|
212
243
|
- lib/big_keeper/util/podfile_detector.rb
|
213
244
|
- lib/big_keeper/util/podfile_operator.rb
|
214
245
|
- lib/big_keeper/version.rb
|