=== modified file 'pkgcore/fs/contents.py'
|
|
|
|
| 317 | 317 | # rewrite each node (resolving down the filepath chain) |
| 318 | 318 | conflicts = sorted(contentsSet(self.iterdirs()).intersection(conflicts_d)) |
| 319 | 319 | obj = self.clone() |
| 320 | | for conflict in conflicts: |
| 321 | | # punt the conflict first, since we don't want it getting rewritten |
| 322 | | obj.remove(conflict) |
| 323 | | subset = self.child_nodes(conflict.location) |
| 324 | | obj.difference_update(subset) |
| 325 | | subset = subset.change_offset(conflict.location, conflict.resolved_target) |
| 326 | | obj.update(subset) |
| 327 | | if add_conflicting_sym: |
| 328 | | obj.add(other[conflicts_d[conflict]]) |
| | 320 | while conflicts: |
| | 321 | for conflict in conflicts: |
| | 322 | # punt the conflict first, since we don't want it getting rewritten |
| | 323 | obj.remove(conflict) |
| | 324 | subset = obj.child_nodes(conflict.location) |
| | 325 | obj.difference_update(subset) |
| | 326 | subset = subset.change_offset(conflict.location, conflict.resolved_target) |
| | 327 | obj.update(subset) |
| | 328 | if add_conflicting_sym: |
| | 329 | obj.add(other[conflicts_d[conflict]]) |
| | 330 | |
| | 331 | # rebuild the targets first; sorted due to the fact that we want to |
| | 332 | # rewrite each node (resolving down the filepath chain) |
| | 333 | conflicts = sorted(contentsSet(obj.iterdirs()).intersection(conflicts_d)) |
| 329 | 334 | return obj |
| 330 | 335 | |
| 331 | 336 | def add_missing_directories(self, mode=0775, uid=0, gid=0, mtime=None): |
=== modified file 'pkgcore/test/fs/test_contents.py'
|
|
|
|
| 196 | 196 | self.mk_file("/usr/foo")]))) |
| 197 | 197 | |
| 198 | 198 | def test_map_directory_structure(self): |
| 199 | | old = contents.contentsSet([self.mk_file("/dir/a"), |
| 200 | | self.mk_dir("/dir"), self.mk_link("/sym", "dir")]) |
| | 199 | old = contents.contentsSet([self.mk_dir("/dir"), |
| | 200 | self.mk_link("/sym", "dir")]) |
| 201 | 201 | new = contents.contentsSet([self.mk_file("/sym/a"), |
| 202 | 202 | self.mk_dir("/sym")]) |
| 203 | 203 | # verify the machinery is working as expected. |
| 204 | | self.assertNotEqual(list(old.difference(new)), [self.mk_dir("/dir")]) |
| 205 | 204 | ret = new.map_directory_structure(old) |
| 206 | 205 | self.assertEqual(sorted(ret), sorted([self.mk_dir("/dir"), |
| 207 | 206 | self.mk_file("/dir/a")])) |
| 208 | 207 | |
| | 208 | # test recursion next. |
| | 209 | old.add(self.mk_link("/dir/sym", "dir2")) |
| | 210 | old.add(self.mk_dir("/dir/dir2")) |
| | 211 | new.add(self.mk_file("/dir/sym/b")) |
| | 212 | new.add(self.mk_dir("/sym/sym")) |
| | 213 | |
| | 214 | ret = new.map_directory_structure(old) |
| | 215 | self.assertEqual(sorted(ret), sorted([self.mk_dir("/dir"), |
| | 216 | self.mk_file("/dir/a"), self.mk_dir("/dir/dir2"), |
| | 217 | self.mk_file("/dir/dir2/b")])) |
| | 218 | |
| | 219 | |
| 209 | 220 | def test_add_missing_directories(self): |
| 210 | 221 | src = [self.mk_file("/dir1/a"), self.mk_file("/dir2/dir3/b"), |
| 211 | 222 | self.mk_dir("/dir1/dir4")] |