zerg_xcode 0.3 → 0.3.1
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.
- data/CHANGELOG +2 -0
- data/README.textile +3 -0
- data/lib/zerg_xcode/plugins/import.rb +16 -11
- data/test/plugins/import_test.rb +33 -2
- data/zerg_xcode.gemspec +2 -2
- metadata +2 -2
data/CHANGELOG
CHANGED
data/README.textile
CHANGED
@@ -25,6 +25,9 @@ zerg-xcode help ls
|
|
25
25
|
zerg-xcode ls ProjectName
|
26
26
|
</pre>
|
27
27
|
|
28
|
+
You can learn all about importing projects in
|
29
|
+
"this blog post":http://blog.costan.us/2009/02/iphone-development-and-code-sharing.html
|
30
|
+
|
28
31
|
h2. Developer Notes
|
29
32
|
|
30
33
|
The rest of the file is useful if you're considering tweaking the code. Here are
|
@@ -219,8 +219,10 @@ END
|
|
219
219
|
|
220
220
|
# Cross-references the objects in two object graphs that are to be merged.
|
221
221
|
# Returns a Hash associating objects in both the source and the target object
|
222
|
-
# graphs with the
|
223
|
-
|
222
|
+
# graphs with the target objects that represent the same entities.
|
223
|
+
# Setting strict to true returns fewer matches, and should be used for
|
224
|
+
# entangling projects. Setting strict to false should work better for merges.
|
225
|
+
def cross_reference(source, target, strict = false, mappings = {})
|
224
226
|
if source.class != target.class
|
225
227
|
raise "Attempting to cross-reference different kinds of objects - " +
|
226
228
|
"#{source.class} != #{target.class}"
|
@@ -237,29 +239,32 @@ END
|
|
237
239
|
return mappings
|
238
240
|
end
|
239
241
|
|
240
|
-
self.send cross_op, source, target, mappings
|
242
|
+
self.send cross_op, source, target, strict, mappings
|
241
243
|
end
|
242
244
|
|
243
|
-
def cross_reference_objects(source, target, mappings)
|
244
|
-
return mappings if mappings[source] || mappings[target]
|
245
|
-
|
245
|
+
def cross_reference_objects(source, target, strict, mappings)
|
246
|
+
return mappings if mappings[source] || mappings[target]
|
247
|
+
|
248
|
+
if strict
|
249
|
+
return mappings if source.xref_key != target.xref_key
|
250
|
+
end
|
246
251
|
|
247
252
|
mappings[target] = target
|
248
253
|
mappings[source] = target
|
249
|
-
cross_reference source._attr_hash, target._attr_hash, mappings
|
254
|
+
cross_reference source._attr_hash, target._attr_hash, strict, mappings
|
250
255
|
end
|
251
256
|
private :cross_reference_objects
|
252
257
|
|
253
|
-
def cross_reference_hashes(source, target, mappings)
|
258
|
+
def cross_reference_hashes(source, target, strict, mappings)
|
254
259
|
source.each_key do |key|
|
255
260
|
p [source.keys, key] if source[key].nil?
|
256
|
-
cross_reference source[key], target[key], mappings if target[key]
|
261
|
+
cross_reference source[key], target[key], strict, mappings if target[key]
|
257
262
|
end
|
258
263
|
mappings
|
259
264
|
end
|
260
265
|
private :cross_reference_hashes
|
261
266
|
|
262
|
-
def cross_reference_enumerables(source, target, mappings)
|
267
|
+
def cross_reference_enumerables(source, target, strict, mappings)
|
263
268
|
source_keys = {}
|
264
269
|
source.each do |value|
|
265
270
|
next unless value.kind_of? ZergXcode::XcodeObject
|
@@ -268,7 +273,7 @@ END
|
|
268
273
|
target.each do |value|
|
269
274
|
next unless value.kind_of? ZergXcode::XcodeObject
|
270
275
|
next unless source_value = source_keys[value.xref_key]
|
271
|
-
cross_reference source_value, value, mappings
|
276
|
+
cross_reference source_value, value, strict, mappings
|
272
277
|
end
|
273
278
|
mappings
|
274
279
|
end
|
data/test/plugins/import_test.rb
CHANGED
@@ -25,14 +25,34 @@ class Plugins::ImportTest < Test::Unit::TestCase
|
|
25
25
|
project = ZergXcode.load 'testdata/ZergSupport'
|
26
26
|
assert_import_identical project
|
27
27
|
end
|
28
|
+
|
29
|
+
def test_import_identical_30app
|
30
|
+
project = ZergXcode.load 'testdata/TestApp30'
|
31
|
+
assert_import_identical project
|
32
|
+
end
|
28
33
|
|
34
|
+
def test_import_identical_30lib
|
35
|
+
project = ZergXcode.load 'testdata/TestApp30'
|
36
|
+
assert_import_identical project
|
37
|
+
end
|
38
|
+
|
29
39
|
def test_import_differents
|
30
40
|
small = ZergXcode.load 'testdata/TestApp'
|
41
|
+
large = ZergXcode.load 'testdata/ZergSupport'
|
42
|
+
assert_import_differents small, large
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_import_differents_30
|
46
|
+
small = ZergXcode.load 'testdata/TestApp30'
|
47
|
+
large = ZergXcode.load 'testdata/TestLib30'
|
48
|
+
assert_import_differents small, large
|
49
|
+
end
|
50
|
+
|
51
|
+
def assert_import_differents(small, large)
|
31
52
|
small_file_set = Set.new(small.all_files.map { |file| file[:path] })
|
32
53
|
small_target_set = Set.new(small['targets'].map { |t| t['name'] })
|
33
54
|
small_target_filesets = target_filesets small
|
34
55
|
|
35
|
-
large = ZergXcode.load 'testdata/ZergSupport'
|
36
56
|
large_file_set = Set.new(large.all_files.map { |file| file[:path] })
|
37
57
|
large_target_set = Set.new(large['targets'].map { |t| t['name'] })
|
38
58
|
large_target_filesets = target_filesets large
|
@@ -108,6 +128,16 @@ class Plugins::ImportTest < Test::Unit::TestCase
|
|
108
128
|
project = ZergXcode.load 'testdata/ZergSupport'
|
109
129
|
assert_cross_reference_covers_project project
|
110
130
|
end
|
131
|
+
|
132
|
+
def test_cross_reference_identical_30app
|
133
|
+
project = ZergXcode.load 'testdata/TestApp30'
|
134
|
+
assert_cross_reference_covers_project project
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_cross_reference_identical_30lib
|
138
|
+
project = ZergXcode.load 'testdata/TestLib30'
|
139
|
+
assert_cross_reference_covers_project project
|
140
|
+
end
|
111
141
|
|
112
142
|
def assert_cross_reference_covers_project(project)
|
113
143
|
cloned_project = ZergXcode::XcodeObject.from project
|
@@ -120,7 +150,8 @@ class Plugins::ImportTest < Test::Unit::TestCase
|
|
120
150
|
end
|
121
151
|
|
122
152
|
objects.each do |object|
|
123
|
-
assert map.include?(object),
|
153
|
+
assert map.include?(object),
|
154
|
+
"Missed object #{object.xref_key.inspect}: #{object.inspect}"
|
124
155
|
|
125
156
|
assert_equal object.xref_key, map[object].xref_key,
|
126
157
|
"Merge keys for cross-referenced objects do not match"
|
data/zerg_xcode.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{zerg_xcode}
|
5
|
-
s.version = "0.3"
|
5
|
+
s.version = "0.3.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Victor Costan"]
|
9
|
-
s.date = %q{2009-
|
9
|
+
s.date = %q{2009-03-28}
|
10
10
|
s.default_executable = %q{bin/zerg-xcode}
|
11
11
|
s.description = %q{Automated modifications for Xcode project files}
|
12
12
|
s.email = %q{victor@zergling.net}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zerg_xcode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Costan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-03-28 00:00:00 -04:00
|
13
13
|
default_executable: bin/zerg-xcode
|
14
14
|
dependencies: []
|
15
15
|
|