kintsugi 0.5.2 → 0.6.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.
- checksums.yaml +4 -4
 - data/.github/workflows/release.yml +8 -0
 - data/.github/workflows/tests.yml +1 -0
 - data/.rubocop.yml +3 -0
 - data/bin/kintsugi +2 -30
 - data/kintsugi.gemspec +2 -1
 - data/lib/kintsugi/apply_change_to_project.rb +382 -135
 - data/lib/kintsugi/cli.rb +8 -0
 - data/lib/kintsugi/merge.rb +146 -0
 - data/lib/kintsugi/settings.rb +18 -0
 - data/lib/kintsugi/version.rb +1 -1
 - data/lib/kintsugi/xcodeproj_extensions.rb +84 -0
 - data/lib/kintsugi.rb +29 -148
 - data/spec/kintsugi_apply_change_to_project_spec.rb +346 -111
 - data/spec/kintsugi_integration_spec.rb +148 -0
 - metadata +23 -5
 
| 
         @@ -34,7 +34,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       34 
34 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       37 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       38 
37 
     | 
    
         | 
| 
       39 
38 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       40 
39 
     | 
    
         
             
              end
         
     | 
| 
         @@ -46,7 +45,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       46 
45 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       47 
46 
     | 
    
         | 
| 
       48 
47 
     | 
    
         
             
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       49 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       50 
48 
     | 
    
         | 
| 
       51 
49 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       52 
50 
     | 
    
         
             
              end
         
     | 
| 
         @@ -60,7 +58,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       60 
58 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       61 
59 
     | 
    
         | 
| 
       62 
60 
     | 
    
         
             
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       63 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       64 
61 
     | 
    
         | 
| 
       65 
62 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       66 
63 
     | 
    
         
             
              end
         
     | 
| 
         @@ -72,29 +69,29 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       72 
69 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       73 
70 
     | 
    
         | 
| 
       74 
71 
     | 
    
         
             
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       75 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       76 
72 
     | 
    
         | 
| 
       77 
73 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(theirs_project, ignore_keys: ["containerPortal"])
         
     | 
| 
       78 
74 
     | 
    
         
             
              end
         
     | 
| 
       79 
75 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
              it " 
     | 
| 
       81 
     | 
    
         
            -
                 
     | 
| 
      
 76 
     | 
    
         
            +
              it "removes reference proxy from subproject with the same display name as another reference proxy" do
         
     | 
| 
      
 77 
     | 
    
         
            +
                framework_filename = "baz"
         
     | 
| 
      
 78 
     | 
    
         
            +
                subproject = add_new_subproject_to_project(base_project, "subproj", framework_filename)
         
     | 
| 
       82 
79 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
                subproject 
     | 
| 
       84 
     | 
    
         
            -
                 
     | 
| 
      
 80 
     | 
    
         
            +
                subproject.new_target("com.apple.product-type.library.static", framework_filename, :ios)
         
     | 
| 
      
 81 
     | 
    
         
            +
                base_project.root_object.project_references[0][:product_group] <<
         
     | 
| 
      
 82 
     | 
    
         
            +
                  create_reference_proxy_from_product_reference(base_project,
         
     | 
| 
      
 83 
     | 
    
         
            +
                                                                base_project.root_object.project_references[0][:project_ref],
         
     | 
| 
      
 84 
     | 
    
         
            +
                                                                subproject.products_group.files[-1])
         
     | 
| 
      
 85 
     | 
    
         
            +
                base_project.save
         
     | 
| 
       85 
86 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
                 
     | 
| 
       87 
     | 
    
         
            -
                 
     | 
| 
      
 87 
     | 
    
         
            +
                theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 88 
     | 
    
         
            +
                theirs_project.root_object.project_references[0][:product_group].children[-1].remove_from_project
         
     | 
| 
       88 
89 
     | 
    
         | 
| 
       89 
90 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       90 
91 
     | 
    
         | 
| 
       91 
     | 
    
         
            -
                described_class.apply_change_to_project( 
     | 
| 
       92 
     | 
    
         
            -
                ours_project.save
         
     | 
| 
      
 92 
     | 
    
         
            +
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       93 
93 
     | 
    
         | 
| 
       94 
     | 
    
         
            -
                expect( 
     | 
| 
       95 
     | 
    
         
            -
                  .not_to equal(ours_project.root_object.project_references[1][:project_ref].uuid)
         
     | 
| 
       96 
     | 
    
         
            -
                expect(ours_project.root_object.project_references[0][:project_ref].proxy_containers).not_to be_empty
         
     | 
| 
       97 
     | 
    
         
            -
                expect(ours_project.root_object.project_references[1][:project_ref].proxy_containers).not_to be_empty
         
     | 
| 
      
 94 
     | 
    
         
            +
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       98 
95 
     | 
    
         
             
              end
         
     | 
| 
       99 
96 
     | 
    
         | 
| 
       100 
97 
     | 
    
         
             
              # Checks that the order the changes are applied in is correct.
         
     | 
| 
         @@ -110,7 +107,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       110 
107 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       111 
108 
     | 
    
         | 
| 
       112 
109 
     | 
    
         
             
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       113 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       114 
110 
     | 
    
         | 
| 
       115 
111 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(theirs_project, ignore_keys: ["containerPortal"])
         
     | 
| 
       116 
112 
     | 
    
         
             
              end
         
     | 
| 
         @@ -152,11 +148,28 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       152 
148 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       153 
149 
     | 
    
         | 
| 
       154 
150 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       155 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       156 
151 
     | 
    
         | 
| 
       157 
152 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       158 
153 
     | 
    
         
             
                end
         
     | 
| 
       159 
154 
     | 
    
         | 
| 
      
 155 
     | 
    
         
            +
                it "raises when a file is split into two" do
         
     | 
| 
      
 156 
     | 
    
         
            +
                  base_project.main_group.find_subpath("new_group", true)
         
     | 
| 
      
 157 
     | 
    
         
            +
                  base_project.main_group.find_subpath("new_group2", true)
         
     | 
| 
      
 158 
     | 
    
         
            +
                  base_project.save
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 161 
     | 
    
         
            +
                  new_group = theirs_project.main_group.find_subpath("new_group")
         
     | 
| 
      
 162 
     | 
    
         
            +
                  file_reference = theirs_project.main_group.find_file_by_path(filepath)
         
     | 
| 
      
 163 
     | 
    
         
            +
                  file_reference.move(new_group)
         
     | 
| 
      
 164 
     | 
    
         
            +
                  theirs_project.main_group.find_subpath("new_group2").new_reference(filepath)
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
                  expect {
         
     | 
| 
      
 169 
     | 
    
         
            +
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
      
 170 
     | 
    
         
            +
                  }.to raise_error(Kintsugi::MergeError)
         
     | 
| 
      
 171 
     | 
    
         
            +
                end
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
       160 
173 
     | 
    
         
             
                it "adds file to new group" do
         
     | 
| 
       161 
174 
     | 
    
         
             
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       162 
175 
     | 
    
         | 
| 
         @@ -165,8 +178,21 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       165 
178 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       166 
179 
     | 
    
         | 
| 
       167 
180 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
      
 181 
     | 
    
         
            +
             
     | 
| 
      
 182 
     | 
    
         
            +
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
      
 183 
     | 
    
         
            +
                end
         
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
      
 185 
     | 
    
         
            +
                it "removes group" do
         
     | 
| 
      
 186 
     | 
    
         
            +
                  base_project.main_group.find_subpath("new_group", true)
         
     | 
| 
       168 
187 
     | 
    
         
             
                  base_project.save
         
     | 
| 
       169 
188 
     | 
    
         | 
| 
      
 189 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 190 
     | 
    
         
            +
                  theirs_project["new_group"].remove_from_project
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
      
 195 
     | 
    
         
            +
             
     | 
| 
       170 
196 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       171 
197 
     | 
    
         
             
                end
         
     | 
| 
       172 
198 
     | 
    
         | 
| 
         @@ -179,7 +205,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       179 
205 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       180 
206 
     | 
    
         | 
| 
       181 
207 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       182 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       183 
208 
     | 
    
         | 
| 
       184 
209 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       185 
210 
     | 
    
         
             
                end
         
     | 
| 
         @@ -203,7 +228,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       203 
228 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       204 
229 
     | 
    
         | 
| 
       205 
230 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       206 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       207 
231 
     | 
    
         | 
| 
       208 
232 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       209 
233 
     | 
    
         
             
                end
         
     | 
| 
         @@ -225,6 +249,22 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       225 
249 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       226 
250 
     | 
    
         
             
                end
         
     | 
| 
       227 
251 
     | 
    
         | 
| 
      
 252 
     | 
    
         
            +
                it "ignores removal of a non-existent group" do
         
     | 
| 
      
 253 
     | 
    
         
            +
                  base_project.main_group.find_subpath("new_group", true)
         
     | 
| 
      
 254 
     | 
    
         
            +
                  base_project.save
         
     | 
| 
      
 255 
     | 
    
         
            +
             
     | 
| 
      
 256 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 257 
     | 
    
         
            +
                  theirs_project.main_group.children.delete_at(-1)
         
     | 
| 
      
 258 
     | 
    
         
            +
             
     | 
| 
      
 259 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
      
 261 
     | 
    
         
            +
                  base_project.main_group.children.delete_at(-1)
         
     | 
| 
      
 262 
     | 
    
         
            +
             
     | 
| 
      
 263 
     | 
    
         
            +
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
      
 265 
     | 
    
         
            +
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
      
 266 
     | 
    
         
            +
                end
         
     | 
| 
      
 267 
     | 
    
         
            +
             
     | 
| 
       228 
268 
     | 
    
         
             
                it "removes build files of a removed file" do
         
     | 
| 
       229 
269 
     | 
    
         
             
                  target = base_project.new_target("com.apple.product-type.library.static", "foo", :ios)
         
     | 
| 
       230 
270 
     | 
    
         
             
                  target.source_build_phase.add_file_reference(
         
     | 
| 
         @@ -244,7 +284,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       244 
284 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       245 
285 
     | 
    
         | 
| 
       246 
286 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       247 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       248 
287 
     | 
    
         | 
| 
       249 
288 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       250 
289 
     | 
    
         
             
                end
         
     | 
| 
         @@ -260,7 +299,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       260 
299 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       261 
300 
     | 
    
         | 
| 
       262 
301 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       263 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       264 
302 
     | 
    
         | 
| 
       265 
303 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       266 
304 
     | 
    
         
             
                end
         
     | 
| 
         @@ -275,25 +313,21 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       275 
313 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       276 
314 
     | 
    
         | 
| 
       277 
315 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       278 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       279 
316 
     | 
    
         | 
| 
       280 
317 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       281 
318 
     | 
    
         
             
                end
         
     | 
| 
       282 
319 
     | 
    
         | 
| 
       283 
320 
     | 
    
         
             
                it "handles moved file to an existing group with a different path on filesystem" do
         
     | 
| 
       284 
321 
     | 
    
         
             
                  base_project.main_group.find_subpath("new_group", true).path = "some_path"
         
     | 
| 
       285 
     | 
    
         
            -
             
     | 
| 
       286 
322 
     | 
    
         
             
                  base_project.save
         
     | 
| 
       287 
     | 
    
         
            -
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       288 
323 
     | 
    
         | 
| 
      
 324 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       289 
325 
     | 
    
         
             
                  new_group = theirs_project.main_group.find_subpath("new_group")
         
     | 
| 
       290 
     | 
    
         
            -
             
     | 
| 
       291 
326 
     | 
    
         
             
                  theirs_project.main_group.find_file_by_path(filepath).move(new_group)
         
     | 
| 
       292 
327 
     | 
    
         | 
| 
       293 
328 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       294 
329 
     | 
    
         | 
| 
       295 
330 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       296 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       297 
331 
     | 
    
         | 
| 
       298 
332 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       299 
333 
     | 
    
         
             
                end
         
     | 
| 
         @@ -312,7 +346,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       312 
346 
     | 
    
         
             
                    ours_project_before_applying_changes = create_copy_of_project(ours_project.path, "ours")
         
     | 
| 
       313 
347 
     | 
    
         | 
| 
       314 
348 
     | 
    
         
             
                    described_class.apply_change_to_project(ours_project, changes_to_apply)
         
     | 
| 
       315 
     | 
    
         
            -
                    ours_project.save
         
     | 
| 
       316 
349 
     | 
    
         | 
| 
       317 
350 
     | 
    
         
             
                    expect(ours_project).to be_equivalent_to_project(ours_project_before_applying_changes)
         
     | 
| 
       318 
351 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -330,7 +363,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       330 
363 
     | 
    
         
             
                    ours_project_before_applying_changes = create_copy_of_project(ours_project.path, "ours")
         
     | 
| 
       331 
364 
     | 
    
         | 
| 
       332 
365 
     | 
    
         
             
                    described_class.apply_change_to_project(ours_project, changes_to_apply)
         
     | 
| 
       333 
     | 
    
         
            -
                    ours_project.save
         
     | 
| 
       334 
366 
     | 
    
         | 
| 
       335 
367 
     | 
    
         
             
                    expect(ours_project).to be_equivalent_to_project(ours_project_before_applying_changes)
         
     | 
| 
       336 
368 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -348,7 +380,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       348 
380 
     | 
    
         
             
                    ours_project_before_applying_changes = create_copy_of_project(ours_project.path, "ours")
         
     | 
| 
       349 
381 
     | 
    
         | 
| 
       350 
382 
     | 
    
         
             
                    described_class.apply_change_to_project(ours_project, changes_to_apply)
         
     | 
| 
       351 
     | 
    
         
            -
                    ours_project.save
         
     | 
| 
       352 
383 
     | 
    
         | 
| 
       353 
384 
     | 
    
         
             
                    expect(ours_project).to be_equivalent_to_project(ours_project_before_applying_changes)
         
     | 
| 
       354 
385 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -363,7 +394,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       363 
394 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       364 
395 
     | 
    
         | 
| 
       365 
396 
     | 
    
         
             
                    described_class.apply_change_to_project(ours_project, changes_to_apply)
         
     | 
| 
       366 
     | 
    
         
            -
                    ours_project.save
         
     | 
| 
       367 
397 
     | 
    
         | 
| 
       368 
398 
     | 
    
         
             
                    expect(ours_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       369 
399 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -377,6 +407,54 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       377 
407 
     | 
    
         
             
                  base_project.save
         
     | 
| 
       378 
408 
     | 
    
         
             
                end
         
     | 
| 
       379 
409 
     | 
    
         | 
| 
      
 410 
     | 
    
         
            +
                it "moves file that is referenced by a target from main group to a new group" do
         
     | 
| 
      
 411 
     | 
    
         
            +
                  file_reference = base_project.main_group.new_reference("bar")
         
     | 
| 
      
 412 
     | 
    
         
            +
                  base_project.targets[0].source_build_phase.add_file_reference(file_reference)
         
     | 
| 
      
 413 
     | 
    
         
            +
                  base_project.save
         
     | 
| 
      
 414 
     | 
    
         
            +
             
     | 
| 
      
 415 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 416 
     | 
    
         
            +
                  new_group = theirs_project.main_group.find_subpath("new_group", true)
         
     | 
| 
      
 417 
     | 
    
         
            +
                  file_reference = theirs_project.main_group.find_file_by_path("bar")
         
     | 
| 
      
 418 
     | 
    
         
            +
                  file_reference.move(new_group)
         
     | 
| 
      
 419 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 420 
     | 
    
         
            +
             
     | 
| 
      
 421 
     | 
    
         
            +
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
      
 422 
     | 
    
         
            +
             
     | 
| 
      
 423 
     | 
    
         
            +
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
      
 424 
     | 
    
         
            +
                end
         
     | 
| 
      
 425 
     | 
    
         
            +
             
     | 
| 
      
 426 
     | 
    
         
            +
                it "moves file that is referenced by a target from a group to the main group" do
         
     | 
| 
      
 427 
     | 
    
         
            +
                  file_reference = base_project.main_group.find_subpath("new_group", true).new_reference("bar")
         
     | 
| 
      
 428 
     | 
    
         
            +
                  base_project.targets[0].source_build_phase.add_file_reference(file_reference)
         
     | 
| 
      
 429 
     | 
    
         
            +
                  base_project.save
         
     | 
| 
      
 430 
     | 
    
         
            +
             
     | 
| 
      
 431 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 432 
     | 
    
         
            +
                  file_reference = theirs_project["new_group/bar"]
         
     | 
| 
      
 433 
     | 
    
         
            +
                  file_reference.move(theirs_project.main_group)
         
     | 
| 
      
 434 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 435 
     | 
    
         
            +
             
     | 
| 
      
 436 
     | 
    
         
            +
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
      
 437 
     | 
    
         
            +
             
     | 
| 
      
 438 
     | 
    
         
            +
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
      
 439 
     | 
    
         
            +
                end
         
     | 
| 
      
 440 
     | 
    
         
            +
             
     | 
| 
      
 441 
     | 
    
         
            +
                it "moves file that is referenced by a target and has a different file encoding" do
         
     | 
| 
      
 442 
     | 
    
         
            +
                  file_reference = base_project.main_group.find_subpath("new_group", true).new_reference("bar")
         
     | 
| 
      
 443 
     | 
    
         
            +
                  target.frameworks_build_phase.add_file_reference(file_reference)
         
     | 
| 
      
 444 
     | 
    
         
            +
                  base_project.save
         
     | 
| 
      
 445 
     | 
    
         
            +
             
     | 
| 
      
 446 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 447 
     | 
    
         
            +
                  file_reference = theirs_project["new_group/bar"]
         
     | 
| 
      
 448 
     | 
    
         
            +
                  file_reference.move(theirs_project.main_group)
         
     | 
| 
      
 449 
     | 
    
         
            +
                  file_reference.fileEncoding = "4"
         
     | 
| 
      
 450 
     | 
    
         
            +
             
     | 
| 
      
 451 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 452 
     | 
    
         
            +
             
     | 
| 
      
 453 
     | 
    
         
            +
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
      
 454 
     | 
    
         
            +
             
     | 
| 
      
 455 
     | 
    
         
            +
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
      
 456 
     | 
    
         
            +
                end
         
     | 
| 
      
 457 
     | 
    
         
            +
             
     | 
| 
       380 
458 
     | 
    
         
             
                it "changes framework from file reference to reference proxy" do
         
     | 
| 
       381 
459 
     | 
    
         
             
                  framework_filename = "baz"
         
     | 
| 
       382 
460 
     | 
    
         | 
| 
         @@ -389,7 +467,7 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       389 
467 
     | 
    
         
             
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       390 
468 
     | 
    
         | 
| 
       391 
469 
     | 
    
         
             
                  build_phase = theirs_project.targets[0].frameworks_build_phase
         
     | 
| 
       392 
     | 
    
         
            -
                  build_phase.files 
     | 
| 
      
 470 
     | 
    
         
            +
                  build_phase.files.find { |build_file| build_file.display_name == "baz" }.remove_from_project
         
     | 
| 
       393 
471 
     | 
    
         
             
                  build_phase.add_file_reference(
         
     | 
| 
       394 
472 
     | 
    
         
             
                    theirs_project.root_object.project_references[0][:product_group].children[0]
         
     | 
| 
       395 
473 
     | 
    
         
             
                  )
         
     | 
| 
         @@ -397,7 +475,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       397 
475 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       398 
476 
     | 
    
         | 
| 
       399 
477 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       400 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       401 
478 
     | 
    
         | 
| 
       402 
479 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       403 
480 
     | 
    
         
             
                end
         
     | 
| 
         @@ -410,7 +487,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       410 
487 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       411 
488 
     | 
    
         | 
| 
       412 
489 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       413 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       414 
490 
     | 
    
         | 
| 
       415 
491 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       416 
492 
     | 
    
         
             
                end
         
     | 
| 
         @@ -427,7 +503,8 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       427 
503 
     | 
    
         | 
| 
       428 
504 
     | 
    
         
             
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       429 
505 
     | 
    
         | 
| 
       430 
     | 
    
         
            -
                  file_reference = theirs_project.main_group.new_reference( 
     | 
| 
      
 506 
     | 
    
         
            +
                  file_reference = theirs_project.main_group.new_reference("bar")
         
     | 
| 
      
 507 
     | 
    
         
            +
                  file_reference.name = framework_filename
         
     | 
| 
       431 
508 
     | 
    
         
             
                  build_phase = theirs_project.targets[0].frameworks_build_phase
         
     | 
| 
       432 
509 
     | 
    
         
             
                  build_phase.files[-1].remove_from_project
         
     | 
| 
       433 
510 
     | 
    
         
             
                  theirs_project.targets[0].frameworks_build_phase.add_file_reference(file_reference)
         
     | 
| 
         @@ -435,7 +512,10 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       435 
512 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       436 
513 
     | 
    
         | 
| 
       437 
514 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       438 
     | 
    
         
            -
                   
     | 
| 
      
 515 
     | 
    
         
            +
                  # This verifies we haven't created a new file reference instead of reusing the one in the
         
     | 
| 
      
 516 
     | 
    
         
            +
                  # hierarchy.
         
     | 
| 
      
 517 
     | 
    
         
            +
                  base_project.files[-1].name = "foo"
         
     | 
| 
      
 518 
     | 
    
         
            +
                  theirs_project.files[-1].name = "foo"
         
     | 
| 
       439 
519 
     | 
    
         | 
| 
       440 
520 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       441 
521 
     | 
    
         
             
                end
         
     | 
| 
         @@ -462,7 +542,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       462 
542 
     | 
    
         
             
                  changes_to_apply["rootObject"].delete("projectReferences")
         
     | 
| 
       463 
543 
     | 
    
         | 
| 
       464 
544 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       465 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       466 
545 
     | 
    
         | 
| 
       467 
546 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       468 
547 
     | 
    
         
             
                end
         
     | 
| 
         @@ -489,7 +568,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       489 
568 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       490 
569 
     | 
    
         | 
| 
       491 
570 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       492 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       493 
571 
     | 
    
         | 
| 
       494 
572 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       495 
573 
     | 
    
         
             
                end
         
     | 
| 
         @@ -506,7 +584,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       506 
584 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       507 
585 
     | 
    
         | 
| 
       508 
586 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       509 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       510 
587 
     | 
    
         | 
| 
       511 
588 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project, ignore_keys: ["containerPortal"])
         
     | 
| 
       512 
589 
     | 
    
         
             
                end
         
     | 
| 
         @@ -526,16 +603,13 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       526 
603 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       527 
604 
     | 
    
         | 
| 
       528 
605 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       529 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       530 
606 
     | 
    
         | 
| 
       531 
607 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project, ignore_keys: ["containerPortal"])
         
     | 
| 
       532 
608 
     | 
    
         
             
                end
         
     | 
| 
       533 
609 
     | 
    
         | 
| 
       534 
     | 
    
         
            -
                it "adds build file to a file reference that already  
     | 
| 
      
 610 
     | 
    
         
            +
                it "adds build file to a file reference that already exists" do
         
     | 
| 
       535 
611 
     | 
    
         
             
                  base_project.main_group.new_reference("bar")
         
     | 
| 
       536 
     | 
    
         
            -
             
     | 
| 
       537 
612 
     | 
    
         
             
                  base_project.main_group.new_reference("bar")
         
     | 
| 
       538 
     | 
    
         
            -
             
     | 
| 
       539 
613 
     | 
    
         
             
                  base_project.save
         
     | 
| 
       540 
614 
     | 
    
         | 
| 
       541 
615 
     | 
    
         
             
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
         @@ -549,17 +623,14 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       549 
623 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       550 
624 
     | 
    
         | 
| 
       551 
625 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       552 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       553 
626 
     | 
    
         | 
| 
       554 
627 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       555 
628 
     | 
    
         
             
                end
         
     | 
| 
       556 
629 
     | 
    
         | 
| 
       557 
630 
     | 
    
         
             
                it "adds file reference to build file" do
         
     | 
| 
       558 
631 
     | 
    
         
             
                  file_reference = base_project.main_group.new_reference("bar")
         
     | 
| 
       559 
     | 
    
         
            -
             
     | 
| 
       560 
632 
     | 
    
         
             
                  build_file = base_project.targets[0].frameworks_build_phase.add_file_reference(file_reference)
         
     | 
| 
       561 
633 
     | 
    
         
             
                  build_file.file_ref = nil
         
     | 
| 
       562 
     | 
    
         
            -
             
     | 
| 
       563 
634 
     | 
    
         
             
                  base_project.save
         
     | 
| 
       564 
635 
     | 
    
         | 
| 
       565 
636 
     | 
    
         
             
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
         @@ -570,7 +641,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       570 
641 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       571 
642 
     | 
    
         | 
| 
       572 
643 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       573 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       574 
644 
     | 
    
         | 
| 
       575 
645 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project, ignore_keys: ["containerPortal"])
         
     | 
| 
       576 
646 
     | 
    
         
             
                end
         
     | 
| 
         @@ -580,7 +650,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       580 
650 
     | 
    
         
             
                  base_project.save
         
     | 
| 
       581 
651 
     | 
    
         | 
| 
       582 
652 
     | 
    
         
             
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       583 
     | 
    
         
            -
             
     | 
| 
       584 
653 
     | 
    
         
             
                  file_reference = theirs_project.main_group.files.find { |file| file.display_name == "bar" }
         
     | 
| 
       585 
654 
     | 
    
         
             
                  build_file =
         
     | 
| 
       586 
655 
     | 
    
         
             
                    theirs_project.targets[0].frameworks_build_phase.add_file_reference(file_reference)
         
     | 
| 
         @@ -590,7 +659,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       590 
659 
     | 
    
         | 
| 
       591 
660 
     | 
    
         
             
                  other_project = create_copy_of_project(base_project.path, "other")
         
     | 
| 
       592 
661 
     | 
    
         
             
                  described_class.apply_change_to_project(other_project, changes_to_apply)
         
     | 
| 
       593 
     | 
    
         
            -
                  other_project.save
         
     | 
| 
       594 
662 
     | 
    
         | 
| 
       595 
663 
     | 
    
         
             
                  expect(other_project).to be_equivalent_to_project(base_project)
         
     | 
| 
       596 
664 
     | 
    
         
             
                end
         
     | 
| 
         @@ -616,7 +684,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       616 
684 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       617 
685 
     | 
    
         | 
| 
       618 
686 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       619 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       620 
687 
     | 
    
         | 
| 
       621 
688 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project, ignore_keys: ["containerPortal"])
         
     | 
| 
       622 
689 
     | 
    
         
             
                end
         
     | 
| 
         @@ -632,7 +699,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       632 
699 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       633 
700 
     | 
    
         | 
| 
       634 
701 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       635 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       636 
702 
     | 
    
         | 
| 
       637 
703 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       638 
704 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -641,7 +707,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       641 
707 
     | 
    
         
             
                    base_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       642 
708 
     | 
    
         
             
                      configuration.build_settings = {}
         
     | 
| 
       643 
709 
     | 
    
         
             
                    end
         
     | 
| 
       644 
     | 
    
         
            -
             
     | 
| 
       645 
710 
     | 
    
         
             
                    theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       646 
711 
     | 
    
         | 
| 
       647 
712 
     | 
    
         
             
                    theirs_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
         @@ -654,7 +719,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       654 
719 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       655 
720 
     | 
    
         | 
| 
       656 
721 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       657 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       658 
722 
     | 
    
         | 
| 
       659 
723 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       660 
724 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -672,7 +736,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       672 
736 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       673 
737 
     | 
    
         | 
| 
       674 
738 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       675 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       676 
739 
     | 
    
         | 
| 
       677 
740 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       678 
741 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -696,7 +759,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       696 
759 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       697 
760 
     | 
    
         | 
| 
       698 
761 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       699 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       700 
762 
     | 
    
         | 
| 
       701 
763 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       702 
764 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -713,10 +775,8 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       713 
775 
     | 
    
         
             
                    ours_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       714 
776 
     | 
    
         
             
                      configuration.build_settings["HEADER_SEARCH_PATHS"] = "baz"
         
     | 
| 
       715 
777 
     | 
    
         
             
                    end
         
     | 
| 
       716 
     | 
    
         
            -
                    ours_project.save
         
     | 
| 
       717 
778 
     | 
    
         | 
| 
       718 
779 
     | 
    
         
             
                    described_class.apply_change_to_project(ours_project, changes_to_apply)
         
     | 
| 
       719 
     | 
    
         
            -
                    ours_project.save
         
     | 
| 
       720 
780 
     | 
    
         | 
| 
       721 
781 
     | 
    
         
             
                    expected_project = create_copy_of_project(base_project.path, "expected")
         
     | 
| 
       722 
782 
     | 
    
         
             
                    expected_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
         @@ -737,10 +797,8 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       737 
797 
     | 
    
         
             
                    ours_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       738 
798 
     | 
    
         
             
                      configuration.build_settings["HEADER_SEARCH_PATHS"] = %w[bar foo]
         
     | 
| 
       739 
799 
     | 
    
         
             
                    end
         
     | 
| 
       740 
     | 
    
         
            -
                    ours_project.save
         
     | 
| 
       741 
800 
     | 
    
         | 
| 
       742 
801 
     | 
    
         
             
                    described_class.apply_change_to_project(ours_project, changes_to_apply)
         
     | 
| 
       743 
     | 
    
         
            -
                    ours_project.save
         
     | 
| 
       744 
802 
     | 
    
         | 
| 
       745 
803 
     | 
    
         
             
                    expected_project = create_copy_of_project(base_project.path, "expected")
         
     | 
| 
       746 
804 
     | 
    
         
             
                    expected_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
         @@ -756,10 +814,9 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       756 
814 
     | 
    
         
             
                        "$(SRCROOT)/../Bar"
         
     | 
| 
       757 
815 
     | 
    
         
             
                      ]
         
     | 
| 
       758 
816 
     | 
    
         
             
                    end
         
     | 
| 
       759 
     | 
    
         
            -
             
     | 
| 
       760 
817 
     | 
    
         
             
                    base_project.save
         
     | 
| 
       761 
     | 
    
         
            -
                    theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       762 
818 
     | 
    
         | 
| 
      
 819 
     | 
    
         
            +
                    theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       763 
820 
     | 
    
         
             
                    theirs_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       764 
821 
     | 
    
         
             
                      configuration.build_settings["HEADER_SEARCH_PATHS"] = nil
         
     | 
| 
       765 
822 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -767,7 +824,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       767 
824 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       768 
825 
     | 
    
         | 
| 
       769 
826 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       770 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       771 
827 
     | 
    
         | 
| 
       772 
828 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       773 
829 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -776,10 +832,9 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       776 
832 
     | 
    
         
             
                    base_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       777 
833 
     | 
    
         
             
                      configuration.build_settings["HEADER_SEARCH_PATHS"] = "bar"
         
     | 
| 
       778 
834 
     | 
    
         
             
                    end
         
     | 
| 
       779 
     | 
    
         
            -
             
     | 
| 
       780 
835 
     | 
    
         
             
                    base_project.save
         
     | 
| 
       781 
     | 
    
         
            -
                    theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       782 
836 
     | 
    
         | 
| 
      
 837 
     | 
    
         
            +
                    theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       783 
838 
     | 
    
         
             
                    theirs_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       784 
839 
     | 
    
         
             
                      configuration.build_settings =
         
     | 
| 
       785 
840 
     | 
    
         
             
                        configuration.build_settings.reject { |key, _| key == "HEADER_SEARCH_PATHS" }
         
     | 
| 
         @@ -788,7 +843,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       788 
843 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       789 
844 
     | 
    
         | 
| 
       790 
845 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       791 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       792 
846 
     | 
    
         | 
| 
       793 
847 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       794 
848 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -797,8 +851,8 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       797 
851 
     | 
    
         
             
                    base_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       798 
852 
     | 
    
         
             
                      configuration.build_settings["HEADER_SEARCH_PATHS"] = "bar"
         
     | 
| 
       799 
853 
     | 
    
         
             
                    end
         
     | 
| 
       800 
     | 
    
         
            -
             
     | 
| 
       801 
854 
     | 
    
         
             
                    base_project.save
         
     | 
| 
      
 855 
     | 
    
         
            +
             
     | 
| 
       802 
856 
     | 
    
         
             
                    theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       803 
857 
     | 
    
         
             
                    theirs_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       804 
858 
     | 
    
         
             
                      configuration.build_settings = nil
         
     | 
| 
         @@ -807,7 +861,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       807 
861 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       808 
862 
     | 
    
         | 
| 
       809 
863 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       810 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       811 
864 
     | 
    
         | 
| 
       812 
865 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       813 
866 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -817,8 +870,8 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       817 
870 
     | 
    
         
             
                      configuration.build_settings["HEADER_SEARCH_PATHS"] = "bar"
         
     | 
| 
       818 
871 
     | 
    
         
             
                      configuration.build_settings["foo"] = "baz"
         
     | 
| 
       819 
872 
     | 
    
         
             
                    end
         
     | 
| 
       820 
     | 
    
         
            -
             
     | 
| 
       821 
873 
     | 
    
         
             
                    base_project.save
         
     | 
| 
      
 874 
     | 
    
         
            +
             
     | 
| 
       822 
875 
     | 
    
         
             
                    theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       823 
876 
     | 
    
         
             
                    theirs_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       824 
877 
     | 
    
         
             
                      configuration.build_settings = nil
         
     | 
| 
         @@ -832,7 +885,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       832 
885 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       833 
886 
     | 
    
         | 
| 
       834 
887 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       835 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       836 
888 
     | 
    
         | 
| 
       837 
889 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       838 
890 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -853,7 +905,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       853 
905 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, before_theirs_project)
         
     | 
| 
       854 
906 
     | 
    
         | 
| 
       855 
907 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       856 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       857 
908 
     | 
    
         | 
| 
       858 
909 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       859 
910 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -874,7 +925,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       874 
925 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, before_theirs_project)
         
     | 
| 
       875 
926 
     | 
    
         | 
| 
       876 
927 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       877 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       878 
928 
     | 
    
         | 
| 
       879 
929 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       880 
930 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -935,10 +985,9 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       935 
985 
     | 
    
         
             
                    base_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       936 
986 
     | 
    
         
             
                      configuration.build_settings["HEADER_SEARCH_PATHS"] = %w[bar foo]
         
     | 
| 
       937 
987 
     | 
    
         
             
                    end
         
     | 
| 
       938 
     | 
    
         
            -
             
     | 
| 
       939 
988 
     | 
    
         
             
                    base_project.save
         
     | 
| 
       940 
     | 
    
         
            -
                    theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       941 
989 
     | 
    
         | 
| 
      
 990 
     | 
    
         
            +
                    theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       942 
991 
     | 
    
         
             
                    theirs_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       943 
992 
     | 
    
         
             
                      configuration.build_settings["HEADER_SEARCH_PATHS"] = "baz"
         
     | 
| 
       944 
993 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -946,7 +995,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       946 
995 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       947 
996 
     | 
    
         | 
| 
       948 
997 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       949 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       950 
998 
     | 
    
         | 
| 
       951 
999 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       952 
1000 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -955,10 +1003,9 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       955 
1003 
     | 
    
         
             
                    base_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       956 
1004 
     | 
    
         
             
                      configuration.build_settings["HEADER_SEARCH_PATHS"] = "bar"
         
     | 
| 
       957 
1005 
     | 
    
         
             
                    end
         
     | 
| 
       958 
     | 
    
         
            -
             
     | 
| 
       959 
1006 
     | 
    
         
             
                    base_project.save
         
     | 
| 
       960 
     | 
    
         
            -
                    theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       961 
1007 
     | 
    
         | 
| 
      
 1008 
     | 
    
         
            +
                    theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       962 
1009 
     | 
    
         
             
                    theirs_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       963 
1010 
     | 
    
         
             
                      configuration.build_settings["HEADER_SEARCH_PATHS"] = %w[baz foo]
         
     | 
| 
       964 
1011 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -966,7 +1013,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       966 
1013 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       967 
1014 
     | 
    
         | 
| 
       968 
1015 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       969 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       970 
1016 
     | 
    
         | 
| 
       971 
1017 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       972 
1018 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -993,7 +1039,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       993 
1039 
     | 
    
         
             
                    changes_to_apply = get_diff(theirs_project, before_theirs_project)
         
     | 
| 
       994 
1040 
     | 
    
         | 
| 
       995 
1041 
     | 
    
         
             
                    described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       996 
     | 
    
         
            -
                    base_project.save
         
     | 
| 
       997 
1042 
     | 
    
         | 
| 
       998 
1043 
     | 
    
         
             
                    expect(base_project).to be_equivalent_to_project(expected_project)
         
     | 
| 
       999 
1044 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -1057,23 +1102,32 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1057 
1102 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1058 
1103 
     | 
    
         | 
| 
       1059 
1104 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1060 
     | 
    
         
            -
             
     | 
| 
      
 1105 
     | 
    
         
            +
             
     | 
| 
      
 1106 
     | 
    
         
            +
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
      
 1107 
     | 
    
         
            +
                end
         
     | 
| 
      
 1108 
     | 
    
         
            +
             
     | 
| 
      
 1109 
     | 
    
         
            +
                it "adds build phase with a simple attribute value that has non nil default" do
         
     | 
| 
      
 1110 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1111 
     | 
    
         
            +
                  theirs_project.targets[0].new_shell_script_build_phase("bar")
         
     | 
| 
      
 1112 
     | 
    
         
            +
                  theirs_project.targets[0].build_phases.last.shell_script = "Other value"
         
     | 
| 
      
 1113 
     | 
    
         
            +
             
     | 
| 
      
 1114 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1115 
     | 
    
         
            +
             
     | 
| 
      
 1116 
     | 
    
         
            +
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1061 
1117 
     | 
    
         | 
| 
       1062 
1118 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1063 
1119 
     | 
    
         
             
                end
         
     | 
| 
       1064 
1120 
     | 
    
         | 
| 
       1065 
1121 
     | 
    
         
             
                it "removes build phase" do
         
     | 
| 
       1066 
1122 
     | 
    
         
             
                  base_project.targets[0].new_shell_script_build_phase("bar")
         
     | 
| 
       1067 
     | 
    
         
            -
             
     | 
| 
       1068 
1123 
     | 
    
         
             
                  base_project.save
         
     | 
| 
       1069 
     | 
    
         
            -
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1070 
1124 
     | 
    
         | 
| 
      
 1125 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1071 
1126 
     | 
    
         
             
                  theirs_project.targets[0].shell_script_build_phases[0].remove_from_project
         
     | 
| 
       1072 
1127 
     | 
    
         | 
| 
       1073 
1128 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1074 
1129 
     | 
    
         | 
| 
       1075 
1130 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1076 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       1077 
1131 
     | 
    
         | 
| 
       1078 
1132 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1079 
1133 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1083,33 +1137,29 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1083 
1137 
     | 
    
         
             
                  file = variant_group.new_reference("Base")
         
     | 
| 
       1084 
1138 
     | 
    
         
             
                  file.last_known_file_type = "text.plist.strings"
         
     | 
| 
       1085 
1139 
     | 
    
         
             
                  target.resources_build_phase.add_file_reference(variant_group)
         
     | 
| 
       1086 
     | 
    
         
            -
             
     | 
| 
       1087 
1140 
     | 
    
         
             
                  base_project.save
         
     | 
| 
       1088 
     | 
    
         
            -
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1089 
1141 
     | 
    
         | 
| 
      
 1142 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1090 
1143 
     | 
    
         
             
                  theirs_variant_group = theirs_project.main_group.find_subpath("foo.strings")
         
     | 
| 
       1091 
1144 
     | 
    
         
             
                  theirs_variant_group.new_reference("en")
         
     | 
| 
       1092 
1145 
     | 
    
         | 
| 
       1093 
1146 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1094 
1147 
     | 
    
         | 
| 
       1095 
1148 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1096 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       1097 
1149 
     | 
    
         | 
| 
       1098 
1150 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1099 
1151 
     | 
    
         
             
                end
         
     | 
| 
       1100 
1152 
     | 
    
         | 
| 
       1101 
1153 
     | 
    
         
             
                it "adds target dependency" do
         
     | 
| 
       1102 
1154 
     | 
    
         
             
                  base_project.new_target("com.apple.product-type.library.static", "bar", :ios)
         
     | 
| 
       1103 
     | 
    
         
            -
             
     | 
| 
       1104 
1155 
     | 
    
         
             
                  base_project.save
         
     | 
| 
       1105 
     | 
    
         
            -
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1106 
1156 
     | 
    
         | 
| 
      
 1157 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1107 
1158 
     | 
    
         
             
                  theirs_project.targets[1].add_dependency(theirs_project.targets[0])
         
     | 
| 
       1108 
1159 
     | 
    
         | 
| 
       1109 
1160 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1110 
1161 
     | 
    
         | 
| 
       1111 
1162 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1112 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       1113 
1163 
     | 
    
         | 
| 
       1114 
1164 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1115 
1165 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1118,10 +1168,9 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1118 
1168 
     | 
    
         
             
                  base_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       1119 
1169 
     | 
    
         
             
                    configuration.build_settings["GCC_PREFIX_HEADER"] = "foo"
         
     | 
| 
       1120 
1170 
     | 
    
         
             
                  end
         
     | 
| 
       1121 
     | 
    
         
            -
             
     | 
| 
       1122 
1171 
     | 
    
         
             
                  base_project.save
         
     | 
| 
       1123 
     | 
    
         
            -
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1124 
1172 
     | 
    
         | 
| 
      
 1173 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1125 
1174 
     | 
    
         
             
                  theirs_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       1126 
1175 
     | 
    
         
             
                    configuration.build_settings["GCC_PREFIX_HEADER"] = "bar"
         
     | 
| 
       1127 
1176 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -1129,16 +1178,13 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1129 
1178 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1130 
1179 
     | 
    
         | 
| 
       1131 
1180 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1132 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       1133 
1181 
     | 
    
         | 
| 
       1134 
1182 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1135 
1183 
     | 
    
         
             
                end
         
     | 
| 
       1136 
1184 
     | 
    
         | 
| 
       1137 
1185 
     | 
    
         
             
                it "adds build settings to new target" do
         
     | 
| 
       1138 
1186 
     | 
    
         
             
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1139 
     | 
    
         
            -
             
     | 
| 
       1140 
1187 
     | 
    
         
             
                  theirs_project.new_target("com.apple.product-type.library.static", "bar", :ios)
         
     | 
| 
       1141 
     | 
    
         
            -
             
     | 
| 
       1142 
1188 
     | 
    
         
             
                  theirs_project.targets[1].build_configurations.each do |configuration|
         
     | 
| 
       1143 
1189 
     | 
    
         
             
                    configuration.build_settings["GCC_PREFIX_HEADER"] = "baz"
         
     | 
| 
       1144 
1190 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -1146,7 +1192,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1146 
1192 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1147 
1193 
     | 
    
         | 
| 
       1148 
1194 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1149 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       1150 
1195 
     | 
    
         | 
| 
       1151 
1196 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1152 
1197 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1155,7 +1200,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1155 
1200 
     | 
    
         
             
                  base_project.main_group.new_reference("baz")
         
     | 
| 
       1156 
1201 
     | 
    
         | 
| 
       1157 
1202 
     | 
    
         
             
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1158 
     | 
    
         
            -
             
     | 
| 
       1159 
1203 
     | 
    
         
             
                  configuration_reference = theirs_project.main_group.find_subpath("baz")
         
     | 
| 
       1160 
1204 
     | 
    
         
             
                  theirs_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
       1161 
1205 
     | 
    
         
             
                    configuration.base_configuration_reference = configuration_reference
         
     | 
| 
         @@ -1164,35 +1208,29 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1164 
1208 
     | 
    
         
             
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1165 
1209 
     | 
    
         | 
| 
       1166 
1210 
     | 
    
         
             
                  described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1167 
     | 
    
         
            -
                  base_project.save
         
     | 
| 
       1168 
1211 
     | 
    
         | 
| 
       1169 
1212 
     | 
    
         
             
                  expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1170 
1213 
     | 
    
         
             
                end
         
     | 
| 
       1171 
1214 
     | 
    
         
             
              end
         
     | 
| 
       1172 
1215 
     | 
    
         | 
| 
       1173 
1216 
     | 
    
         
             
              it "adds known regions" do
         
     | 
| 
       1174 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       1175 
1217 
     | 
    
         
             
                theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1176 
     | 
    
         
            -
             
     | 
| 
       1177 
1218 
     | 
    
         
             
                theirs_project.root_object.known_regions += ["fr"]
         
     | 
| 
       1178 
1219 
     | 
    
         | 
| 
       1179 
1220 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1180 
1221 
     | 
    
         | 
| 
       1181 
1222 
     | 
    
         
             
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1182 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       1183 
1223 
     | 
    
         | 
| 
       1184 
1224 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1185 
1225 
     | 
    
         
             
              end
         
     | 
| 
       1186 
1226 
     | 
    
         | 
| 
       1187 
1227 
     | 
    
         
             
              it "removes known regions" do
         
     | 
| 
       1188 
1228 
     | 
    
         
             
                theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1189 
     | 
    
         
            -
             
     | 
| 
       1190 
1229 
     | 
    
         
             
                theirs_project.root_object.known_regions = nil
         
     | 
| 
       1191 
1230 
     | 
    
         | 
| 
       1192 
1231 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1193 
1232 
     | 
    
         | 
| 
       1194 
1233 
     | 
    
         
             
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1195 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       1196 
1234 
     | 
    
         | 
| 
       1197 
1235 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1198 
1236 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1206,7 +1244,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1206 
1244 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1207 
1245 
     | 
    
         | 
| 
       1208 
1246 
     | 
    
         
             
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1209 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       1210 
1247 
     | 
    
         | 
| 
       1211 
1248 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1212 
1249 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1216,14 +1253,12 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1216 
1253 
     | 
    
         
             
                base_project.save
         
     | 
| 
       1217 
1254 
     | 
    
         | 
| 
       1218 
1255 
     | 
    
         
             
                theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1219 
     | 
    
         
            -
             
     | 
| 
       1220 
1256 
     | 
    
         
             
                theirs_project.root_object.attributes["TargetAttributes"] =
         
     | 
| 
       1221 
1257 
     | 
    
         
             
                  {"foo" => {"LastSwiftMigration" => "1140"}}
         
     | 
| 
       1222 
1258 
     | 
    
         | 
| 
       1223 
1259 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1224 
1260 
     | 
    
         | 
| 
       1225 
1261 
     | 
    
         
             
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1226 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       1227 
1262 
     | 
    
         | 
| 
       1228 
1263 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1229 
1264 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1233,14 +1268,12 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1233 
1268 
     | 
    
         
             
                base_project.save
         
     | 
| 
       1234 
1269 
     | 
    
         | 
| 
       1235 
1270 
     | 
    
         
             
                theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1236 
     | 
    
         
            -
             
     | 
| 
       1237 
1271 
     | 
    
         
             
                theirs_project.root_object.attributes["TargetAttributes"] =
         
     | 
| 
       1238 
1272 
     | 
    
         
             
                  {"foo" => {"LastSwiftMigration" => "1140"}}
         
     | 
| 
       1239 
1273 
     | 
    
         | 
| 
       1240 
1274 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1241 
1275 
     | 
    
         | 
| 
       1242 
1276 
     | 
    
         
             
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1243 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       1244 
1277 
     | 
    
         | 
| 
       1245 
1278 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1246 
1279 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1251,13 +1284,11 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1251 
1284 
     | 
    
         
             
                base_project.save
         
     | 
| 
       1252 
1285 
     | 
    
         | 
| 
       1253 
1286 
     | 
    
         
             
                theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
       1254 
     | 
    
         
            -
             
     | 
| 
       1255 
1287 
     | 
    
         
             
                theirs_project.root_object.attributes["TargetAttributes"]["foo"] = {}
         
     | 
| 
       1256 
1288 
     | 
    
         | 
| 
       1257 
1289 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1258 
1290 
     | 
    
         | 
| 
       1259 
1291 
     | 
    
         
             
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1260 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       1261 
1292 
     | 
    
         | 
| 
       1262 
1293 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1263 
1294 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1276,7 +1307,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1276 
1307 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1277 
1308 
     | 
    
         | 
| 
       1278 
1309 
     | 
    
         
             
                described_class.apply_change_to_project(ours_project, changes_to_apply)
         
     | 
| 
       1279 
     | 
    
         
            -
                ours_project.save
         
     | 
| 
       1280 
1310 
     | 
    
         | 
| 
       1281 
1311 
     | 
    
         
             
                expect(ours_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1282 
1312 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1294,7 +1324,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1294 
1324 
     | 
    
         
             
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
       1295 
1325 
     | 
    
         | 
| 
       1296 
1326 
     | 
    
         
             
                described_class.apply_change_to_project(ours_project, changes_to_apply)
         
     | 
| 
       1297 
     | 
    
         
            -
                ours_project.save
         
     | 
| 
       1298 
1327 
     | 
    
         | 
| 
       1299 
1328 
     | 
    
         
             
                expect(ours_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1300 
1329 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1322,7 +1351,6 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1322 
1351 
     | 
    
         
             
                changes_to_apply = get_diff(ours_project, theirs_project)
         
     | 
| 
       1323 
1352 
     | 
    
         | 
| 
       1324 
1353 
     | 
    
         
             
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
       1325 
     | 
    
         
            -
                base_project.save
         
     | 
| 
       1326 
1354 
     | 
    
         | 
| 
       1327 
1355 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(ours_project, ignore_keys: ["containerPortal"])
         
     | 
| 
       1328 
1356 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1346,6 +1374,213 @@ describe Kintsugi, :apply_change_to_project do 
     | 
|
| 
       1346 
1374 
     | 
    
         
             
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
       1347 
1375 
     | 
    
         
             
              end
         
     | 
| 
       1348 
1376 
     | 
    
         | 
| 
      
 1377 
     | 
    
         
            +
              it "adds build configuration list" do
         
     | 
| 
      
 1378 
     | 
    
         
            +
                base_project.root_object.build_configuration_list = nil
         
     | 
| 
      
 1379 
     | 
    
         
            +
                base_project.save
         
     | 
| 
      
 1380 
     | 
    
         
            +
             
     | 
| 
      
 1381 
     | 
    
         
            +
                theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1382 
     | 
    
         
            +
                theirs_project.root_object.build_configuration_list =
         
     | 
| 
      
 1383 
     | 
    
         
            +
                  theirs_project.new(Xcodeproj::Project::XCConfigurationList)
         
     | 
| 
      
 1384 
     | 
    
         
            +
             
     | 
| 
      
 1385 
     | 
    
         
            +
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1386 
     | 
    
         
            +
             
     | 
| 
      
 1387 
     | 
    
         
            +
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
      
 1388 
     | 
    
         
            +
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
      
 1389 
     | 
    
         
            +
              end
         
     | 
| 
      
 1390 
     | 
    
         
            +
             
     | 
| 
      
 1391 
     | 
    
         
            +
              it "removes build configuration list" do
         
     | 
| 
      
 1392 
     | 
    
         
            +
                theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1393 
     | 
    
         
            +
                theirs_project.build_configuration_list.remove_from_project
         
     | 
| 
      
 1394 
     | 
    
         
            +
             
     | 
| 
      
 1395 
     | 
    
         
            +
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1396 
     | 
    
         
            +
             
     | 
| 
      
 1397 
     | 
    
         
            +
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
      
 1398 
     | 
    
         
            +
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
      
 1399 
     | 
    
         
            +
              end
         
     | 
| 
      
 1400 
     | 
    
         
            +
             
     | 
| 
      
 1401 
     | 
    
         
            +
              it "adds group to product group" do
         
     | 
| 
      
 1402 
     | 
    
         
            +
                base_project_path = make_temp_directory("base", ".xcodeproj")
         
     | 
| 
      
 1403 
     | 
    
         
            +
                base_project = Xcodeproj::Project.new(base_project_path)
         
     | 
| 
      
 1404 
     | 
    
         
            +
                base_project.new_target("com.apple.product-type.library.static", "foo", :ios)
         
     | 
| 
      
 1405 
     | 
    
         
            +
             
     | 
| 
      
 1406 
     | 
    
         
            +
                base_project.save
         
     | 
| 
      
 1407 
     | 
    
         
            +
                theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1408 
     | 
    
         
            +
             
     | 
| 
      
 1409 
     | 
    
         
            +
                theirs_project.root_object.product_ref_group.new_group("foo")
         
     | 
| 
      
 1410 
     | 
    
         
            +
             
     | 
| 
      
 1411 
     | 
    
         
            +
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1412 
     | 
    
         
            +
             
     | 
| 
      
 1413 
     | 
    
         
            +
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
      
 1414 
     | 
    
         
            +
             
     | 
| 
      
 1415 
     | 
    
         
            +
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
      
 1416 
     | 
    
         
            +
              end
         
     | 
| 
      
 1417 
     | 
    
         
            +
             
     | 
| 
      
 1418 
     | 
    
         
            +
              it "adds localization files to product group" do
         
     | 
| 
      
 1419 
     | 
    
         
            +
                base_project_path = make_temp_directory("base", ".xcodeproj")
         
     | 
| 
      
 1420 
     | 
    
         
            +
                base_project = Xcodeproj::Project.new(base_project_path)
         
     | 
| 
      
 1421 
     | 
    
         
            +
                base_project.new_target("com.apple.product-type.library.static", "foo", :ios)
         
     | 
| 
      
 1422 
     | 
    
         
            +
             
     | 
| 
      
 1423 
     | 
    
         
            +
                base_project.save
         
     | 
| 
      
 1424 
     | 
    
         
            +
                theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1425 
     | 
    
         
            +
             
     | 
| 
      
 1426 
     | 
    
         
            +
                variant_group = theirs_project.root_object.product_ref_group.new_variant_group("foo.strings")
         
     | 
| 
      
 1427 
     | 
    
         
            +
                variant_group.new_reference("Base").last_known_file_type = "text.plist.strings"
         
     | 
| 
      
 1428 
     | 
    
         
            +
             
     | 
| 
      
 1429 
     | 
    
         
            +
                changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1430 
     | 
    
         
            +
             
     | 
| 
      
 1431 
     | 
    
         
            +
                described_class.apply_change_to_project(base_project, changes_to_apply)
         
     | 
| 
      
 1432 
     | 
    
         
            +
             
     | 
| 
      
 1433 
     | 
    
         
            +
                expect(base_project).to be_equivalent_to_project(theirs_project)
         
     | 
| 
      
 1434 
     | 
    
         
            +
              end
         
     | 
| 
      
 1435 
     | 
    
         
            +
             
     | 
| 
      
 1436 
     | 
    
         
            +
              describe "avoiding duplicate references to the same component" do
         
     | 
| 
      
 1437 
     | 
    
         
            +
                it "avoids adding file reference that already exists" do
         
     | 
| 
      
 1438 
     | 
    
         
            +
                  base_project.main_group.new_reference("bar")
         
     | 
| 
      
 1439 
     | 
    
         
            +
                  base_project.save
         
     | 
| 
      
 1440 
     | 
    
         
            +
             
     | 
| 
      
 1441 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1442 
     | 
    
         
            +
                  theirs_project.main_group.new_reference("bar")
         
     | 
| 
      
 1443 
     | 
    
         
            +
             
     | 
| 
      
 1444 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1445 
     | 
    
         
            +
                  other_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1446 
     | 
    
         
            +
                  described_class.apply_change_to_project(other_project, changes_to_apply)
         
     | 
| 
      
 1447 
     | 
    
         
            +
             
     | 
| 
      
 1448 
     | 
    
         
            +
                  expect(other_project).to be_equivalent_to_project(base_project)
         
     | 
| 
      
 1449 
     | 
    
         
            +
                end
         
     | 
| 
      
 1450 
     | 
    
         
            +
             
     | 
| 
      
 1451 
     | 
    
         
            +
                it "avoids adding group that already exists" do
         
     | 
| 
      
 1452 
     | 
    
         
            +
                  base_project.main_group.new_group("bar")
         
     | 
| 
      
 1453 
     | 
    
         
            +
                  base_project.save
         
     | 
| 
      
 1454 
     | 
    
         
            +
             
     | 
| 
      
 1455 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1456 
     | 
    
         
            +
                  theirs_project.main_group.new_group("bar")
         
     | 
| 
      
 1457 
     | 
    
         
            +
             
     | 
| 
      
 1458 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1459 
     | 
    
         
            +
                  other_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1460 
     | 
    
         
            +
                  described_class.apply_change_to_project(other_project, changes_to_apply)
         
     | 
| 
      
 1461 
     | 
    
         
            +
             
     | 
| 
      
 1462 
     | 
    
         
            +
                  expect(other_project).to be_equivalent_to_project(base_project)
         
     | 
| 
      
 1463 
     | 
    
         
            +
                end
         
     | 
| 
      
 1464 
     | 
    
         
            +
             
     | 
| 
      
 1465 
     | 
    
         
            +
                it "avoids adding variant group that already exists" do
         
     | 
| 
      
 1466 
     | 
    
         
            +
                  base_project.main_group.new_variant_group("bar")
         
     | 
| 
      
 1467 
     | 
    
         
            +
                  base_project.save
         
     | 
| 
      
 1468 
     | 
    
         
            +
             
     | 
| 
      
 1469 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1470 
     | 
    
         
            +
                  theirs_project.main_group.new_variant_group("bar")
         
     | 
| 
      
 1471 
     | 
    
         
            +
             
     | 
| 
      
 1472 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1473 
     | 
    
         
            +
                  other_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1474 
     | 
    
         
            +
                  described_class.apply_change_to_project(other_project, changes_to_apply)
         
     | 
| 
      
 1475 
     | 
    
         
            +
             
     | 
| 
      
 1476 
     | 
    
         
            +
                  expect(other_project).to be_equivalent_to_project(base_project)
         
     | 
| 
      
 1477 
     | 
    
         
            +
                end
         
     | 
| 
      
 1478 
     | 
    
         
            +
             
     | 
| 
      
 1479 
     | 
    
         
            +
                it "avoids adding subproject that already exists" do
         
     | 
| 
      
 1480 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1481 
     | 
    
         
            +
             
     | 
| 
      
 1482 
     | 
    
         
            +
                  subproject = add_new_subproject_to_project(theirs_project, "foo", "foo")
         
     | 
| 
      
 1483 
     | 
    
         
            +
             
     | 
| 
      
 1484 
     | 
    
         
            +
                  ours_project = create_copy_of_project(base_project.path, "ours")
         
     | 
| 
      
 1485 
     | 
    
         
            +
                  add_existing_subproject_to_project(ours_project, subproject, "foo")
         
     | 
| 
      
 1486 
     | 
    
         
            +
             
     | 
| 
      
 1487 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1488 
     | 
    
         
            +
             
     | 
| 
      
 1489 
     | 
    
         
            +
                  described_class.apply_change_to_project(ours_project, changes_to_apply)
         
     | 
| 
      
 1490 
     | 
    
         
            +
             
     | 
| 
      
 1491 
     | 
    
         
            +
                  expect(ours_project.root_object.project_references.count).to equal(1)
         
     | 
| 
      
 1492 
     | 
    
         
            +
                end
         
     | 
| 
      
 1493 
     | 
    
         
            +
             
     | 
| 
      
 1494 
     | 
    
         
            +
                it "avoids adding build file that already exists" do
         
     | 
| 
      
 1495 
     | 
    
         
            +
                  file_reference = base_project.main_group.new_reference("bar")
         
     | 
| 
      
 1496 
     | 
    
         
            +
                  target = base_project.new_target("com.apple.product-type.library.static", "foo", :ios)
         
     | 
| 
      
 1497 
     | 
    
         
            +
                  target.frameworks_build_phase.add_file_reference(file_reference)
         
     | 
| 
      
 1498 
     | 
    
         
            +
                  base_project.save
         
     | 
| 
      
 1499 
     | 
    
         
            +
             
     | 
| 
      
 1500 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1501 
     | 
    
         
            +
                  file_reference = theirs_project.main_group.new_reference("bar")
         
     | 
| 
      
 1502 
     | 
    
         
            +
                  theirs_project.targets[0].frameworks_build_phase.add_file_reference(file_reference)
         
     | 
| 
      
 1503 
     | 
    
         
            +
             
     | 
| 
      
 1504 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1505 
     | 
    
         
            +
                  other_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1506 
     | 
    
         
            +
                  described_class.apply_change_to_project(other_project, changes_to_apply)
         
     | 
| 
      
 1507 
     | 
    
         
            +
             
     | 
| 
      
 1508 
     | 
    
         
            +
                  expect(other_project).to be_equivalent_to_project(base_project)
         
     | 
| 
      
 1509 
     | 
    
         
            +
                end
         
     | 
| 
      
 1510 
     | 
    
         
            +
             
     | 
| 
      
 1511 
     | 
    
         
            +
                it "avoids adding reference proxy that already exists" do
         
     | 
| 
      
 1512 
     | 
    
         
            +
                  framework_filename = "baz"
         
     | 
| 
      
 1513 
     | 
    
         
            +
                  subproject = add_new_subproject_to_project(base_project, "subproj", framework_filename)
         
     | 
| 
      
 1514 
     | 
    
         
            +
                  base_project.save
         
     | 
| 
      
 1515 
     | 
    
         
            +
             
     | 
| 
      
 1516 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1517 
     | 
    
         
            +
             
     | 
| 
      
 1518 
     | 
    
         
            +
                  theirs_project.root_object.project_references[0][:product_group] <<
         
     | 
| 
      
 1519 
     | 
    
         
            +
                    create_reference_proxy_from_product_reference(theirs_project,
         
     | 
| 
      
 1520 
     | 
    
         
            +
                                                                  theirs_project.root_object.project_references[0][:project_ref],
         
     | 
| 
      
 1521 
     | 
    
         
            +
                                                                  subproject.products_group.files[-1])
         
     | 
| 
      
 1522 
     | 
    
         
            +
             
     | 
| 
      
 1523 
     | 
    
         
            +
             
     | 
| 
      
 1524 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1525 
     | 
    
         
            +
             
     | 
| 
      
 1526 
     | 
    
         
            +
                  other_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1527 
     | 
    
         
            +
                  described_class.apply_change_to_project(other_project, changes_to_apply)
         
     | 
| 
      
 1528 
     | 
    
         
            +
             
     | 
| 
      
 1529 
     | 
    
         
            +
                  expect(other_project).to be_equivalent_to_project(base_project)
         
     | 
| 
      
 1530 
     | 
    
         
            +
                end
         
     | 
| 
      
 1531 
     | 
    
         
            +
             
     | 
| 
      
 1532 
     | 
    
         
            +
                it "keeps array if adding string value that already exists in array" do
         
     | 
| 
      
 1533 
     | 
    
         
            +
                  base_project.new_target("com.apple.product-type.library.static", "bar", :ios)
         
     | 
| 
      
 1534 
     | 
    
         
            +
                  base_project.save
         
     | 
| 
      
 1535 
     | 
    
         
            +
             
     | 
| 
      
 1536 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1537 
     | 
    
         
            +
                  theirs_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
      
 1538 
     | 
    
         
            +
                    configuration.build_settings["HEADER_SEARCH_PATHS"] = "bar"
         
     | 
| 
      
 1539 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1540 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1541 
     | 
    
         
            +
             
     | 
| 
      
 1542 
     | 
    
         
            +
                  ours_project = create_copy_of_project(base_project.path, "ours")
         
     | 
| 
      
 1543 
     | 
    
         
            +
                  ours_project.targets[0].build_configurations.each do |configuration|
         
     | 
| 
      
 1544 
     | 
    
         
            +
                    configuration.build_settings["HEADER_SEARCH_PATHS"] = %w[bar foo]
         
     | 
| 
      
 1545 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1546 
     | 
    
         
            +
                  ours_project.save
         
     | 
| 
      
 1547 
     | 
    
         
            +
             
     | 
| 
      
 1548 
     | 
    
         
            +
                  expected_project = create_copy_of_project(ours_project.path, "expected")
         
     | 
| 
      
 1549 
     | 
    
         
            +
             
     | 
| 
      
 1550 
     | 
    
         
            +
                  described_class.apply_change_to_project(ours_project, changes_to_apply)
         
     | 
| 
      
 1551 
     | 
    
         
            +
             
     | 
| 
      
 1552 
     | 
    
         
            +
                  expect(ours_project).to be_equivalent_to_project(expected_project)
         
     | 
| 
      
 1553 
     | 
    
         
            +
                end
         
     | 
| 
      
 1554 
     | 
    
         
            +
              end
         
     | 
| 
      
 1555 
     | 
    
         
            +
             
     | 
| 
      
 1556 
     | 
    
         
            +
              describe "allowing adding reference to the same component" do
         
     | 
| 
      
 1557 
     | 
    
         
            +
                before do
         
     | 
| 
      
 1558 
     | 
    
         
            +
                  Kintsugi::Settings.allow_duplicates = true
         
     | 
| 
      
 1559 
     | 
    
         
            +
                end
         
     | 
| 
      
 1560 
     | 
    
         
            +
             
     | 
| 
      
 1561 
     | 
    
         
            +
                after do
         
     | 
| 
      
 1562 
     | 
    
         
            +
                  Kintsugi::Settings.allow_duplicates = false
         
     | 
| 
      
 1563 
     | 
    
         
            +
                end
         
     | 
| 
      
 1564 
     | 
    
         
            +
             
     | 
| 
      
 1565 
     | 
    
         
            +
                it "adds subproject that already exists" do
         
     | 
| 
      
 1566 
     | 
    
         
            +
                  theirs_project = create_copy_of_project(base_project.path, "theirs")
         
     | 
| 
      
 1567 
     | 
    
         
            +
             
     | 
| 
      
 1568 
     | 
    
         
            +
                  subproject = add_new_subproject_to_project(theirs_project, "foo", "foo")
         
     | 
| 
      
 1569 
     | 
    
         
            +
             
     | 
| 
      
 1570 
     | 
    
         
            +
                  ours_project = create_copy_of_project(base_project.path, "ours")
         
     | 
| 
      
 1571 
     | 
    
         
            +
                  add_existing_subproject_to_project(ours_project, subproject, "foo")
         
     | 
| 
      
 1572 
     | 
    
         
            +
             
     | 
| 
      
 1573 
     | 
    
         
            +
                  changes_to_apply = get_diff(theirs_project, base_project)
         
     | 
| 
      
 1574 
     | 
    
         
            +
             
     | 
| 
      
 1575 
     | 
    
         
            +
                  described_class.apply_change_to_project(ours_project, changes_to_apply)
         
     | 
| 
      
 1576 
     | 
    
         
            +
             
     | 
| 
      
 1577 
     | 
    
         
            +
                  expect(ours_project.root_object.project_references[0][:project_ref].uuid)
         
     | 
| 
      
 1578 
     | 
    
         
            +
                    .not_to equal(ours_project.root_object.project_references[1][:project_ref].uuid)
         
     | 
| 
      
 1579 
     | 
    
         
            +
                  expect(ours_project.root_object.project_references[0][:project_ref].proxy_containers).not_to be_empty
         
     | 
| 
      
 1580 
     | 
    
         
            +
                  expect(ours_project.root_object.project_references[1][:project_ref].proxy_containers).not_to be_empty
         
     | 
| 
      
 1581 
     | 
    
         
            +
                end
         
     | 
| 
      
 1582 
     | 
    
         
            +
              end
         
     | 
| 
      
 1583 
     | 
    
         
            +
             
     | 
| 
       1349 
1584 
     | 
    
         
             
              def create_copy_of_project(project_path, new_project_prefix)
         
     | 
| 
       1350 
1585 
     | 
    
         
             
                copied_project_path = make_temp_directory(new_project_prefix, ".xcodeproj")
         
     | 
| 
       1351 
1586 
     | 
    
         
             
                FileUtils.cp(File.join(project_path, "project.pbxproj"), copied_project_path)
         
     |