kookeeper 1.0.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 +7 -0
- data/.github/ISSUE_TEMPLATE.md +20 -0
- data/.gitignore +50 -0
- data/.travis.yml +19 -0
- data/CODE_OF_CONDUCT.md +46 -0
- data/CONTRIBUTING.md +70 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +125 -0
- data/LICENSE +21 -0
- data/README.md +113 -0
- data/Rakefile +2 -0
- data/big_keeper.gemspec +49 -0
- data/bin/big +14 -0
- data/bin/setup +8 -0
- data/docs/en-US/FEATURE.md +0 -0
- data/docs/en-US/README.md +54 -0
- data/docs/zh-CN/BIGKEEPER_FILE.md +84 -0
- data/docs/zh-CN/FEATURE&HOTFIX.md +88 -0
- data/docs/zh-CN/IMAGE.md +0 -0
- data/docs/zh-CN/PODFILE.md +43 -0
- data/docs/zh-CN/README.md +113 -0
- data/docs/zh-CN/RECOMMEND.md +22 -0
- data/docs/zh-CN/RELEASE.md +60 -0
- data/docs/zh-CN/SPEC.md +39 -0
- data/lib/big_keeper/command/client.rb +50 -0
- data/lib/big_keeper/command/feature&hotfix/delete.rb +40 -0
- data/lib/big_keeper/command/feature&hotfix/finish.rb +54 -0
- data/lib/big_keeper/command/feature&hotfix/list.rb +63 -0
- data/lib/big_keeper/command/feature&hotfix/publish.rb +56 -0
- data/lib/big_keeper/command/feature&hotfix/pull.rb +26 -0
- data/lib/big_keeper/command/feature&hotfix/push.rb +27 -0
- data/lib/big_keeper/command/feature&hotfix/rebase.rb +32 -0
- data/lib/big_keeper/command/feature&hotfix/start.rb +74 -0
- data/lib/big_keeper/command/feature&hotfix/switch.rb +46 -0
- data/lib/big_keeper/command/feature&hotfix/update.rb +66 -0
- data/lib/big_keeper/command/feature&hotfix.rb +167 -0
- data/lib/big_keeper/command/image/image.rb +0 -0
- data/lib/big_keeper/command/image.rb +28 -0
- data/lib/big_keeper/command/init.rb +36 -0
- data/lib/big_keeper/command/pod/podfile.rb +72 -0
- data/lib/big_keeper/command/pod.rb +55 -0
- data/lib/big_keeper/command/release/finish.rb +36 -0
- data/lib/big_keeper/command/release/home.rb +92 -0
- data/lib/big_keeper/command/release/module.rb +65 -0
- data/lib/big_keeper/command/release/publish.rb +4 -0
- data/lib/big_keeper/command/release/start.rb +78 -0
- data/lib/big_keeper/command/release.rb +100 -0
- data/lib/big_keeper/command/spec/add.rb +9 -0
- data/lib/big_keeper/command/spec/analyze.rb +88 -0
- data/lib/big_keeper/command/spec/delete.rb +9 -0
- data/lib/big_keeper/command/spec/list.rb +19 -0
- data/lib/big_keeper/command/spec/search.rb +9 -0
- data/lib/big_keeper/command/spec/sync.rb +12 -0
- data/lib/big_keeper/command/spec.rb +78 -0
- data/lib/big_keeper/dependency/dep_gradle_operator.rb +74 -0
- data/lib/big_keeper/dependency/dep_operator.rb +48 -0
- data/lib/big_keeper/dependency/dep_pod_operator.rb +130 -0
- data/lib/big_keeper/dependency/dep_service.rb +14 -0
- data/lib/big_keeper/dependency/dep_type.rb +33 -0
- data/lib/big_keeper/model/gitflow_type.rb +43 -0
- data/lib/big_keeper/model/library_model.rb +116 -0
- data/lib/big_keeper/model/operate_type.rb +30 -0
- data/lib/big_keeper/model/podfile_model.rb +33 -0
- data/lib/big_keeper/service/git_service.rb +211 -0
- data/lib/big_keeper/service/module_service.rb +224 -0
- data/lib/big_keeper/service/stash_service.rb +45 -0
- data/lib/big_keeper/util/bigkeeper_parser.rb +260 -0
- data/lib/big_keeper/util/cache_operator.rb +118 -0
- data/lib/big_keeper/util/code_operator.rb +37 -0
- data/lib/big_keeper/util/command_line_util.rb +9 -0
- data/lib/big_keeper/util/file_operator.rb +33 -0
- data/lib/big_keeper/util/git_operator.rb +242 -0
- data/lib/big_keeper/util/gitflow_operator.rb +51 -0
- data/lib/big_keeper/util/gradle_content_generator.rb +26 -0
- data/lib/big_keeper/util/gradle_file_operator.rb +339 -0
- data/lib/big_keeper/util/gradle_module_operator.rb +70 -0
- data/lib/big_keeper/util/info_plist_operator.rb +46 -0
- data/lib/big_keeper/util/leancloud_logger.rb +84 -0
- data/lib/big_keeper/util/list_generator.rb +101 -0
- data/lib/big_keeper/util/lockfile_parser.rb +143 -0
- data/lib/big_keeper/util/logger.rb +47 -0
- data/lib/big_keeper/util/pod_operator.rb +70 -0
- data/lib/big_keeper/util/podfile_detector.rb +102 -0
- data/lib/big_keeper/util/podfile_module.rb +63 -0
- data/lib/big_keeper/util/podfile_operator.rb +125 -0
- data/lib/big_keeper/util/verify_operator.rb +17 -0
- data/lib/big_keeper/util/version_config_operator.rb +29 -0
- data/lib/big_keeper/util/xcode_operator.rb +15 -0
- data/lib/big_keeper/version.rb +3 -0
- data/lib/big_keeper.rb +81 -0
- data/resources/banner.png +0 -0
- data/resources/command.png +0 -0
- data/resources/keynote/big-keeper-readme-analyze.key +0 -0
- data/resources/keynote/big-keeper-readme-example.key +0 -0
- data/resources/keynote/big-keeper-readme-feature.key +0 -0
- data/resources/keynote/big-keeper-readme-release.key +0 -0
- data/resources/readme/big-keeper-readme.001.png +0 -0
- data/resources/template/Bigkeeper +23 -0
- metadata +354 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'big_keeper/dependency/dep_operator'
|
|
2
|
+
require 'big_keeper/util/gradle_module_operator'
|
|
3
|
+
require 'big_keeper/util/gradle_file_operator'
|
|
4
|
+
require 'big_keeper/model/operate_type'
|
|
5
|
+
require 'big_keeper/util/version_config_operator'
|
|
6
|
+
|
|
7
|
+
module BigKeeper
|
|
8
|
+
# Operator for podfile
|
|
9
|
+
class DepGradleOperator < DepOperator
|
|
10
|
+
|
|
11
|
+
BUILD_GRADLE = "app/build.gradle"
|
|
12
|
+
SETTINGS_GRADLE = "settings.gradle"
|
|
13
|
+
|
|
14
|
+
def backup
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def recover
|
|
18
|
+
build_file = "#{@path}/#{BUILD_GRADLE}"
|
|
19
|
+
settings_file = "#{@path}/#{SETTINGS_GRADLE}"
|
|
20
|
+
GradleFileOperator.new(@path, @user).recover_bigkeeper_config_file(build_file)
|
|
21
|
+
GradleFileOperator.new(@path, @user).recover_bigkeeper_config_file(settings_file)
|
|
22
|
+
|
|
23
|
+
cache_operator = CacheOperator.new(@path)
|
|
24
|
+
cache_operator.clean
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def update_module_config(module_name, module_operate_type)
|
|
28
|
+
if ModuleOperateType::ADD == module_operate_type
|
|
29
|
+
GradleModuleOperator.new(@path, @user, module_name).update_module(ModuleOperateType::ADD)
|
|
30
|
+
elsif ModuleOperateType::DELETE == module_operate_type
|
|
31
|
+
GradleModuleOperator.new(@path, @user, module_name).recover()
|
|
32
|
+
elsif ModuleOperateType::FINISH == module_operate_type
|
|
33
|
+
GradleModuleOperator.new(@path, @user, module_name).update_module(ModuleOperateType::FINISH)
|
|
34
|
+
elsif ModuleOperateType::PUBLISH == module_operate_type
|
|
35
|
+
GradleModuleOperator.new(@path, @user, module_name).recover()
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def install(modules, type, should_update)
|
|
40
|
+
if OperateType::START == type || OperateType::UPDATE == type || OperateType::SWITCH == type || OperateType::FINISH == type
|
|
41
|
+
GradleFileOperator.new(@path, @user).update_home_depends("#{@path}/#{BUILD_GRADLE}", "#{@path}/#{SETTINGS_GRADLE}",type)
|
|
42
|
+
elsif OperateType::PUBLISH == type
|
|
43
|
+
recover()
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def release_module_start(modules, module_name, version)
|
|
48
|
+
module_full_path = BigkeeperParser.module_full_path(@path, @user, module_name)
|
|
49
|
+
version_config_file = "#{module_full_path}/doc/config/version-config.gradle"
|
|
50
|
+
version = "#{version}-SNAPSHOT" unless version.include?'SNAPSHOT'
|
|
51
|
+
VersionConfigOperator.change_version(version_config_file, modules, version)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def release_module_finish(modules, module_name, version)
|
|
55
|
+
module_full_path = BigkeeperParser.module_full_path(@path, @user, module_name)
|
|
56
|
+
version_config_file = "#{module_full_path}/doc/config/version-config.gradle"
|
|
57
|
+
VersionConfigOperator.change_version(version_config_file, modules, version)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def release_home_start(modules, version)
|
|
61
|
+
version_config_file = "#{@path}/doc/config/version-config.gradle"
|
|
62
|
+
version = "#{version}-SNAPSHOT" unless version.include?'SNAPSHOT'
|
|
63
|
+
VersionConfigOperator.change_version(version_config_file, modules, version)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def release_home_finish(modules, version)
|
|
67
|
+
version_config_file = "#{@path}/doc/config/version-config.gradle"
|
|
68
|
+
VersionConfigOperator.change_version(version_config_file, modules, version)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def open
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
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 release_module_start(modules, module_name, version)
|
|
25
|
+
raise "You should override this method in subclass."
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def release_module_finish(modules, module_name, version)
|
|
29
|
+
raise "You should override this method in subclass."
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def release_home_start(modules, version)
|
|
33
|
+
raise "You should override this method in subclass."
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def release_home_finish(modules, version)
|
|
37
|
+
raise "You should override this method in subclass."
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def install(modules, type, should_update)
|
|
41
|
+
raise "You should override this method in subclass."
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def open
|
|
45
|
+
raise "You should override this method in subclass."
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
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', :encoding => 'UTF-8')
|
|
24
|
+
|
|
25
|
+
begin
|
|
26
|
+
File.open(file, 'r', :encoding => 'UTF-8') 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(modules, type, 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}((\/[_a-zA-Z0-9]+)?)('|")([\s\S]*)/){
|
|
49
|
+
if ModuleOperateType::ADD == module_operate_type
|
|
50
|
+
module_path = BigkeeperParser.module_path(@user, module_name)
|
|
51
|
+
"#{$1}pod '#{module_name}#{$4}', :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}#{$4}', :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}#{$4}', :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}#{$4}', '#{lastest_tag}'"
|
|
74
|
+
else
|
|
75
|
+
Logger.default("#{module_name} lastest tag is #{lastest_tag}, this tag not publish.")
|
|
76
|
+
"#{$1}pod '#{module_name}#{$4}', :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', :encoding => 'UTF-8') 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
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
require 'big_keeper/util/file_operator'
|
|
2
|
+
require 'big_keeper/util/code_operator'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
module BigKeeper
|
|
6
|
+
class LibraryModel
|
|
7
|
+
attr_accessor :name, :file_list, :header_file_list, :keyword_list, :spec_library
|
|
8
|
+
def initialize(name)
|
|
9
|
+
@name = name
|
|
10
|
+
@file_list = []
|
|
11
|
+
@header_file_list = []
|
|
12
|
+
@spec_library = []
|
|
13
|
+
@keyword_list = []
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def get_all_public_file(path)
|
|
17
|
+
all_header = FileOperator.find_all_header_file("#{path}/Pods/#{@name}")
|
|
18
|
+
for file_path in all_header do
|
|
19
|
+
@header_file_list[@header_file_list.size] = file_path
|
|
20
|
+
file_name = File.basename(file_path)
|
|
21
|
+
@keyword_list[@keyword_list.size] = file_name
|
|
22
|
+
in_note = false
|
|
23
|
+
File.foreach(file_path) { |line|
|
|
24
|
+
hash = Hash.new
|
|
25
|
+
hash["in_note"]=in_note
|
|
26
|
+
hash["line"]=line
|
|
27
|
+
OCCodeOperator.in_note_code(hash)
|
|
28
|
+
in_note = hash["in_note"]
|
|
29
|
+
line = hash["line"]
|
|
30
|
+
if line.empty?
|
|
31
|
+
next
|
|
32
|
+
end
|
|
33
|
+
if line.include?("@interface ")
|
|
34
|
+
line[0,line.index("@interface ")+11]=""
|
|
35
|
+
column = line.split(/:/)
|
|
36
|
+
if column.size > 1
|
|
37
|
+
class_name = column[0]
|
|
38
|
+
if class_name.include?("<")
|
|
39
|
+
class_name = class_name[0, class_name.index("<")]
|
|
40
|
+
end
|
|
41
|
+
class_name = class_name.strip
|
|
42
|
+
if (@keyword_list.include?(class_name+".h"))
|
|
43
|
+
@keyword_list.delete(class_name+".h")
|
|
44
|
+
end
|
|
45
|
+
@keyword_list[@keyword_list.size] = class_name
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
}
|
|
49
|
+
end
|
|
50
|
+
# if @name == ""
|
|
51
|
+
# puts @keyword_list
|
|
52
|
+
# end
|
|
53
|
+
@file_list = FileOperator.find_all_code_file("#{path}/Pods/#{@name}")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def spec_dependece_library(library_keywords_hash)
|
|
57
|
+
if library_keywords_hash.include?(@name)
|
|
58
|
+
library_keywords_hash.delete(@name)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
for file_path in @file_list do
|
|
62
|
+
# note for coding
|
|
63
|
+
in_note = false
|
|
64
|
+
File.foreach(file_path) { |line|
|
|
65
|
+
hash = Hash.new
|
|
66
|
+
hash["in_note"]=in_note
|
|
67
|
+
hash["line"]=line
|
|
68
|
+
OCCodeOperator.in_note_code(hash)
|
|
69
|
+
in_note = hash["in_note"]
|
|
70
|
+
line = hash["line"]
|
|
71
|
+
if line.empty?
|
|
72
|
+
next
|
|
73
|
+
end
|
|
74
|
+
library_keywords_hash.each {|library_name, keyword_list|
|
|
75
|
+
is_dependence = false
|
|
76
|
+
tip = ""
|
|
77
|
+
for keyword in keyword_list do
|
|
78
|
+
if line.include?(keyword)
|
|
79
|
+
last_char = '.'
|
|
80
|
+
last_index = line.index(keyword)-1
|
|
81
|
+
if last_index >= 0
|
|
82
|
+
last_char = line[last_index]
|
|
83
|
+
end
|
|
84
|
+
next_char = '.'
|
|
85
|
+
next_index = line.index(keyword)+keyword.size
|
|
86
|
+
if next_index < line.size
|
|
87
|
+
next_char = line[next_index]
|
|
88
|
+
end
|
|
89
|
+
if !(((next_char<='z'&&next_char>='a')||(next_char<='Z'&&next_char>='A')||(next_char<='9'&&next_char>='0')||next_char=='_')||((last_char<='z'&&last_char>='a')||(last_char<='Z'&&last_char>='A')||(last_char<='9'&&last_char>='0')||last_char=='_'))
|
|
90
|
+
if keyword.include?(".h") && line.include?("import") && line.include?("/"+keyword+">")
|
|
91
|
+
dependence_library_name = line[line.index("<")+1...line.index("/"+keyword+">")]
|
|
92
|
+
if dependence_library_name == library_name
|
|
93
|
+
tip = " [file]:"+File.basename(file_path)+" [line]: "+line.strip+" [keyword]: "+keyword
|
|
94
|
+
is_dependence = true
|
|
95
|
+
break
|
|
96
|
+
end
|
|
97
|
+
else
|
|
98
|
+
tip = " [file]:"+File.basename(file_path)+" [line]: "+line.strip+" [keyword]: "+keyword
|
|
99
|
+
is_dependence = true
|
|
100
|
+
break
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
if is_dependence
|
|
106
|
+
@spec_library[@spec_library.size] = library_name+tip
|
|
107
|
+
library_keywords_hash.delete(library_name)
|
|
108
|
+
end
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
}
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module BigKeeper
|
|
2
|
+
module OperateType
|
|
3
|
+
START = 1
|
|
4
|
+
UPDATE = 2
|
|
5
|
+
SWITCH = 3
|
|
6
|
+
FINISH = 4
|
|
7
|
+
PUBLISH = 5
|
|
8
|
+
RELEASE = 6
|
|
9
|
+
|
|
10
|
+
def self.name(type)
|
|
11
|
+
if START == type
|
|
12
|
+
"start"
|
|
13
|
+
elsif UPDATE == type
|
|
14
|
+
"update"
|
|
15
|
+
elsif SWITCH == type
|
|
16
|
+
"switch"
|
|
17
|
+
else
|
|
18
|
+
name
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
module ModuleOperateType
|
|
24
|
+
ADD = 1
|
|
25
|
+
DELETE = 2
|
|
26
|
+
FINISH = 3
|
|
27
|
+
PUBLISH = 4
|
|
28
|
+
RELEASE = 5
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
|
|
2
|
+
module BigKeeper
|
|
3
|
+
|
|
4
|
+
class PodfileModel
|
|
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
|