Report missing files in Packer.strategise()

This commit is contained in:
Sybren A. Stüvel 2018-03-14 12:24:26 +01:00
parent 575a0921c1
commit c9664ca045
4 changed files with 27 additions and 2 deletions

View File

@ -71,6 +71,7 @@ class Packer:
# Filled by strategise()
self._actions = collections.defaultdict(AssetAction) \
# type: typing.DefaultDict[pathlib.Path, AssetAction]
self.missing_files = set() # type: typing.Set[pathlib.Path]
# Number of files we would copy, if not for --noop
self._file_count = 0
@ -105,6 +106,11 @@ class Packer:
# blendfile thing, since different blendfiles can refer to it in
# different ways (for example with relative and absolute paths).
asset_path = usage.abspath
if not asset_path.exists():
log.info('Missing file: %s', asset_path)
self.missing_files.add(asset_path)
continue
bfile_path = usage.block.bfile.filepath.absolute()
path_in_project = self._path_in_project(asset_path)

View File

@ -122,10 +122,18 @@ class BlockUsage:
log.warning('Path %s does not exist for %s', path, self)
def __fspath__(self) -> pathlib.Path:
"""Determine the absolute path of the asset on the filesystem."""
"""Determine the absolute path of the asset on the filesystem.
The path is resolved (see pathlib.Path.resolve()) if it exists on the
filesystem.
"""
if self._abspath is None:
bpath = self.block.bfile.abspath(self.asset_path)
self._abspath = bpath.to_path().resolve()
as_path = bpath.to_path()
try:
self._abspath = as_path.resolve()
except FileNotFoundError:
self._abspath = as_path
return self._abspath
abspath = property(__fspath__)

Binary file not shown.

View File

@ -173,3 +173,14 @@ class PackTest(AbstractPackTest):
self.assertEqual(b'//../linked_cube.blend', libs[0][b'name'])
self.assertEqual(b'LILib.002', libs[1].id_name)
self.assertEqual(b'//../material_textures.blend', libs[1][b'name'])
def test_missing_files(self):
infile = self.blendfiles / 'missing_textures.blend'
packer = pack.Packer(infile, self.blendfiles, self.tpath)
packer.strategise()
self.assertEqual(
[self.blendfiles / 'textures/HDRI/Myanmar/Golden Palace 2, Old Bagan-1k.exr',
self.blendfiles / 'textures/Textures/Marble/marble_decoration-color.png'],
sorted(packer.missing_files)
)