Commit c3d79897 authored by Dimitris Koutsogiorgas's avatar Dimitris Koutsogiorgas Committed by GitHub

Merge pull request #7101 from dnkoutso/script_phase_execution_placement

Integrate execution position for shell script phases
parents 9b013470 039f98d9
...@@ -8,6 +8,10 @@ To install release candidates run `[sudo] gem install cocoapods --pre` ...@@ -8,6 +8,10 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
##### Enhancements ##### Enhancements
* Integrate execution position for shell script phases
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
[#7101](https://github.com/CocoaPods/CocoaPods/pull/7101)
* Add support to integrate script phases from podspecs * Add support to integrate script phases from podspecs
[Dimitris Koutsogiorgas](https://github.com/dnkoutso) [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
[#7092](https://github.com/CocoaPods/CocoaPods/pull/7092) [#7092](https://github.com/CocoaPods/CocoaPods/pull/7092)
......
...@@ -7,7 +7,7 @@ GIT ...@@ -7,7 +7,7 @@ GIT
GIT GIT
remote: https://github.com/CocoaPods/Core.git remote: https://github.com/CocoaPods/Core.git
revision: 3f98bce41fd8eb6d385441eef4e5611665d13e64 revision: 153c5dfdd02eaac8bec160f6a3b3bc49b07ecf48
branch: master branch: master
specs: specs:
cocoapods-core (1.4.0.beta.1) cocoapods-core (1.4.0.beta.1)
......
...@@ -165,21 +165,29 @@ module Pod ...@@ -165,21 +165,29 @@ module Pod
end end
# Create or update the ones that are expected to be. # Create or update the ones that are expected to be.
script_phases.each do |td_script_phase| script_phases.each do |td_script_phase|
phase = TargetIntegrator.create_or_update_build_phase(native_target, USER_BUILD_PHASE_PREFIX + td_script_phase[:name]) name_with_prefix = USER_BUILD_PHASE_PREFIX + td_script_phase[:name]
phase = TargetIntegrator.create_or_update_build_phase(native_target, name_with_prefix)
phase.shell_script = td_script_phase[:script] phase.shell_script = td_script_phase[:script]
phase.shell_path = td_script_phase[:shell_path] if td_script_phase.key?(:shell_path) phase.shell_path = td_script_phase[:shell_path] if td_script_phase.key?(:shell_path)
phase.input_paths = td_script_phase[:input_files] if td_script_phase.key?(:input_files) phase.input_paths = td_script_phase[:input_files] if td_script_phase.key?(:input_files)
phase.output_paths = td_script_phase[:output_files] if td_script_phase.key?(:output_files) phase.output_paths = td_script_phase[:output_files] if td_script_phase.key?(:output_files)
phase.show_env_vars_in_log = td_script_phase[:show_env_vars_in_log] ? '1' : '0' if td_script_phase.key?(:show_env_vars_in_log) phase.show_env_vars_in_log = td_script_phase[:show_env_vars_in_log] ? '1' : '0' if td_script_phase.key?(:show_env_vars_in_log)
end
# Move script phases to their correct index if the order has changed. execution_position = td_script_phase[:execution_position]
offset = native_target.build_phases.count - script_phases.count unless execution_position == :any
script_phases.each_with_index do |td_script_phase, index| compile_build_phase_index = native_target.build_phases.index do |bp|
current_index = native_target.build_phases.index do |bp| bp.is_a?(Xcodeproj::Project::Object::PBXSourcesBuildPhase)
bp.is_a?(Xcodeproj::Project::Object::PBXShellScriptBuildPhase) && bp.name.sub(USER_BUILD_PHASE_PREFIX, '') == td_script_phase[:name] end
unless compile_build_phase_index.nil?
script_phase_index = native_target.build_phases.index do |bp|
bp.is_a?(Xcodeproj::Project::Object::PBXShellScriptBuildPhase) && !bp.name.nil? && bp.name == name_with_prefix
end
if (execution_position == :before_compile && script_phase_index > compile_build_phase_index) ||
(execution_position == :after_compile && script_phase_index < compile_build_phase_index)
native_target.build_phases.move_from(script_phase_index, compile_build_phase_index)
end
end
end end
expected_index = offset + index
native_target.build_phases.insert(expected_index, native_target.build_phases.delete_at(current_index)) if current_index != expected_index
end end
end end
end end
......
...@@ -388,32 +388,50 @@ module Pod ...@@ -388,32 +388,50 @@ module Pod
target.shell_script_build_phases.find { |bp| bp.name == @user_script_phase_name }.should.be.nil target.shell_script_build_phases.find { |bp| bp.name == @user_script_phase_name }.should.be.nil
end end
it 'moves custom shell scripts to their correct index' do it 'moves custom shell scripts according to their execution position' do
shell_script_one = { :name => 'Custom Script', :script => 'echo "Hello World"' } shell_script_one = { :name => 'Custom Script', :script => 'echo "Hello World"', :execution_position => :before_compile }
shell_script_two = { :name => 'Custom Script 2', :script => 'echo "Hello Aliens"' } shell_script_two = { :name => 'Custom Script 2', :script => 'echo "Hello Aliens"' }
@pod_bundle.target_definition.stubs(:script_phases).returns([shell_script_one, shell_script_two]) @pod_bundle.target_definition.stubs(:script_phases).returns([shell_script_one, shell_script_two])
@target_integrator.integrate! @target_integrator.integrate!
target = @target_integrator.send(:native_targets).first target = @target_integrator.send(:native_targets).first
target.shell_script_build_phases.map(&:name).should == [ target.build_phases.map(&:display_name).should == [
'[CP] Check Pods Manifest.lock', '[CP] Check Pods Manifest.lock',
'[CP-User] Custom Script',
'Sources',
'Frameworks',
'Resources',
'[CP] Embed Pods Frameworks', '[CP] Embed Pods Frameworks',
'[CP] Copy Pods Resources', '[CP] Copy Pods Resources',
'[CP-User] Custom Script',
'[CP-User] Custom Script 2', '[CP-User] Custom Script 2',
] ]
shell_script_one_uuid = target.shell_script_build_phases[3].uuid shell_script_one = { :name => 'Custom Script', :script => 'echo "Hello World"', :execution_position => :after_compile }
shell_script_two_uuid = target.shell_script_build_phases[4].uuid shell_script_two = { :name => 'Custom Script 2', :script => 'echo "Hello Aliens"', :execution_position => :before_compile }
@pod_bundle.target_definition.stubs(:script_phases).returns([shell_script_two, shell_script_one]) @pod_bundle.target_definition.stubs(:script_phases).returns([shell_script_one, shell_script_two])
@target_integrator.integrate! @target_integrator.integrate!
target.shell_script_build_phases.map(&:name).should == [ target.build_phases.map(&:display_name).should == [
'[CP] Check Pods Manifest.lock', '[CP] Check Pods Manifest.lock',
'[CP-User] Custom Script 2',
'Sources',
'[CP-User] Custom Script',
'Frameworks',
'Resources',
'[CP] Embed Pods Frameworks', '[CP] Embed Pods Frameworks',
'[CP] Copy Pods Resources', '[CP] Copy Pods Resources',
]
shell_script_one = { :name => 'Custom Script', :script => 'echo "Hello World"' }
shell_script_two = { :name => 'Custom Script 2', :script => 'echo "Hello Aliens"' }
@pod_bundle.target_definition.stubs(:script_phases).returns([shell_script_one, shell_script_two])
@target_integrator.integrate!
target.build_phases.map(&:display_name).should == [
'[CP] Check Pods Manifest.lock',
'[CP-User] Custom Script 2', '[CP-User] Custom Script 2',
'Sources',
'[CP-User] Custom Script', '[CP-User] Custom Script',
'Frameworks',
'Resources',
'[CP] Embed Pods Frameworks',
'[CP] Copy Pods Resources',
] ]
target.shell_script_build_phases[3].uuid.should == shell_script_two_uuid
target.shell_script_build_phases[4].uuid.should == shell_script_one_uuid
end end
it 'adds, removes and moves custom shell script phases' do it 'adds, removes and moves custom shell script phases' do
...@@ -424,8 +442,11 @@ module Pod ...@@ -424,8 +442,11 @@ module Pod
@pod_bundle.target_definition.stubs(:script_phases).returns([shell_script_one, shell_script_two, shell_script_three]) @pod_bundle.target_definition.stubs(:script_phases).returns([shell_script_one, shell_script_two, shell_script_three])
@target_integrator.integrate! @target_integrator.integrate!
target = @target_integrator.send(:native_targets).first target = @target_integrator.send(:native_targets).first
target.shell_script_build_phases.map(&:name).should == [ target.build_phases.map(&:display_name).should == [
'[CP] Check Pods Manifest.lock', '[CP] Check Pods Manifest.lock',
'Sources',
'Frameworks',
'Resources',
'[CP] Embed Pods Frameworks', '[CP] Embed Pods Frameworks',
'[CP] Copy Pods Resources', '[CP] Copy Pods Resources',
'[CP-User] Custom Script', '[CP-User] Custom Script',
...@@ -434,8 +455,11 @@ module Pod ...@@ -434,8 +455,11 @@ module Pod
] ]
@pod_bundle.target_definition.stubs(:script_phases).returns([shell_script_two, shell_script_four]) @pod_bundle.target_definition.stubs(:script_phases).returns([shell_script_two, shell_script_four])
@target_integrator.integrate! @target_integrator.integrate!
target.shell_script_build_phases.map(&:name).should == [ target.build_phases.map(&:display_name).should == [
'[CP] Check Pods Manifest.lock', '[CP] Check Pods Manifest.lock',
'Sources',
'Frameworks',
'Resources',
'[CP] Embed Pods Frameworks', '[CP] Embed Pods Frameworks',
'[CP] Copy Pods Resources', '[CP] Copy Pods Resources',
'[CP-User] Custom Script 2', '[CP-User] Custom Script 2',
...@@ -449,8 +473,11 @@ module Pod ...@@ -449,8 +473,11 @@ module Pod
target.new_shell_script_build_phase('User Script Phase 1') target.new_shell_script_build_phase('User Script Phase 1')
target.new_shell_script_build_phase('User Script Phase 2') target.new_shell_script_build_phase('User Script Phase 2')
@target_integrator.integrate! @target_integrator.integrate!
target.shell_script_build_phases.map(&:name).should == [ target.build_phases.map(&:display_name).should == [
'[CP] Check Pods Manifest.lock', '[CP] Check Pods Manifest.lock',
'Sources',
'Frameworks',
'Resources',
'User Script Phase 1', 'User Script Phase 1',
'User Script Phase 2', 'User Script Phase 2',
'[CP] Embed Pods Frameworks', '[CP] Embed Pods Frameworks',
...@@ -459,8 +486,11 @@ module Pod ...@@ -459,8 +486,11 @@ module Pod
] ]
@pod_bundle.target_definition.stubs(:script_phases).returns([]) @pod_bundle.target_definition.stubs(:script_phases).returns([])
@target_integrator.integrate! @target_integrator.integrate!
target.shell_script_build_phases.map(&:name).should == [ target.build_phases.map(&:display_name).should == [
'[CP] Check Pods Manifest.lock', '[CP] Check Pods Manifest.lock',
'Sources',
'Frameworks',
'Resources',
'User Script Phase 1', 'User Script Phase 1',
'User Script Phase 2', 'User Script Phase 2',
'[CP] Embed Pods Frameworks', '[CP] Embed Pods Frameworks',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment