cocoapods-patch 0.0.6 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -0
- data/README.md +42 -0
- data/lib/{cocoapods-patch/gem_version.rb → cocoapods_patch.rb} +1 -1
- data/lib/cocoapods_plugin.rb +2 -2
- data/lib/{cocoapods-patch → pod}/command/patch/apply.rb +3 -4
- data/lib/{cocoapods-patch → pod}/command/patch/create.rb +29 -3
- data/lib/{cocoapods-patch → pod}/command/patch.rb +7 -0
- data/lib/pod/command.rb +3 -0
- data/lib/pod/hook.rb +28 -0
- metadata +44 -15
- data/lib/cocoapods-patch/command.rb +0 -3
- data/lib/cocoapods-patch/hook.rb +0 -27
- data/lib/cocoapods-patch.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09b3961ea67614d95650203463aa53b0e556e4630f52bc88a1d826670aa932db'
|
4
|
+
data.tar.gz: 2bbd9aeedbf8912b991c7e83762b12c5b1ef4def1d2fc0af03a066126fd6569f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d973db22fe9a736b16df29b251cc3cd177ce6c7cac399f3f7f75ca55786776015e650fb680003c4376d144621c765c6eaca66d429e4eae8e00e86bcbea2f3bb9
|
7
|
+
data.tar.gz: ee4054f9540888b48282e1275355658d17bf1b744dbe2f3ad725b53b4cf0a980085f49d34eb6815fdbf03484b92bb3e253669702bd6804b6ff50aefcd470e5d0
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# Installation & Update
|
2
|
+
|
3
|
+
To install or update cocoapods-patch see [README](https://github.com/DoubleSymmetry/cocoapods-patch).
|
4
|
+
|
5
|
+
## Main
|
6
|
+
|
7
|
+
##### Enhancements
|
8
|
+
|
9
|
+
* None.
|
10
|
+
|
11
|
+
##### Bug Fixes
|
12
|
+
|
13
|
+
* None.
|
14
|
+
|
15
|
+
## 1.0.0 (1.11.21)
|
16
|
+
|
17
|
+
##### Enhancements
|
18
|
+
|
19
|
+
* Use official pre_integrate hook
|
20
|
+
[dcvz](https://github.com/dcvz)
|
21
|
+
[#7](https://github.com/DoubleSymmetry/cocoapods-patch/pull/7)
|
22
|
+
|
23
|
+
##### Bug Fixes
|
24
|
+
|
25
|
+
* None.
|
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
# cocoapods-patch
|
3
|
+
|
4
|
+
cocoapods-patch is a Cocoapods plugin that solves the problem of forking and maintaining a separate version of a Pod when only a small (often a one-liner), long-lived change in the original Pod is needed.
|
5
|
+
|
6
|
+
The idea behind the plugin is that patches should live inside the repo (in the `patches` directory) and be distributed together with the rest of your source code. This way, you can more easily code review and test the changes to a Pod and keep it synced across your team.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
First, install the plugin
|
11
|
+
|
12
|
+
$ gem install cocoapods-patch
|
13
|
+
|
14
|
+
Next, add a `plugin 'cocoapods-patch'` line to your Podfile to use the plugin. This will enable [automatic apply](#automatically-applying-all-patches-on-install) so you don't have to worry about it again.
|
15
|
+
|
16
|
+
That's it, you're done.
|
17
|
+
|
18
|
+
**NOTE:**
|
19
|
+
`cocoapods-patch` version 1.0.0 and above require you to use Cocoapods 1.11.0 or greater.
|
20
|
+
For anything below that please use version 0.0.5.
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
### Creating a patch
|
25
|
+
|
26
|
+
To create a patch, first, you need to modify the source code of the installed Pod. Do the desired changes to the Pod source code (under the `Pods/` directory). Once you're satisfied with the result, run:
|
27
|
+
|
28
|
+
pod patch create POD_NAME
|
29
|
+
|
30
|
+
This will create a `patches/POD_NAME.diff` file in your repository. The patch is a diff between the Pod version you have specified in your Podfile and your local changes to the Pod. You can now add and commit this patch.
|
31
|
+
|
32
|
+
### Automatically applying all patches on install
|
33
|
+
|
34
|
+
cocoapod-patch can be seamlessly integrated into the normal iOS development workflow. If you follow the installation instructions and add `plugin 'cocoapods-patch'` to your Podfile, every time you do a `pod install`, the plugin will go throught all the available patches and try to apply them. It will only warn you when the patch cannot be applied.
|
35
|
+
|
36
|
+
### Applying a patch manually
|
37
|
+
|
38
|
+
When you want to apply a patch to a pod, run
|
39
|
+
|
40
|
+
pod patch apply POD_NAME
|
41
|
+
|
42
|
+
This command will look for the appropriate patch in the `patches` directory and, if possibly, apply it to your local Pod. A patch can be applied only once.
|
data/lib/cocoapods_plugin.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
1
|
+
require 'pod/command'
|
2
|
+
require 'pod/hook'
|
@@ -37,17 +37,16 @@ def apply_patch(patch_file)
|
|
37
37
|
directory_arg = (ios_project_path.to_s.eql? ".") ? "Pods" : File.join(ios_project_path, 'Pods')
|
38
38
|
|
39
39
|
Dir.chdir(repo_root) {
|
40
|
-
|
41
|
-
check_cmd = "git apply --check #{patch_file} --directory=#{directory_arg} -p2 2> /dev/null"
|
40
|
+
check_cmd = "git apply --check '#{patch_file}' --directory='#{directory_arg}' -p2 2> /dev/null"
|
42
41
|
|
43
42
|
can_apply = system(check_cmd)
|
44
43
|
if can_apply
|
45
44
|
apply_cmd = check_cmd.gsub('--check ', '')
|
46
45
|
did_apply = system(apply_cmd)
|
47
46
|
if did_apply
|
48
|
-
Pod::UI.puts "Successfully applied #{patch_file}"
|
47
|
+
Pod::UI.puts "Successfully applied #{patch_file} 🎉"
|
49
48
|
else
|
50
|
-
Pod::UI.warn "
|
49
|
+
Pod::UI.warn "Error: failed to apply #{patch_file}"
|
51
50
|
end
|
52
51
|
end
|
53
52
|
}
|
@@ -24,7 +24,16 @@ module Pod
|
|
24
24
|
help! 'A Pod name is required.' unless @name
|
25
25
|
end
|
26
26
|
|
27
|
+
def clear_patches_folder_if_empty
|
28
|
+
if Dir.empty?(patches_path)
|
29
|
+
FileUtils.remove_dir(patches_path)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
27
33
|
def run
|
34
|
+
# create patches folder if it doesn't exist
|
35
|
+
FileUtils.mkdir_p(patches_path)
|
36
|
+
|
28
37
|
Dir.mktmpdir('cocoapods-patch-', config.project_root) do |work_dir|
|
29
38
|
sandbox = Pod::Sandbox.new(work_dir)
|
30
39
|
installer = Pod::Installer.new(sandbox, config.podfile)
|
@@ -33,18 +42,35 @@ module Pod
|
|
33
42
|
installer.prepare
|
34
43
|
installer.resolve_dependencies
|
35
44
|
|
45
|
+
UI.puts "Checking if pod exists in project..."
|
46
|
+
specs_by_platform = installer.send :specs_for_pod, @name
|
47
|
+
|
48
|
+
if specs_by_platform.empty?
|
49
|
+
clear_patches_folder_if_empty
|
50
|
+
help! "Given pod does not exist in project. Did you use incorrect pod name?"
|
51
|
+
|
52
|
+
return
|
53
|
+
end
|
54
|
+
|
36
55
|
pod_installer = installer.send :create_pod_installer, @name
|
37
56
|
pod_installer.install!
|
38
57
|
|
58
|
+
UI.puts "Creating patch"
|
39
59
|
theirs = Pathname.new(work_dir).join(@name).relative_path_from(config.project_root)
|
40
60
|
ours = config.project_pods_root.join(@name).relative_path_from(config.project_root)
|
41
|
-
gen_diff_cmd = "git diff --no-index #{theirs} #{ours} > #{patch_file}"
|
61
|
+
gen_diff_cmd = "git diff --no-index '#{theirs}' '#{ours}' > '#{patch_file}'"
|
42
62
|
|
43
63
|
did_succeed = system(gen_diff_cmd)
|
44
64
|
if not did_succeed.nil?
|
45
|
-
|
65
|
+
if File.empty?(patch_file)
|
66
|
+
File.delete(patch_file)
|
67
|
+
clear_patches_folder_if_empty
|
68
|
+
UI.warn "Error: no changes detected between current pod and original"
|
69
|
+
else
|
70
|
+
UI.puts "Created patch #{patch_file} 🎉"
|
71
|
+
end
|
46
72
|
else
|
47
|
-
UI.warn "Error
|
73
|
+
UI.warn "Error: failed to create patch for #{@name}"
|
48
74
|
end
|
49
75
|
end
|
50
76
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require_relative 'patch/apply'
|
2
|
+
require_relative 'patch/create'
|
3
|
+
|
1
4
|
module Pod
|
2
5
|
class Command
|
3
6
|
class Patch < Command
|
@@ -7,6 +10,10 @@ module Pod
|
|
7
10
|
def patch_file
|
8
11
|
config.project_root + 'patches' + "#{@name}.diff"
|
9
12
|
end
|
13
|
+
|
14
|
+
def patches_path
|
15
|
+
config.project_root + 'patches'
|
16
|
+
end
|
10
17
|
end
|
11
18
|
end
|
12
19
|
end
|
data/lib/pod/command.rb
ADDED
data/lib/pod/hook.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'cocoapods'
|
2
|
+
require 'pathname'
|
3
|
+
require_relative 'command/patch/apply'
|
4
|
+
|
5
|
+
module CocoapodsPatch
|
6
|
+
module Hooks
|
7
|
+
Pod::HooksManager.register('cocoapods-patch', :pre_install) do |context|
|
8
|
+
Pod::UI.puts 'Preparing patchable pods for clean patching'
|
9
|
+
patches_dir = Pathname.new(Dir.pwd) + 'patches'
|
10
|
+
if patches_dir.directory?
|
11
|
+
patches = patches_dir.each_child.select { |c| c.to_s.end_with?('.diff') }
|
12
|
+
patches.each do |p|
|
13
|
+
pod_name = File.basename(p, ".diff")
|
14
|
+
context.sandbox.clean_pod(pod_name)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Pod::HooksManager.register('cocoapods-patch', :pre_integrate) do |context|
|
20
|
+
Pod::UI.puts 'Applying patches if necessary'
|
21
|
+
patches_dir = Pathname.new(Dir.pwd) + 'patches'
|
22
|
+
if patches_dir.directory?
|
23
|
+
patches = patches_dir.each_child.select { |c| c.to_s.end_with?('.diff') }
|
24
|
+
patches.each { |p| apply_patch(p) }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
CHANGED
@@ -1,43 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-patch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Double Symmetry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01
|
11
|
+
date: 2021-11-01 00:00:00.000000000 Z
|
12
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.11.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.11.0
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
33
|
+
version: '2.0'
|
20
34
|
type: :development
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
40
|
+
version: '2.0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- - "
|
45
|
+
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
47
|
+
version: '13.0'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- - "
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '13.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.9'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
39
67
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
68
|
+
version: '3.9'
|
41
69
|
description: Create & apply patches to Pods
|
42
70
|
email:
|
43
71
|
- dev@doublesymmetry.com
|
@@ -45,14 +73,15 @@ executables: []
|
|
45
73
|
extensions: []
|
46
74
|
extra_rdoc_files: []
|
47
75
|
files:
|
48
|
-
-
|
49
|
-
-
|
50
|
-
- lib/
|
51
|
-
- lib/cocoapods-patch/command/patch/apply.rb
|
52
|
-
- lib/cocoapods-patch/command/patch/create.rb
|
53
|
-
- lib/cocoapods-patch/gem_version.rb
|
54
|
-
- lib/cocoapods-patch/hook.rb
|
76
|
+
- CHANGELOG.md
|
77
|
+
- README.md
|
78
|
+
- lib/cocoapods_patch.rb
|
55
79
|
- lib/cocoapods_plugin.rb
|
80
|
+
- lib/pod/command.rb
|
81
|
+
- lib/pod/command/patch.rb
|
82
|
+
- lib/pod/command/patch/apply.rb
|
83
|
+
- lib/pod/command/patch/create.rb
|
84
|
+
- lib/pod/hook.rb
|
56
85
|
homepage: https://github.com/DoubleSymmetry/cocoapods-patch
|
57
86
|
licenses:
|
58
87
|
- MIT
|
data/lib/cocoapods-patch/hook.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'cocoapods'
|
2
|
-
require 'pathname'
|
3
|
-
require_relative 'command/patch/apply'
|
4
|
-
|
5
|
-
class Pod::Installer
|
6
|
-
# Because our patches may also delete files, we need to apply them before the pod project is generated
|
7
|
-
# The project is generated in the `integrate` method, so we override it
|
8
|
-
# We first run our patch action and then the original implementation of the method
|
9
|
-
# Reference: https://github.com/CocoaPods/CocoaPods/blob/760828a07f8fcfbff03bce13f56a1789b6f5a95d/lib/cocoapods/installer.rb#L178
|
10
|
-
alias_method :integrate_old, :integrate
|
11
|
-
|
12
|
-
def integrate
|
13
|
-
# apply our patches
|
14
|
-
apply_patches
|
15
|
-
# run the original implementation
|
16
|
-
integrate_old
|
17
|
-
end
|
18
|
-
|
19
|
-
def apply_patches
|
20
|
-
Pod::UI.puts 'Applying patches if necessary'
|
21
|
-
patches_dir = Pathname.new(Dir.pwd) + 'patches'
|
22
|
-
if patches_dir.directory?
|
23
|
-
patches = patches_dir.each_child.select { |c| c.to_s.end_with?('.diff') }
|
24
|
-
patches.each { |p| apply_patch(p) }
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/lib/cocoapods-patch.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'cocoapods-patch/gem_version'
|