Commit 6c91dad6 authored by Fabio Pelosin's avatar Fabio Pelosin

[PodsProjectGenerator] Support for removing Pod and aggregate targets

parent 44a0343f
...@@ -17,7 +17,7 @@ GIT ...@@ -17,7 +17,7 @@ GIT
GIT GIT
remote: https://github.com/CocoaPods/Xcodeproj.git remote: https://github.com/CocoaPods/Xcodeproj.git
revision: 84782b972ef24e7565eaf9ab96a0bb1cb4c0521f revision: 23d64ce79dd23e928dadac986a858a13c07ac988
branch: master branch: master
specs: specs:
xcodeproj (0.10.1) xcodeproj (0.10.1)
...@@ -41,7 +41,7 @@ GIT ...@@ -41,7 +41,7 @@ GIT
GIT GIT
remote: https://github.com/irrationalfab/PrettyBacon.git remote: https://github.com/irrationalfab/PrettyBacon.git
revision: 0da7e231bf597005aaa4efb4c2cd837336a6b42b revision: 59cde2c52a3211c06f894e7324e5e4fac9d8476a
branch: master branch: master
specs: specs:
prettybacon (0.0.1) prettybacon (0.0.1)
......
...@@ -85,7 +85,9 @@ module Pod ...@@ -85,7 +85,9 @@ module Pod
else else
UI.message"- Opening existing project" do UI.message"- Opening existing project" do
@project = Pod::Project.open(sandbox.project_path) @project = Pod::Project.open(sandbox.project_path)
remove_groups
detect_native_targets detect_native_targets
# remove_unrecognized_targets
end end
end end
...@@ -94,6 +96,67 @@ module Pod ...@@ -94,6 +96,67 @@ module Pod
sandbox.project = project sandbox.project = project
end end
def remove_groups
pod_names = all_pod_targets.map(&:pod_name).uniq.sort
groups_to_remove = []
groups_to_remove << project.pod_groups.reject do |group|
pod_names.include?(group.display_name)
end
aggregate_names = aggregate_targets.map(&:label).uniq.sort
groups_to_remove << project.support_files_group.children.reject do |group|
aggregate_names.include?(group.display_name)
end
groups_to_remove.flatten.each do |group|
remove_group(group)
end
end
# Removes the given group taking care of removing any referenced target.
#
# @return [void]
#
def remove_group(group)
UI.message"- Removing `#{group}` group" do
group.groups.each do |child|
remove_group(child)
end
UI.message"- Removing targets" do
targets = project.targets.select { |target| group.children.include?(target.product_reference) }
targets.each do |target|
remove_target(target)
end
end
group.remove_from_project
end
end
# Removes the given target removing any reference to it from any other
# target.
#
# @return [void]
#
def remove_target(target)
UI.message"- Removing `#{target.display_name}` target" do
target.referrers.each do |ref|
if ref.isa == 'PBXTargetDependency'
ref.remove_from_project
end
end
target.remove_from_project
target.product_reference.referrers.each do |ref|
if ref.isa == 'PBXBuildFile'
ref.remove_from_project
end
end
target.product_reference.remove_from_project
end
end
# Matches the native targets of the Pods project with the targets # Matches the native targets of the Pods project with the targets
# generated by the analyzer. # generated by the analyzer.
# #
...@@ -101,27 +164,34 @@ module Pod ...@@ -101,27 +164,34 @@ module Pod
# #
def detect_native_targets def detect_native_targets
UI.message"- Matching targets" do UI.message"- Matching targets" do
p native_targets_by_name = project.targets.group_by(&:name) native_targets_by_name = project.targets.group_by(&:name)
p cp_targets = aggregate_targets + all_pod_targets native_targets_to_remove = native_targets_by_name.keys.dup
cp_targets = aggregate_targets + all_pod_targets
cp_targets.each do |pod_target| cp_targets.each do |pod_target|
native_targets = native_targets_by_name[pod_target.label] native_targets = native_targets_by_name[pod_target.label]
if native_targets if native_targets
pod_target.target = native_targets.first pod_target.target = native_targets.first
native_targets_to_remove.delete(pod_target.label)
end end
end end
native_targets_to_remove.each do |target_name|
remove_target(native_targets_by_name[target_name].first)
end
end end
end end
# @return [void] # @return [void]
# #
def sync_pod_targets def sync_pod_targets
pods_to_remove.each do |name|
remove_pod(name)
end
pods_to_install.each do |name| pods_to_install.each do |name|
add_pod(name) add_pod(name)
end end
all_pod_targets.each do |target|
gen = SupportFilesGenerator.new(target, sandbox.project)
gen.generate!
end
end end
# Adds and removes aggregate targets to the # Adds and removes aggregate targets to the
...@@ -143,10 +213,6 @@ module Pod ...@@ -143,10 +213,6 @@ module Pod
add_aggregate_target(target) add_aggregate_target(target)
end end
targets_to_remove.each do |target|
remove_aggregate_target(target)
end
aggregate_targets.each do |target| aggregate_targets.each do |target|
unless target.target_definition.empty? unless target.target_definition.empty?
gen = SupportFilesGenerator.new(target, sandbox.project) gen = SupportFilesGenerator.new(target, sandbox.project)
...@@ -155,7 +221,6 @@ module Pod ...@@ -155,7 +221,6 @@ module Pod
end end
end end
# #
# #
def add_aggregate_target(target) def add_aggregate_target(target)
...@@ -164,19 +229,10 @@ module Pod ...@@ -164,19 +229,10 @@ module Pod
end end
end end
#
#
def remove_aggregate_target(target)
UI.message"- Removing `#{target.label}`" do
target.remove_from_project
target.product_reference.remove_from_project
project.support_files_group[target.name].remove_from_project
end
end
# #
# #
def add_pod(name) def add_pod(name)
remove_group(project.pod_group(name)) if project.pod_group(name)
UI.message"- Installing `#{name}`" do UI.message"- Installing `#{name}`" do
pod_targets = all_pod_targets.select { |target| target.pod_name == name } pod_targets = all_pod_targets.select { |target| target.pod_name == name }
...@@ -191,37 +247,11 @@ module Pod ...@@ -191,37 +247,11 @@ module Pod
pod_targets.each do |pod_target| pod_targets.each do |pod_target|
UI.message"- Installing targets" do UI.message"- Installing targets" do
PodTargetInstaller.new(sandbox, pod_target).install! PodTargetInstaller.new(sandbox, pod_target).install!
gen = SupportFilesGenerator.new(pod_target, sandbox.project)
gen.generate!
end end
end end
end end
end end
#
#
def remove_pod(name)
UI.message"- Removing `#{name}`" do
products_group = project.group_for_spec(name, :products)
UI.message"- Removing targets" do
targets = project.targets.select { |target| products_group.children.include?(target.product_reference) }
targets.each do |target|
target.referrers.each do |ref|
if ref.isa == 'PBXTargetDependency'
ref.remove_from_project
end
end
target.remove_from_project
end
end
UI.message"- Removing file references" do
group = project.pod_group(name)
group.remove_from_project
end
end
end
# Sets the dependencies of the targets. # Sets the dependencies of the targets.
# #
......
...@@ -81,7 +81,6 @@ module Pod ...@@ -81,7 +81,6 @@ module Pod
# @return [PBXGroup] The new group. # @return [PBXGroup] The new group.
# #
def add_pod_group(pod_name, path, development = false, absolute = false) def add_pod_group(pod_name, path, development = false, absolute = false)
raise "[BUG]" if pod_group(pod_name)
parent_group = development ? development_pods : pods parent_group = development ? development_pods : pods
source_tree = absolute ? :absolute : :group source_tree = absolute ? :absolute : :group
group = parent_group.new_group(pod_name, path, source_tree) group = parent_group.new_group(pod_name, path, source_tree)
......
Subproject commit e788a4fd9faa2144344d9ead4f76c2d119d1a766 Subproject commit e9a2805c54fc2f61db25dc5936d15a19cb4c2c13
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