cocoapods-binary 0.1.2 → 0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d5ce1e59aef6cd59958b1ae0a97a4ac1048be724
4
- data.tar.gz: 51760a1c0972ba70fdfd4cecda153594027e9c70
2
+ SHA256:
3
+ metadata.gz: 16f6d7d397c71e854a7e9d6639fa6ca5db285be1baf54e9af54231badc8f53a9
4
+ data.tar.gz: a2a2e8bd6c1010f2ef7c2d03ae46d24ba76d1347b30b586d44ddcf5aaba1ac13
5
5
  SHA512:
6
- metadata.gz: 6cf6c852f46e9bdcd7d7a9cba0158a82796df981e76c9dde9e9787b613b0df3f357d2d7d035f25a2140a6de6727c8aa5d18df67185731b5a77795ebe25c32c1d
7
- data.tar.gz: 8a9ee829a215cb263a0f1b0d698d6372523ed96b348158c7e5118fc328d93891e83a0365ec860e6432c32c568109d82cca6d895872646a5abfa9ecb016d873ac
6
+ metadata.gz: 3db502e1c9655092e9f2b38a129d27ead17e48d2bd9bc9cb1d143de5b85d606d49d3d8783b2147851da2d17dab66b69508cedd8acee2ef61a136b4074c946970
7
+ data.tar.gz: 21a1c41d15eb85daf2ecd05cce73b990f73f2b0119c4021bcd9b4e7875362d7af8a9804642a11aa5667acf18c8c378b7f02e793ff9799d93a460d64647878bb5
@@ -2,6 +2,12 @@ require_relative 'podfile_options'
2
2
  require_relative 'feature_switches'
3
3
  require_relative 'prebuild_sandbox'
4
4
 
5
+ # NOTE:
6
+ # This file will only be loaded on normal pod install step
7
+ # so there's no need to check is_prebuild_stage
8
+
9
+
10
+
5
11
  # Provide a special "download" process for prebuilded pods.
6
12
  #
7
13
  # As the frameworks is already exsited in local folder. We
@@ -41,12 +47,20 @@ module Pod
41
47
  def remove_target_files_if_needed
42
48
 
43
49
  changes = Pod::Prebuild.framework_changes
44
- return if changes == nil
45
- added = changes[:added] || []
46
- changed = changes[:changed] || []
47
- deleted = changes[:removed] || []
50
+ updated_names = []
51
+ if changes == nil
52
+ puts "aaaaa"
53
+ updated_names = PrebuildSandbox.from_standard_sandbox(self.sandbox).exsited_framework_names
54
+ else
55
+ puts "bbbbb"
56
+ puts changes
57
+ added = changes[:added] || []
58
+ changed = changes[:changed] || []
59
+ deleted = changes[:removed] || []
60
+ updated_names = added + changed + deleted
61
+ end
48
62
 
49
- (added + changed + deleted).each do |name|
63
+ updated_names.each do |name|
50
64
  root_name = Specification.root_name(name)
51
65
  next if self.sandbox.local?(root_name)
52
66
 
@@ -62,21 +76,19 @@ module Pod
62
76
  old_method2 = instance_method(:resolve_dependencies)
63
77
  define_method(:resolve_dependencies) do
64
78
 
65
- if Pod.is_prebuild_stage
66
- old_method2.bind(self).()
67
- else
68
- # Remove the old target files, else it will not notice file changes
69
- self.remove_target_files_if_needed
70
- old_method2.bind(self).()
71
-
72
- self.analysis_result.specifications.each do |spec|
73
- next unless self.prebuild_pod_names.include? spec.name
74
- spec.attributes_hash["vendored_frameworks"] = "#{spec.name}.framework"
75
- spec.attributes_hash["source_files"] = []
76
-
77
- # to avoid the warning of missing license
78
- spec.attributes_hash["license"] = {}
79
- end
79
+ puts "ddddddddd"
80
+
81
+ # Remove the old target files, else it will not notice file changes
82
+ self.remove_target_files_if_needed
83
+ old_method2.bind(self).()
84
+
85
+ self.analysis_result.specifications.each do |spec|
86
+ next unless self.prebuild_pod_names.include? spec.name
87
+ spec.attributes_hash["vendored_frameworks"] = "#{spec.name}.framework"
88
+ spec.attributes_hash["source_files"] = []
89
+
90
+ # to avoid the warning of missing license
91
+ spec.attributes_hash["license"] = {}
80
92
  end
81
93
 
82
94
  end
@@ -86,10 +98,6 @@ module Pod
86
98
  old_method = instance_method(:install_source_of_pod)
87
99
  define_method(:install_source_of_pod) do |pod_name|
88
100
 
89
- if Pod.is_prebuild_stage
90
- return old_method.bind(self).(pod_name)
91
- end
92
-
93
101
  # copy from original
94
102
  pod_installer = create_pod_installer(pod_name)
95
103
  # \copy from original
@@ -1,10 +1,15 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require_relative 'feature_switches'
4
- require_relative 'prebuild_sandbox'
3
+ require_relative 'podfile_options'
5
4
 
6
5
  Pod::HooksManager.register('cocoapods-binary', :pre_install) do |installer_context|
7
6
 
7
+ require_relative 'feature_switches'
8
+ if Pod.is_prebuild_stage
9
+ next
10
+ end
11
+
12
+ # [Check Environment]
8
13
  # check user_framework is on
9
14
  podfile = installer_context.podfile
10
15
  podfile.target_definition_list.each do |target_definition|
@@ -14,61 +19,56 @@ Pod::HooksManager.register('cocoapods-binary', :pre_install) do |installer_conte
14
19
  exit
15
20
  end
16
21
  end
17
- end
18
-
19
- # hook the install command to install twice (first for the prebuilding)
20
- module Pod
21
- class Config
22
- attr_writer :sandbox
23
- attr_writer :lockfile
22
+
23
+
24
+ # -- step 1: prebuild framework ---
25
+ # Execute a sperated pod install, to generate targets for building framework,
26
+ # then compile them to framework files.
27
+ require_relative 'prebuild_sandbox'
28
+ require_relative 'Prebuild'
29
+
30
+ Pod::UI.puts "🚀 Prebuild frameworks"
31
+
32
+
33
+ # control features
34
+ Pod.is_prebuild_stage = true
35
+ Pod::Podfile::DSL.enable_prebuild_patch true # enable sikpping for prebuild targets
36
+ Pod::Installer.force_disable_integration true # don't integrate targets
37
+ Pod::Config.force_disable_write_lockfile true # disbale write lock file for perbuild podfile
38
+ Pod::Installer.disable_install_complete_message true # disable install complete message
39
+
40
+ # make another custom sandbox
41
+ standard_sandbox = installer_context.sandbox
42
+ prebuild_sandbox = Pod::PrebuildSandbox.from_standard_sandbox(standard_sandbox)
43
+
44
+ # get the podfile for prebuild
45
+ prebuild_podfile = Pod::Podfile.from_ruby(podfile.defined_in_file)
46
+
47
+ # install
48
+ binary_installer = Pod::Installer.new(prebuild_sandbox, prebuild_podfile , nil)
49
+
50
+ if binary_installer.have_exact_prebuild_cache?
51
+ binary_installer.install_when_cache_hit!
52
+ else
53
+ binary_installer.repo_update = false
54
+ binary_installer.update = false
55
+ binary_installer.install!
24
56
  end
57
+
58
+
59
+ # reset the environment
60
+ Pod.is_prebuild_stage = false
61
+ Pod::Installer.force_disable_integration false
62
+ Pod::Podfile::DSL.enable_prebuild_patch false
63
+ Pod::Config.force_disable_write_lockfile false
64
+ Pod::Installer.disable_install_complete_message false
65
+
66
+
67
+ # -- step 2: prebuild framework ---
68
+ # install
69
+ Pod::UI.puts "\n"
70
+ Pod::UI.puts "🤖 Pod Install"
71
+ require_relative 'Integration'
72
+ # go on the normal install step ...
73
+ end
25
74
 
26
- class Command
27
- class Install
28
-
29
-
30
- # --- patch ---
31
- old_method = instance_method(:run)
32
-
33
- define_method(:run) do
34
-
35
- # -- step 1: prebuild framework ---
36
-
37
- # control features
38
- Pod.is_prebuild_stage = true
39
- Pod::Podfile::DSL.enable_prebuild_patch true # enable sikpping for prebuild targets
40
- Pod::Installer.force_disable_integration true # don't integrate targets
41
- Pod::Config.force_disable_write_lockfile true # disbale write lock file for perbuild podfile
42
- Pod::Installer.disable_install_complete_message true # disable install complete message
43
-
44
- # make another custom sandbox
45
- standard_sandbox = self.config.sandbox
46
- prebuild_sandbox = Pod::PrebuildSandbox.from_standard_sandbox(standard_sandbox)
47
- self.config.sandbox = prebuild_sandbox
48
-
49
- # install
50
- Pod::UI.puts "✔️ Prebuild frameworks"
51
- old_method.bind(self).()
52
-
53
-
54
- # -- step 2: prebuild framework ---
55
-
56
- # reset the environment
57
- self.config.podfile = nil
58
- self.config.lockfile = nil
59
- self.config.sandbox = standard_sandbox
60
- Pod.is_prebuild_stage = false
61
- Pod::Installer.force_disable_integration false
62
- Pod::Podfile::DSL.enable_prebuild_patch false
63
- Pod::Config.force_disable_write_lockfile false
64
- Pod::Installer.disable_install_complete_message false
65
-
66
- # install
67
- Pod::UI.puts "\n"
68
- Pod::UI.puts "✔️ Pod Install"
69
- old_method.bind(self).()
70
- end
71
-
72
- end
73
- end
74
- end
@@ -6,16 +6,58 @@ module Pod
6
6
  end
7
7
  end
8
8
 
9
+
9
10
  # patch prebuild ability
10
11
  module Pod
12
+ class Installer
11
13
 
12
- class_attr_accessor :old_manifest_lock_file
14
+ def local_manifest
15
+ if not @local_manifest_inited
16
+ @local_manifest_inited = true
17
+ raise "This method should be call before generate project" unless self.analysis_result == nil
18
+ @local_manifest = self.sandbox.manifest
19
+ end
20
+ @local_manifest
21
+ end
13
22
 
14
- class Installer
15
23
 
24
+ # check if need to prebuild
25
+ def have_exact_prebuild_cache?
26
+ # check if need build frameworks
27
+ return false if local_manifest == nil
28
+
29
+ changes = local_manifest.detect_changes_with_podfile(podfile)
30
+ puts changes
31
+ Pod::Prebuild.framework_changes = changes # save the chagnes info for later stage
32
+ added = changes[:added] || []
33
+ changed = changes[:changed] || []
34
+ unchanged = changes[:unchanged] || []
35
+ deleted = changes[:removed] || []
36
+
37
+ unchange_framework_names = added + unchanged
38
+ exsited_framework_names = sandbox.exsited_framework_names
39
+ missing = unchanged.select do |pod_name|
40
+ not exsited_framework_names.include?(pod_name)
41
+ end
42
+
43
+ needed = (added + changed + deleted + missing)
44
+ return needed.empty?
45
+ end
46
+
47
+
48
+ # The install method when have completed cache
49
+ def install_when_cache_hit!
50
+ # just print log
51
+ self.sandbox.exsited_framework_names.each do |name|
52
+ UI.puts "Using #{name}"
53
+ end
54
+ end
55
+
56
+
57
+ # Build the needed framework files
16
58
  def prebuild_frameworks
17
59
 
18
- local_manifest = Pod.old_manifest_lock_file
60
+ local_manifest = self.local_manifest
19
61
  sandbox_path = sandbox.root
20
62
  existed_framework_folder = sandbox.generate_framework_path
21
63
 
@@ -70,51 +112,7 @@ module Pod
70
112
 
71
113
  end
72
114
 
73
- # check if need to prebuild
74
- old_method = instance_method(:install!)
75
- define_method(:install!) do
76
- return old_method.bind(self).() unless Pod.is_prebuild_stage
77
-
78
- # check if need build frameworks
79
- local_manifest = self.sandbox.manifest
80
- Pod::Prebuild.framework_changes = nil
81
- return old_method.bind(self).() if local_manifest == nil
82
-
83
- changes = local_manifest.detect_changes_with_podfile(podfile)
84
- added = changes[:added] || []
85
- changed = changes[:changed] || []
86
- unchanged = changes[:unchanged] || []
87
- deleted = changes[:removed] || []
88
- Pod::Prebuild.framework_changes = changes # save the chagnes info for later stage
89
-
90
- unchange_framework_names = added + unchanged
91
- exsited_framework_names = sandbox.exsited_framework_names
92
- missing = unchanged.select do |pod_name|
93
- not exsited_framework_names.include?(pod_name)
94
- end
95
-
96
- if (added + changed + missing).empty?
97
- deleted.each do |framework_name|
98
- path = sandbox.framework_path_for_pod_name framework_name
99
- if path.exist?
100
- path.rmtree
101
- UI.puts "Delete #{framework_name}"
102
- end
103
- end
104
115
 
105
- # don't do the install
106
- exsited_framework_names.each do |name|
107
- UI.puts "Using #{name}"
108
- end
109
- return
110
- end
111
-
112
- # normal install
113
- # Save manifest before generate a new one
114
- Pod.old_manifest_lock_file = local_manifest
115
- old_method.bind(self).()
116
- end
117
-
118
116
  # patch the post install hook
119
117
  old_method2 = instance_method(:run_plugins_post_install_hooks)
120
118
  define_method(:run_plugins_post_install_hooks) do
@@ -1,3 +1,6 @@
1
+ require_relative 'tool/tool'
2
+ require_relative 'prebuild_sandbox'
3
+
1
4
  module Pod
2
5
 
3
6
  # a flag that indicate stages
@@ -67,7 +70,7 @@ module Pod
67
70
  # option to disable write lockfiles
68
71
  class Config
69
72
 
70
- @@force_disable_write_lockfile
73
+ @@force_disable_write_lockfile = false
71
74
  def self.force_disable_write_lockfile(value)
72
75
  @@force_disable_write_lockfile = value
73
76
  end
@@ -75,7 +78,8 @@ module Pod
75
78
  old_method = instance_method(:lockfile_path)
76
79
  define_method(:lockfile_path) do
77
80
  if @@force_disable_write_lockfile
78
- return self.sandbox.root + 'Manifest.lock.bak'
81
+ # As config is a singleton, sandbox_root refer to the standard sandbox.
82
+ return PrebuildSandbox.from_standard_sanbox_path(sandbox_root).root + 'Manifest.lock.tmp'
79
83
  else
80
84
  return old_method.bind(self).()
81
85
  end
@@ -1,3 +1,3 @@
1
1
  module CocoapodsBinary
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2"
3
3
  end
@@ -20,7 +20,7 @@ module Pod
20
20
  end
21
21
 
22
22
  def exsited_framework_names
23
- [] unless generate_framework_path.exist?
23
+ return [] unless generate_framework_path.exist?
24
24
  generate_framework_path.children.map do |framework_name|
25
25
  extension = File.extname(framework_name)
26
26
  if extension == ".framework"
@@ -9,4 +9,28 @@
9
9
  #
10
10
  def class_attr_accessor(symbol)
11
11
  self.class.send(:attr_accessor, symbol)
12
+ end
13
+
14
+
15
+
16
+ class Object
17
+ def deep_clone
18
+ return @deep_cloning_obj if @deep_cloning
19
+ @deep_cloning_obj = clone
20
+ @deep_cloning_obj.instance_variables.each do |var|
21
+ val = @deep_cloning_obj.instance_variable_get(var)
22
+ begin
23
+ @deep_cloning = true
24
+ val = val.deep_clone
25
+ rescue TypeError
26
+ next
27
+ ensure
28
+ @deep_cloning = false
29
+ end
30
+ @deep_cloning_obj.instance_variable_set(var, val)
31
+ end
32
+ deep_cloning_obj = @deep_cloning_obj
33
+ @deep_cloning_obj = nil
34
+ deep_cloning_obj
35
+ end
12
36
  end
@@ -1,9 +1,2 @@
1
- require 'cocoapods-binary/tool/tool'
2
-
3
- require 'cocoapods-binary/podfile_options'
4
- require 'cocoapods-binary/prebuild_sandbox'
5
-
6
- require 'cocoapods-binary/Integration'
7
- require 'cocoapods-binary/Prebuild'
8
1
  require 'cocoapods-binary/Main'
9
2
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-binary
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - leavez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-24 00:00:00.000000000 Z
11
+ date: 2018-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocoapods
@@ -117,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
117
117
  version: '0'
118
118
  requirements: []
119
119
  rubyforge_project:
120
- rubygems_version: 2.4.8
120
+ rubygems_version: 2.7.4
121
121
  signing_key:
122
122
  specification_version: 4
123
123
  summary: A longer description of cocoapods-binary.