cocoapods-amicable 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: cf1fafa880240e0edcb2ef1da4205bbc1608bcf8262db9a6b6fa6e9b563fb025
4
+ data.tar.gz: d6b2910671ecd58e3969997024d958efae2824757f6b28df6b1b690df9d7ec99
5
+ SHA512:
6
+ metadata.gz: 634ec21252d8f2d3e8b960f1561e684d62cb6636e3bb0685764608541ff03c77ae2a86e419ddabf1547b990e7226a6c4fa79ee92dbedd8c358aff1bb699c1bf7
7
+ data.tar.gz: c991e87bf3199494b9278f4ec0b36414b5bf0807a40322fb156e0ef6427a8e179fb4848a6fa277552a93a934cd01d0b6eefe08726a068a572217abdabca8237d
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CocoaPodsAmicable
4
+ class PodfileChecksumFixer
5
+ def initialize(post_install_context)
6
+ @post_install_context = post_install_context
7
+ end
8
+
9
+ def fix!
10
+ Pod::UI.titled_section 'Moving the Podfile checksum from the lockfile' do
11
+ @checksum = remove_checksum_from_lockfiles
12
+ write_sha1_file
13
+ update_check_manifest_script_phases
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ attr_reader :checksum
20
+
21
+ def sandbox
22
+ @post_install_context.sandbox
23
+ end
24
+
25
+ def lockfiles
26
+ [Pod::Config.instance.lockfile_path, sandbox.manifest_path].map do |lockfile_path|
27
+ Pod::Lockfile.from_file(lockfile_path)
28
+ end
29
+ end
30
+
31
+ def remove_checksum_from_lockfiles
32
+ checksums = lockfiles.map do |lockfile|
33
+ checksum = lockfile.internal_data.delete('PODFILE CHECKSUM')
34
+ lockfile.write_to_disk(lockfile.defined_in_file)
35
+ checksum
36
+ end.uniq
37
+ case checksums.size
38
+ when 1
39
+ checksums.first
40
+ else
41
+ raise 'Multiple (different) podfiles checksums found'
42
+ end
43
+ end
44
+
45
+ def sha1_file_path
46
+ sandbox.root + 'Podfile.sha1'
47
+ end
48
+
49
+ def podfile_basename
50
+ File.basename(Pod::Config.instance.podfile.defined_in_file)
51
+ end
52
+
53
+ def write_sha1_file
54
+ return unless name = podfile_basename
55
+ sha1_file_path.open('w') do |f|
56
+ f.write <<~EOS
57
+ #{checksum} #{name}
58
+ EOS
59
+ end
60
+ end
61
+
62
+ def update_check_manifest_script_phases
63
+ user_projects = []
64
+ @post_install_context.umbrella_targets.each do |umbrella_target|
65
+ user_projects << umbrella_target.user_project
66
+ umbrella_target.user_targets.each do |user_target|
67
+ build_phase = user_target.build_phases.find do |bp|
68
+ bp.name.end_with? Pod::Installer::UserProjectIntegrator::TargetIntegrator::CHECK_MANIFEST_PHASE_NAME
69
+ end
70
+ update_check_manifest_script_phase(build_phase)
71
+ end
72
+ end
73
+
74
+ user_projects.uniq.each(&:save)
75
+ end
76
+
77
+ def update_check_manifest_script_phase(build_phase)
78
+ build_phase.shell_script = <<~SH
79
+ set -e
80
+ set -u
81
+ set -o pipefail
82
+
83
+ fail() {
84
+ # print error to STDERR
85
+ echo "error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation." $@ >&2
86
+ exit 1
87
+ }
88
+
89
+ diff -q "${PODS_PODFILE_DIR_PATH}/Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null || fail "The manifest in the sandbox differs from your lockfile."
90
+
91
+ if [ -f "${PODS_ROOT}/Podfile.sha1" ]; then
92
+ (cd "${PODS_PODFILE_DIR_PATH}" && shasum --algorithm 1 --status --check "${PODS_ROOT}/Podfile.sha1") || fail "Your Podfile has been changed since the last time you ran 'pod install'."
93
+ fi
94
+
95
+ # This output is used by Xcode 'outputs' to avoid re-running this script phase.
96
+ echo "SUCCESS" > "${SCRIPT_OUTPUT_FILE_0}"
97
+ SH
98
+
99
+ build_phase.input_paths = %w[
100
+ ${PODS_PODFILE_DIR_PATH}/Podfile.lock
101
+ ${PODS_ROOT}/Manifest.lock
102
+ ${PODS_ROOT}/Podfile.sha1
103
+ ]
104
+ if name = podfile_basename
105
+ build_phase.input_paths << "${PODS_PODFILE_DIR_PATH}/#{name}"
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cocoapods_amicable'
4
+
5
+ Pod::HooksManager.register 'cocoapods-amicable', :post_install do |post_install_context|
6
+ CocoaPodsAmicable::PodfileChecksumFixer.new(post_install_context).fix!
7
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cocoapods-amicable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Samuel Giddins
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-02-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.3'
41
+ description:
42
+ email:
43
+ - segiddins@segiddins.me
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - lib/cocoapods_amicable.rb
49
+ - lib/cocoapods_plugin.rb
50
+ homepage: https://github.com/segiddins/cocoapods-amicable
51
+ licenses:
52
+ - MIT
53
+ metadata: {}
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubyforge_project:
70
+ rubygems_version: 2.7.4
71
+ signing_key:
72
+ specification_version: 4
73
+ summary: A CocoaPods plugin that moves the Podfile checksum to a file in the Sandbox,
74
+ reducing merge conflicts for teams that don't commit their Pods directory.
75
+ test_files: []