cocoapods-repo-update 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bbb043ea50d89bc27de5e9e2ec8e128041ffb0db
4
+ data.tar.gz: b04ee056bf6db73ebd468cc4250544419ced1d18
5
+ SHA512:
6
+ metadata.gz: 52bcf6dec093bbe31be33b62a49b4f96897b79433a387184dc678469e306d3ad08ddce94e2b8afa83e562e092dd020ff4ea50796201e2bcfbdbca48f2ace1501
7
+ data.tar.gz: cee6bccc1488f001d939c174534822e5f57fb976b3ad8c08a256be97a41c9f7b6270bbddb55c2275910fabcb0a3fe3710e7dbad29c6ec3324bd236235f171706
data/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # cocoapods-repo-update
2
+
3
+ cocoapods-repo-update is a CocoaPods plugin that checks your dependencies when you run `pod install` and updates the local specs repositories if needed.
4
+
5
+ ## Background
6
+
7
+ CocoaPods maintains a local mirror of the master specs repository at `~/.cocoapods/repos/master`. When you run `pod install`, CocoaPods checks your local mirror for all the specs you want and fetches them.
8
+
9
+ As of CocoaPods 1.0, `pod install` does not update the master specs repo every time it is run. This is because CocoaPods was [hammering Github](https://github.com/CocoaPods/CocoaPods/issues/4989#issuecomment-193772935) with this behavior. Now the specs repo must be explicitly updated with `pod repo update` or `pod install --repo-update`.
10
+
11
+ [In some cases](https://github.com/CocoaPods/CocoaPods/issues/6033), this change was a bit of an overcorrection. It can be particularly inconvenient when running changes on CI.
12
+
13
+ This plugin checks if your CocoaPods specs repo needs to be updated when `pod install` is run and updates it if needed. This eliminates the need to run `pod repo update` or `pod install --repo-update` when you change a pod.
14
+
15
+ ## Installation
16
+
17
+ Install with `gem install`:
18
+
19
+ $ gem install cocoapods-repo-update
20
+
21
+ Or add cocoapods-repo-update to your `Gemfile`:
22
+
23
+ gem 'cocoapods-repo-update'
24
+
25
+ ## Usage
26
+
27
+ cocoapods-repo-update is used by adding it to your `Podfile` like this:
28
+
29
+ ```
30
+ source 'https://github.com/CocoaPods/Specs.git'
31
+
32
+ platform :ios, '11.0'
33
+ plugin 'cocoapods-repo-update'
34
+
35
+ target :MyTarget do
36
+ # Dependencies here
37
+ end
38
+ ```
39
+
40
+ ## Development
41
+
42
+ Source for the plugin is in `lib/`. Tests are run like this:
43
+
44
+ ```
45
+ $ bundle install
46
+ $ bundle exec rspec spec/
47
+ ```
@@ -0,0 +1 @@
1
+ require 'cocoapods_repo_update'
@@ -0,0 +1,3 @@
1
+ require 'cocoapods_repo_update/gem_version'
2
+ require 'cocoapods_repo_update/hooks'
3
+ require 'cocoapods_repo_update/helper'
@@ -0,0 +1,4 @@
1
+ module CocoapodsRepoUpdate
2
+ VERSION = "0.0.1"
3
+ NAME = "cocoapods-repo-update"
4
+ end
@@ -0,0 +1,17 @@
1
+ module CocoapodsRepoUpdate
2
+ module Helper
3
+
4
+ # Suppress stdout & stderr while the block is run
5
+ #
6
+ # @yield invokes the block with output suppressed
7
+ def self.suppress_output
8
+ original_stdout, original_stderr = $stdout.clone, $stderr.clone
9
+ $stderr.reopen File.new('/dev/null', 'w')
10
+ $stdout.reopen File.new('/dev/null', 'w')
11
+ yield
12
+ ensure
13
+ $stdout.reopen original_stdout
14
+ $stderr.reopen original_stderr
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ require 'cocoapods'
2
+ require 'cocoapods/resolver'
3
+
4
+ module CocoapodsRepoUpdate
5
+ # Registers for CocoaPods plugin hooks
6
+ module Hooks
7
+ Pod::HooksManager.register(CocoapodsRepoUpdate::NAME, :pre_install) do |installer_context, options|
8
+ analyzer = Pod::Installer::Analyzer.new(installer_context.sandbox,
9
+ installer_context.podfile,
10
+ installer_context.lockfile)
11
+ begin
12
+ Pod::UI.puts "Checking if specs repo should be updated"
13
+
14
+ # Analyze dependencies but suppress stdout/stderr so `pod install` output is not polluted
15
+ CocoapodsRepoUpdate::Helper.suppress_output do
16
+ analyzer.analyze
17
+ end
18
+ Pod::UI.puts "Not updating local specs repo"
19
+ rescue Pod::NoSpecFoundError
20
+ Pod::UI.puts "At least one Pod is not in the local specs repo. Updating specs repo..."
21
+
22
+ config = Pod::Config.new
23
+ config.sources_manager.update(nil, false) # Update all specs repos, silently
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,45 @@
1
+ require 'pathname'
2
+ ROOT = Pathname.new(File.expand_path('../../', __FILE__))
3
+ $:.unshift((ROOT + 'lib').to_s)
4
+ $:.unshift((ROOT + 'spec').to_s)
5
+
6
+ require 'rspec'
7
+ require 'pathname'
8
+ require 'cocoapods'
9
+
10
+ require 'cocoapods_plugin'
11
+
12
+ #-----------------------------------------------------------------------------#
13
+
14
+ module Pod
15
+
16
+ # Disable the wrapping so the output is deterministic in the tests.
17
+ #
18
+ UI.disable_wrap = true
19
+
20
+ # Redirects the messages to an internal store.
21
+ #
22
+ module UI
23
+ @output = ''
24
+ @warnings = ''
25
+
26
+ class << self
27
+ attr_accessor :output
28
+ attr_accessor :warnings
29
+
30
+ def puts(message = '')
31
+ @output << "#{message}\n"
32
+ end
33
+
34
+ def warn(message = '', actions = [])
35
+ @warnings << "#{message}\n"
36
+ end
37
+
38
+ def print(message)
39
+ @output << message
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ #-----------------------------------------------------------------------------#
@@ -0,0 +1,40 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ def trigger_pre_install(installer_context, options)
4
+ pre_install_hooks = Pod::HooksManager.registrations[:pre_install]
5
+ hook = pre_install_hooks.find { |h| h.plugin_name == CocoapodsRepoUpdate::NAME }
6
+ hook.block.call(installer_context, options)
7
+ end
8
+
9
+ describe CocoapodsRepoUpdate::Hooks do
10
+ let(:options) { double('options') }
11
+ let(:installer_context) { double('Pod::Installer::Analyzer', sandbox: double('sandbox'),
12
+ podfile: double('podfile'),
13
+ lockfile: double('lockfile')) }
14
+ let(:analyzer) { double('analyzer') }
15
+ let(:sources_manager) { double('sources manager') }
16
+ let(:config) { double('config', sources_manager: sources_manager) }
17
+
18
+ before do
19
+ allow(Pod::Installer::Analyzer).to receive(:new).with(installer_context.sandbox,
20
+ installer_context.podfile,
21
+ installer_context.lockfile).and_return(analyzer)
22
+ allow(Pod::Config).to receive(:new).and_return(config)
23
+ end
24
+
25
+ context 'pre install' do
26
+ it 'runs the post install action without updating specs' do
27
+ allow(analyzer).to receive(:analyze)
28
+ expect(sources_manager).not_to receive(:update)
29
+
30
+ trigger_pre_install(installer_context, options)
31
+ end
32
+
33
+ it 'runs the post install action and updates specs' do
34
+ allow(analyzer).to receive(:analyze).and_raise(Pod::NoSpecFoundError)
35
+ expect(sources_manager).to receive(:update)
36
+
37
+ trigger_pre_install(installer_context, options)
38
+ end
39
+ end
40
+ end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cocoapods-repo-update
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - James Treanor
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-11-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cocoapods
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.3.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.3.0
33
+ description: A CocoaPods plugin that updates your specs repos on pod install if needed.
34
+ email:
35
+ - jtreanor3@gmail.com
36
+ executables: []
37
+ extensions: []
38
+ extra_rdoc_files:
39
+ - README.md
40
+ files:
41
+ - README.md
42
+ - lib/cocoapods_plugin.rb
43
+ - lib/cocoapods_repo_update.rb
44
+ - lib/cocoapods_repo_update/gem_version.rb
45
+ - lib/cocoapods_repo_update/helper.rb
46
+ - lib/cocoapods_repo_update/hooks.rb
47
+ - spec/spec_helper.rb
48
+ - spec/unit/hooks_spec.rb
49
+ homepage: https://github.com/wordpress-mobile/cocoapods-repo-update
50
+ licenses:
51
+ - GPL-2.0
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.5.1
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: cocoapods-repo-update is a CocoaPods plugin that checks your dependencies
73
+ when you run `pod install` and updates the local specs repositories if needed.
74
+ test_files:
75
+ - spec/spec_helper.rb
76
+ - spec/unit/hooks_spec.rb