yk_command 0.4.4 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/.idea/yk_command.iml +20 -21
  3. data/Gemfile.lock +30 -32
  4. data/lib/yk_command/analyze/analyze.rb +153 -0
  5. data/lib/yk_command/{dependency_handler.rb → analyze/dependency_handler.rb} +0 -0
  6. data/lib/yk_command/analyze/dependency_result.rb +140 -0
  7. data/lib/yk_command/{request.rb → analyze/request.rb} +0 -0
  8. data/lib/yk_command/commands.rb +9 -284
  9. data/lib/yk_command/{template → module/template}/objc/CategoryHeader.h +0 -0
  10. data/lib/yk_command/{template → module/template}/objc/PrefixHeader.pch +0 -0
  11. data/lib/yk_command/{template → module/template}/objc/RouterDefine.h +0 -0
  12. data/lib/yk_command/{template → module/template}/objc/RouterRegister.h +0 -0
  13. data/lib/yk_command/{template → module/template}/objc/RouterRegister.m +0 -0
  14. data/lib/yk_command/{template → module/template}/objc/ServiceProtocol.h +0 -0
  15. data/lib/yk_command/{template → module/template}/objc/ServiceRegister.h +0 -0
  16. data/lib/yk_command/{template → module/template}/objc/ServiceRegister.m +0 -0
  17. data/lib/yk_command/{template → module/template}/objc/ToolsHeader.h +0 -0
  18. data/lib/yk_command/{template → module/template}/objc/VendorHeader.h +0 -0
  19. data/lib/yk_command/{template → module/template}/objc/demo/DemoViewController.h +0 -0
  20. data/lib/yk_command/{template → module/template}/objc/demo/DemoViewController.m +0 -0
  21. data/lib/yk_command/{template → module/template}/objc/demo/DemoViewModel.h +0 -0
  22. data/lib/yk_command/{template → module/template}/objc/demo/DemoViewModel.m +0 -0
  23. data/lib/yk_command/{template → module/template}/swift/RouterDefine.swift +0 -0
  24. data/lib/yk_command/module/yk_module.rb +226 -0
  25. data/lib/yk_command/version.rb +1 -1
  26. data/yk_command.gemspec +2 -3
  27. metadata +29 -42
  28. data/lib/yk_command/analyze.rb +0 -129
  29. data/lib/yk_command/yk_module.rb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f2050fb085b1e1eafdde48661196e3aaaf3f93c78876c81491a966ee793bfd4
4
- data.tar.gz: 9a969d06122de3eb6fcd57ced3d6de33e842d85a8eb31c198c61969bba1670b4
3
+ metadata.gz: c4e0f782818c147f0402b8b7139842c8030065818391319fb53c0ae57d544c67
4
+ data.tar.gz: f5f010db87a2ba242658d18728cbb9575e3a9f0d027a21b9c67e3ac006eb1f09
5
5
  SHA512:
6
- metadata.gz: 5a6f6a5204ee6c8011a37126fab802735ea851aaf08b4e7f90e99e7c369ead873505cc9380e4e9fb2573afe1cb51f4ae2c363258b25142ca02974a200d08698c
7
- data.tar.gz: ada630c0b6a70e5d34c45ce49d326c1784281c7870118635b6d97d96807ae0e98587b963edb0ce007a5575784a6a0f270dd91fff015cbb74a829fa4087b9b9e3
6
+ metadata.gz: cda7886d0ae837cab8f503bd3c58f1390c5cd96d4d62feeb94bb744c266e11674ae28740f27a95b0ff24253189428f6f2d42a1fdb1053f5b552c145341b302cd
7
+ data.tar.gz: 86533c9b168b527136667553289b170feaf23b049699ab7035f32b08e68b8186cb8ee1708f2982141b93e01eba897be11285c293fa76523e28b19a3069152eaf
data/.idea/yk_command.iml CHANGED
@@ -12,7 +12,7 @@
12
12
  <orderEntry type="jdk" jdkName="RVM: ruby-2.7.2 [tom]" jdkType="RUBY_SDK" />
13
13
  <orderEntry type="sourceFolder" forTests="false" />
14
14
  <orderEntry type="library" scope="PROVIDED" name="CFPropertyList (v3.0.5, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
15
- <orderEntry type="library" scope="PROVIDED" name="activesupport (v5.2.7, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
15
+ <orderEntry type="library" scope="PROVIDED" name="activesupport (v6.1.6, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
16
16
  <orderEntry type="library" scope="PROVIDED" name="addressable (v2.8.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
17
17
  <orderEntry type="library" scope="PROVIDED" name="algoliasearch (v1.27.5, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
18
18
  <orderEntry type="library" scope="PROVIDED" name="ast (v2.4.2, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
@@ -22,7 +22,7 @@
22
22
  <orderEntry type="library" scope="PROVIDED" name="cocoapods (v1.11.3, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
23
23
  <orderEntry type="library" scope="PROVIDED" name="cocoapods-core (v1.11.3, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
24
24
  <orderEntry type="library" scope="PROVIDED" name="cocoapods-deintegrate (v1.0.5, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
25
- <orderEntry type="library" scope="PROVIDED" name="cocoapods-downloader (v1.6.1, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
25
+ <orderEntry type="library" scope="PROVIDED" name="cocoapods-downloader (v1.6.3, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
26
26
  <orderEntry type="library" scope="PROVIDED" name="cocoapods-plugins (v1.0.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
27
27
  <orderEntry type="library" scope="PROVIDED" name="cocoapods-search (v1.0.1, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
28
28
  <orderEntry type="library" scope="PROVIDED" name="cocoapods-trunk (v1.6.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
@@ -37,8 +37,7 @@
37
37
  <orderEntry type="library" scope="PROVIDED" name="fourflusher (v2.3.1, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
38
38
  <orderEntry type="library" scope="PROVIDED" name="fuzzy_match (v2.0.4, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
39
39
  <orderEntry type="library" scope="PROVIDED" name="gh_inspector (v1.1.3, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
40
- <orderEntry type="library" scope="PROVIDED" name="git (v1.10.2, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
41
- <orderEntry type="library" scope="PROVIDED" name="gitlab (v4.18.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
40
+ <orderEntry type="library" scope="PROVIDED" name="git (v1.11.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
42
41
  <orderEntry type="library" scope="PROVIDED" name="httparty (v0.20.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
43
42
  <orderEntry type="library" scope="PROVIDED" name="httpclient (v2.8.3, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
44
43
  <orderEntry type="library" scope="PROVIDED" name="i18n (v1.10.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
@@ -51,50 +50,50 @@
51
50
  <orderEntry type="library" scope="PROVIDED" name="nanaimo (v0.3.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
52
51
  <orderEntry type="library" scope="PROVIDED" name="nap (v1.1.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
53
52
  <orderEntry type="library" scope="PROVIDED" name="netrc (v0.11.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
54
- <orderEntry type="library" scope="PROVIDED" name="parallel (v1.21.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
55
- <orderEntry type="library" scope="PROVIDED" name="parser (v2.7.2.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
56
- <orderEntry type="library" scope="PROVIDED" name="pathname (v0.2.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
57
- <orderEntry type="library" scope="PROVIDED" name="powerpack (v0.1.3, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
58
- <orderEntry type="library" scope="PROVIDED" name="public_suffix (v4.0.6, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
59
- <orderEntry type="library" scope="PROVIDED" name="rainbow (v2.2.2, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
53
+ <orderEntry type="library" scope="PROVIDED" name="parallel (v1.22.1, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
54
+ <orderEntry type="library" scope="PROVIDED" name="parser (v3.1.2.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
55
+ <orderEntry type="library" scope="PROVIDED" name="pathname (v0.1.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
56
+ <orderEntry type="library" scope="PROVIDED" name="public_suffix (v4.0.7, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
57
+ <orderEntry type="library" scope="PROVIDED" name="rainbow (v3.1.1, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
60
58
  <orderEntry type="library" scope="PROVIDED" name="rake (v13.0.6, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
61
59
  <orderEntry type="library" scope="PROVIDED" name="rchardet (v1.8.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
60
+ <orderEntry type="library" scope="PROVIDED" name="regexp_parser (v2.4.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
62
61
  <orderEntry type="library" scope="PROVIDED" name="rexml (v3.2.5, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
63
62
  <orderEntry type="library" scope="PROVIDED" name="rspec (v3.11.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
64
63
  <orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.11.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
65
64
  <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.11.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
66
- <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.11.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
65
+ <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.11.1, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
67
66
  <orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.11.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
68
- <orderEntry type="library" scope="PROVIDED" name="rubocop (v0.50.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
67
+ <orderEntry type="library" scope="PROVIDED" name="rubocop (v1.29.1, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
68
+ <orderEntry type="library" scope="PROVIDED" name="rubocop-ast (v1.17.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
69
69
  <orderEntry type="library" scope="PROVIDED" name="ruby-macho (v2.5.1, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
70
70
  <orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.11.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
71
- <orderEntry type="library" scope="PROVIDED" name="terminal-table (v3.0.2, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
72
71
  <orderEntry type="library" scope="PROVIDED" name="thor (v1.2.1, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
73
- <orderEntry type="library" scope="PROVIDED" name="thread_safe (v0.3.6, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
74
72
  <orderEntry type="library" scope="PROVIDED" name="typhoeus (v1.4.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
75
- <orderEntry type="library" scope="PROVIDED" name="tzinfo (v1.2.9, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
76
- <orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v1.8.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
73
+ <orderEntry type="library" scope="PROVIDED" name="tzinfo (v2.0.4, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
74
+ <orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v2.1.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
77
75
  <orderEntry type="library" scope="PROVIDED" name="xcodeproj (v1.21.0, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
76
+ <orderEntry type="library" scope="PROVIDED" name="zeitwerk (v2.5.4, RVM: ruby-2.7.2 [tom]) [gem]" level="application" />
78
77
  </component>
79
78
  <component name="RakeTasksCache">
80
79
  <option name="myRootTask">
81
80
  <RakeTaskImpl id="rake">
82
81
  <subtasks>
83
- <RakeTaskImpl description="Build yk_command-0.4.0.gem into the pkg directory" fullCommand="build" id="build" />
82
+ <RakeTaskImpl description="Build yk_command-0.4.5.gem into the pkg directory" fullCommand="build" id="build" />
84
83
  <RakeTaskImpl id="build">
85
84
  <subtasks>
86
- <RakeTaskImpl description="Generate SHA512 checksum if yk_command-0.4.0.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
85
+ <RakeTaskImpl description="Generate SHA512 checksum if yk_command-0.4.5.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
87
86
  </subtasks>
88
87
  </RakeTaskImpl>
89
88
  <RakeTaskImpl description="Remove any temporary products" fullCommand="clean" id="clean" />
90
89
  <RakeTaskImpl description="Remove any generated files" fullCommand="clobber" id="clobber" />
91
- <RakeTaskImpl description="Build and install yk_command-0.4.0.gem into system gems" fullCommand="install" id="install" />
90
+ <RakeTaskImpl description="Build and install yk_command-0.4.5.gem into system gems" fullCommand="install" id="install" />
92
91
  <RakeTaskImpl id="install">
93
92
  <subtasks>
94
- <RakeTaskImpl description="Build and install yk_command-0.4.0.gem into system gems without network access" fullCommand="install:local" id="local" />
93
+ <RakeTaskImpl description="Build and install yk_command-0.4.5.gem into system gems without network access" fullCommand="install:local" id="local" />
95
94
  </subtasks>
96
95
  </RakeTaskImpl>
97
- <RakeTaskImpl description="Create tag v0.4.0 and build and push yk_command-0.4.0.gem to rubygems.org" fullCommand="release[remote]" id="release[remote]" />
96
+ <RakeTaskImpl description="Create tag v0.4.5 and build and push yk_command-0.4.5.gem to rubygems.org" fullCommand="release[remote]" id="release[remote]" />
98
97
  <RakeTaskImpl description="" fullCommand="default" id="default" />
99
98
  <RakeTaskImpl description="" fullCommand="release" id="release" />
100
99
  <RakeTaskImpl id="release">
data/Gemfile.lock CHANGED
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yk_command (0.4.4)
4
+ yk_command (0.4.7)
5
5
  bundler
6
6
  colored
7
+ colored2
7
8
  git
8
- gitlab
9
9
  httparty
10
- pathname
10
+ pathname (= 0.1.0)
11
11
  thor
12
12
  xcodeproj
13
13
 
@@ -16,11 +16,12 @@ GEM
16
16
  specs:
17
17
  CFPropertyList (3.0.5)
18
18
  rexml
19
- activesupport (5.2.7)
19
+ activesupport (6.1.6)
20
20
  concurrent-ruby (~> 1.0, >= 1.0.2)
21
- i18n (>= 0.7, < 2)
22
- minitest (~> 5.1)
23
- tzinfo (~> 1.1)
21
+ i18n (>= 1.6, < 2)
22
+ minitest (>= 5.1)
23
+ tzinfo (~> 2.0)
24
+ zeitwerk (~> 2.3)
24
25
  addressable (2.8.0)
25
26
  public_suffix (>= 2.0.2, < 5.0)
26
27
  algoliasearch (1.27.5)
@@ -58,7 +59,7 @@ GEM
58
59
  public_suffix (~> 4.0)
59
60
  typhoeus (~> 1.0)
60
61
  cocoapods-deintegrate (1.0.5)
61
- cocoapods-downloader (1.6.1)
62
+ cocoapods-downloader (1.6.3)
62
63
  cocoapods-plugins (1.0.0)
63
64
  nap
64
65
  cocoapods-search (1.0.1)
@@ -77,11 +78,8 @@ GEM
77
78
  fourflusher (2.3.1)
78
79
  fuzzy_match (2.0.4)
79
80
  gh_inspector (1.1.3)
80
- git (1.10.2)
81
+ git (1.11.0)
81
82
  rchardet (~> 1.8)
82
- gitlab (4.18.0)
83
- httparty (~> 0.18)
84
- terminal-table (>= 1.5.1)
85
83
  httparty (0.20.0)
86
84
  mime-types (~> 3.0)
87
85
  multi_xml (>= 0.5.2)
@@ -98,16 +96,15 @@ GEM
98
96
  nanaimo (0.3.0)
99
97
  nap (1.1.0)
100
98
  netrc (0.11.0)
101
- parallel (1.21.0)
102
- parser (2.7.2.0)
99
+ parallel (1.22.1)
100
+ parser (3.1.2.0)
103
101
  ast (~> 2.4.1)
104
- pathname (0.2.0)
105
- powerpack (0.1.3)
106
- public_suffix (4.0.6)
107
- rainbow (2.2.2)
108
- rake
102
+ pathname (0.1.0)
103
+ public_suffix (4.0.7)
104
+ rainbow (3.1.1)
109
105
  rake (13.0.6)
110
106
  rchardet (1.8.0)
107
+ regexp_parser (2.4.0)
111
108
  rexml (3.2.5)
112
109
  rspec (3.11.0)
113
110
  rspec-core (~> 3.11.0)
@@ -118,28 +115,29 @@ GEM
118
115
  rspec-expectations (3.11.0)
119
116
  diff-lcs (>= 1.2.0, < 2.0)
120
117
  rspec-support (~> 3.11.0)
121
- rspec-mocks (3.11.0)
118
+ rspec-mocks (3.11.1)
122
119
  diff-lcs (>= 1.2.0, < 2.0)
123
120
  rspec-support (~> 3.11.0)
124
121
  rspec-support (3.11.0)
125
- rubocop (0.50.0)
122
+ rubocop (1.29.1)
126
123
  parallel (~> 1.10)
127
- parser (>= 2.3.3.1, < 3.0)
128
- powerpack (~> 0.1)
129
- rainbow (>= 2.2.2, < 3.0)
124
+ parser (>= 3.1.0.0)
125
+ rainbow (>= 2.2.2, < 4.0)
126
+ regexp_parser (>= 1.8, < 3.0)
127
+ rexml (>= 3.2.5, < 4.0)
128
+ rubocop-ast (>= 1.17.0, < 2.0)
130
129
  ruby-progressbar (~> 1.7)
131
- unicode-display_width (~> 1.0, >= 1.0.1)
130
+ unicode-display_width (>= 1.4.0, < 3.0)
131
+ rubocop-ast (1.17.0)
132
+ parser (>= 3.1.1.0)
132
133
  ruby-macho (2.5.1)
133
134
  ruby-progressbar (1.11.0)
134
- terminal-table (3.0.2)
135
- unicode-display_width (>= 1.1.1, < 3)
136
135
  thor (1.2.1)
137
- thread_safe (0.3.6)
138
136
  typhoeus (1.4.0)
139
137
  ethon (>= 0.9.0)
140
- tzinfo (1.2.9)
141
- thread_safe (~> 0.1)
142
- unicode-display_width (1.8.0)
138
+ tzinfo (2.0.4)
139
+ concurrent-ruby (~> 1.0)
140
+ unicode-display_width (2.1.0)
143
141
  xcodeproj (1.21.0)
144
142
  CFPropertyList (>= 2.3.3, < 4.0)
145
143
  atomos (~> 0.1.3)
@@ -147,6 +145,7 @@ GEM
147
145
  colored2 (~> 3.1)
148
146
  nanaimo (~> 0.3.0)
149
147
  rexml (~> 3.2.4)
148
+ zeitwerk (2.5.4)
150
149
 
151
150
  PLATFORMS
152
151
  x86_64-darwin-21
@@ -157,7 +156,6 @@ DEPENDENCIES
157
156
  cocoapods-core
158
157
  colored
159
158
  colored2
160
- gitlab
161
159
  httparty
162
160
  rake (~> 13.0)
163
161
  rspec (~> 3.2)
@@ -0,0 +1,153 @@
1
+ require 'cocoapods'
2
+ require 'pathname'
3
+ require 'pp'
4
+ require 'tmpdir'
5
+ require 'json'
6
+
7
+ require 'rainbow'
8
+ require 'yaml'
9
+ require 'git'
10
+ require 'yk_command/analyze/dependency_result'
11
+
12
+ module YkCommand
13
+ IGNORE_PROJECT_FILE = '.YKAnalyzeConfig.yml'.freeze
14
+
15
+ class Analyzer < Thor
16
+ no_commands do
17
+
18
+ def dependency(path = nil)
19
+ say "\ncurrent working folder: #{path}\n"
20
+ project_path = ''
21
+ project_name = ''
22
+ begin
23
+ g = Git.open(path)
24
+ project_path = Pathname.new(g.lib.git_work_dir)
25
+ project_name = g.config['remote.origin.url'].split('/').last.split('.')[0]
26
+
27
+ unless project_name.empty?
28
+ podfiles = Dir.glob("#{path}/**/Podfile")
29
+ if !podfiles.empty?
30
+ begin
31
+ project_path = podfiles[podfiles.length - 1]
32
+ podfile_dir = Pathname.new(project_path).dirname.to_s
33
+ say "start analyze... path contain [Podfile ,Pods/ ,Podfile.lock] is #{podfile_dir} \n ", :green
34
+ result = analyze(podfile_dir)
35
+ app_info = Request.new.get_project_info(project_name)
36
+ if app_info['id']
37
+ say "uploading dependencies for project #{project_name} ..."
38
+ upload_res = Request.new.upload_app_dependency(app_info['id'], result)
39
+ if upload_res['code'] == 0
40
+ result(0, project_name, 'uploaded , finished ', :green)
41
+ else
42
+ result(1, project_name, "Error :upload dependencies for project #{project_name} - #{app_info["id"]} failed ", :red)
43
+ end
44
+ else
45
+ result(1, project_name, "Error :Get App project ID failed , #{project_name}", :red)
46
+ end
47
+
48
+ rescue
49
+ say "Error : #{$!}", :red
50
+ say "Error : #{ $@}", :red
51
+ result(1, project_name, "Skip folder : #{podfile_dir} ", :red)
52
+ end
53
+
54
+ else
55
+ result(2, project_name, "No podfile find ,Skip folder : #{project_name} ", :yellow)
56
+ end
57
+
58
+ end
59
+
60
+ rescue
61
+ result(2, '', "No .git folder find in #{path} ,skip folder ... ", :yellow)
62
+
63
+ end
64
+
65
+ end
66
+
67
+ def result(code, name, message, color)
68
+ say message, color
69
+ say "\n<--\n", color
70
+ { 'code' => "#{code}", 'name' => "#{name}" }
71
+ end
72
+
73
+ def workspace_analyze(path = nil)
74
+ Dir.chdir(path)
75
+ subdir_list = Dir['*'].reject { |o| not File.directory?(o) }
76
+ say "Start in Workspace : #{path} ...", :yellow
77
+ subdir_list.each do |project_dir|
78
+ say "\n#{Pathname.new(project_dir).split[1]} ", :yellow
79
+ end
80
+ say "\n\n"
81
+ say "\n ... start scanning to analyze ...\n\n"
82
+
83
+ success_count = 0
84
+ success_name_list = []
85
+ failed_count = 0
86
+ failed_name_list = []
87
+ skip_count = 0
88
+
89
+ subdir_list.each { |project_dir|
90
+ project_path = "#{path}/#{project_dir}"
91
+ res = dependency project_path
92
+ if res['code'] == '0'
93
+ success_count += 1
94
+ success_name_list << res['name']
95
+ elsif res['code'] == '1'
96
+ failed_count += 1
97
+ failed_name_list << res['name']
98
+ else
99
+ skip_count += 1
100
+ end
101
+ }
102
+
103
+ say "\nworkspace analyze done ! ..."
104
+ say "success:#{success_count},#{success_name_list}", :green
105
+ say "failed :#{failed_count},#{failed_name_list}", :red
106
+ say "skip :#{skip_count}", :yellow
107
+
108
+ end
109
+
110
+ def ignore_file(path = nil)
111
+ ignore_file_path = "#{path}/#{IGNORE_PROJECT_FILE}"
112
+ ignore = File.exist?(ignore_file_path) ? YAML.load_file(ignore_file_path) : {}
113
+ ignore[:projects] = ["ShouYinTong", "ShouYinTongSaas"]
114
+ File.open(ignore_file_path, 'w') do |f|
115
+ f.write ignore.to_yaml
116
+ end
117
+ end
118
+
119
+ def analyze(podfile_dir_path)
120
+ @path = Pathname.new(podfile_dir_path)
121
+ raise 'absolute path is needed' unless @path.absolute?
122
+ Pod::Config.instance.installation_root = @path
123
+ @podFile = Pod::Podfile.from_file(@path + 'Podfile')
124
+ @podLock = Pod::Lockfile.from_file(@path + 'Podfile.lock')
125
+
126
+ Dir.chdir(podfile_dir_path) do
127
+ analyze_with_podfile
128
+ end
129
+
130
+ end
131
+
132
+ def analyze_with_podfile
133
+ sandbox = Dir.pwd + '/Pods'
134
+ # if @path
135
+ # sandbox = Dir.mktmpdir
136
+ # else
137
+ # end
138
+
139
+ analyzer = Pod::Installer::Analyzer.new(
140
+ Pod::Sandbox.new(sandbox),
141
+ @podFile,
142
+ @podLock
143
+ )
144
+
145
+ specifications = analyzer.analyze(:outdated ).specifications.map(&:root).uniq
146
+ array = []
147
+ dependency_result = DependencyResult.new(specifications, @podLock)
148
+ dependency_result.result_json
149
+ end
150
+
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,140 @@
1
+ require 'cocoapods'
2
+ require 'cocoapods-core/lockfile'
3
+
4
+ YK = 'yeah'+'ka'
5
+
6
+ COMPONENT_TYPE = ['基础组件', 'UI组件', '通用业务组件', '业务模块', '其它']
7
+
8
+ FOUNDATION_COMPONENT_NAMES = ['基础组件', 'UI组件', '通用业务组件', '业务模块', '其它']
9
+
10
+ UI_COMPONENT_NAMES = ['']
11
+
12
+ COMMON_BUSINESS_COMPONENT_NAMES = ['']
13
+
14
+ UNCATEGORIZE_COMPONENT_NAMES = ['']
15
+
16
+ SPECIFICATION_FILTER_KEYS = ['summary', 'homepage', 'authors', "source"]
17
+
18
+ module YkCommand
19
+
20
+ class DependencyResult
21
+
22
+ def initialize(specifications, pod_lock)
23
+ @specifications = specifications
24
+ @pod_lock = pod_lock
25
+ @result = []
26
+ end
27
+
28
+ def find_info_in_lokfile
29
+
30
+ removed_subspecs_dep_list = []
31
+ @pod_lock.pod_names.each do |pn|
32
+ removed_subspecs_dep_list = removed_subspecs_dep_list.push(pn.split('/')[0]).uniq
33
+ end
34
+
35
+ #去重后的 依赖 名字 数组
36
+ removed_subspecs_dep_list.each do |pod_name|
37
+ map = {}
38
+ version = @pod_lock.version(pod_name).version
39
+ spec_repo_name = @pod_lock.spec_repo(pod_name)
40
+ is_local_dependency = is_pod_from_local pod_name
41
+ is_yk_dependency = is_yk_dependency pod_name
42
+ is_install_from_git_commit = !@pod_lock.checkout_options_for_pod_named(pod_name).nil?
43
+ dep_attribute_in_pod_file = find_info_in_specifications pod_name
44
+ pp "#{pod_name} #{spec_repo_name} #{version} local:#{is_local_dependency} ,yeahka:#{is_yk_dependency},git_commit: #{is_install_from_git_commit}"
45
+ map["name"] = pod_name
46
+ map["version"] = version
47
+ map["is_local_dependency"] = is_local_dependency
48
+ map["is_yk_dependency"] = is_yk_dependency
49
+ map["is_install_from_git_commit"] = is_install_from_git_commit.nil?
50
+ dep_attribute_in_pod_file.each do |k, v|
51
+ if SPECIFICATION_FILTER_KEYS.include?(k)
52
+ map[k] = v
53
+ end
54
+ end
55
+
56
+ @result.push map
57
+
58
+ end
59
+
60
+ end
61
+
62
+ def result_json
63
+ find_info_in_lokfile
64
+ @result.to_json
65
+ end
66
+
67
+ def is_yk_dependency(name)
68
+ tag = false
69
+
70
+ @pod_lock.dependencies.each do |dep|
71
+ next unless dep.name == name && !dep.external_source.nil?
72
+
73
+ dep.external_source.each do |k, v|
74
+ tag = if dep.external_source.include?(:git)
75
+ dep.external_source[:git].include?(YK)
76
+ end
77
+ end
78
+ end
79
+ tag
80
+ end
81
+
82
+ def is_pod_from_local(name)
83
+ tag = false
84
+ @pod_lock.dependencies.each do |dep|
85
+ next unless dep.name == name && !dep.external_source.nil?
86
+ tag = dep.external_source.include?(:path)
87
+ end
88
+ tag
89
+ end
90
+
91
+ def find_info_in_specifications(name)
92
+ map = {}
93
+ @specifications.each do |sp|
94
+ next unless sp.name == name
95
+
96
+ map = sp.attributes_hash
97
+ end
98
+ map
99
+ end
100
+
101
+ # def podfile_dependencies(podfile)
102
+ # res = []
103
+ # podfile.root_target_definitions.each do |td|
104
+ # children_definitions = td.recursive_children
105
+ # children_definitions.each do |cd|
106
+ # dependencies_hash_array = cd.send(:get_hash_value, 'dependencies')
107
+ # next if dependencies_hash_array.nil? || dependencies_hash_array.count.zero?
108
+ #
109
+ # dependencies_hash_array.each do |item|
110
+ # next if item.class.name != 'Hash'
111
+ #
112
+ # item.each do |name, _|
113
+ # res.push name
114
+ # end
115
+ # end
116
+ # end
117
+ # end
118
+ # res
119
+ # end
120
+ #
121
+ # def find_dependencies(name, map, res, dependencies_map, root_name)
122
+ # return unless map[name]
123
+ #
124
+ # map[name].each do |k|
125
+ # find_dependencies(k.name, map, res, dependencies_map, root_name)
126
+ # dependency = dependencies_map[k.name.split('/')[0]]
127
+ # res.push dependency.name if dependency && dependency.name != root_name
128
+ # end
129
+ # res
130
+ # end
131
+ #
132
+ # def subspecs_with_name(spec, subspecs_short_names)
133
+ # subspecs_short_names.map do |name|
134
+ # spec.subspecs.find { |ss| ss.name.include? name }
135
+ # end
136
+ # end
137
+ #
138
+ #
139
+ end
140
+ end
File without changes