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
GIT
remote: https://github.com/CocoaPods/Xcodeproj.git
revision: 84782b972ef24e7565eaf9ab96a0bb1cb4c0521f
revision: 23d64ce79dd23e928dadac986a858a13c07ac988
branch: master
specs:
xcodeproj (0.10.1)
......@@ -41,7 +41,7 @@ GIT
GIT
remote: https://github.com/irrationalfab/PrettyBacon.git
revision: 0da7e231bf597005aaa4efb4c2cd837336a6b42b
revision: 59cde2c52a3211c06f894e7324e5e4fac9d8476a
branch: master
specs:
prettybacon (0.0.1)
......
......@@ -85,7 +85,9 @@ module Pod
else
UI.message"- Opening existing project" do
@project = Pod::Project.open(sandbox.project_path)
remove_groups
detect_native_targets
# remove_unrecognized_targets
end
end
......@@ -94,6 +96,67 @@ module Pod
sandbox.project = project
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
# generated by the analyzer.
#
......@@ -101,27 +164,34 @@ module Pod
#
def detect_native_targets
UI.message"- Matching targets" do
p native_targets_by_name = project.targets.group_by(&:name)
p cp_targets = aggregate_targets + all_pod_targets
native_targets_by_name = project.targets.group_by(&:name)
native_targets_to_remove = native_targets_by_name.keys.dup
cp_targets = aggregate_targets + all_pod_targets
cp_targets.each do |pod_target|
native_targets = native_targets_by_name[pod_target.label]
if native_targets
pod_target.target = native_targets.first
native_targets_to_remove.delete(pod_target.label)
end
end
native_targets_to_remove.each do |target_name|
remove_target(native_targets_by_name[target_name].first)
end
end
end
# @return [void]
#
def sync_pod_targets
pods_to_remove.each do |name|
remove_pod(name)
end
pods_to_install.each do |name|
add_pod(name)
end
all_pod_targets.each do |target|
gen = SupportFilesGenerator.new(target, sandbox.project)
gen.generate!
end
end
# Adds and removes aggregate targets to the
......@@ -143,10 +213,6 @@ module Pod
add_aggregate_target(target)
end
targets_to_remove.each do |target|
remove_aggregate_target(target)
end
aggregate_targets.each do |target|
unless target.target_definition.empty?
gen = SupportFilesGenerator.new(target, sandbox.project)
......@@ -155,7 +221,6 @@ module Pod
end
end
#
#
def add_aggregate_target(target)
......@@ -164,19 +229,10 @@ module Pod
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)
remove_group(project.pod_group(name)) if project.pod_group(name)
UI.message"- Installing `#{name}`" do
pod_targets = all_pod_targets.select { |target| target.pod_name == name }
......@@ -191,37 +247,11 @@ module Pod
pod_targets.each do |pod_target|
UI.message"- Installing targets" do
PodTargetInstaller.new(sandbox, pod_target).install!
gen = SupportFilesGenerator.new(pod_target, sandbox.project)
gen.generate!
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.
#
......
......@@ -81,7 +81,6 @@ module Pod
# @return [PBXGroup] The new group.
#
def add_pod_group(pod_name, path, development = false, absolute = false)
raise "[BUG]" if pod_group(pod_name)
parent_group = development ? development_pods : pods
source_tree = absolute ? :absolute : :group
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