48 Commits

Author SHA1 Message Date
Sybren A. Stüvel
8009ff1e47 Added block expansion
The expansion process follows pointers and library links to construct
the full set of actually-used data blocks. This set consists of all data
blocks in the initial blend file, and all *actually linked-to* data
blocks in linked blend files.

I've also removed non-recursive dependency listing.
2018-03-02 15:44:07 +01:00
Sybren A. Stüvel
677d388a15 Convert BlendPath to pathlib.Path using local filesystem encoding
UTF-8 is tried first, and if that fails the local filesystem encoding is
used.
2018-03-02 13:42:49 +01:00
Sybren A. Stüvel
8bb130d336 Moved cdefs one module up 2018-03-02 13:36:08 +01:00
Sybren A. Stüvel
7167d51730 Added BlendFileBlock.id_name property
Evaluated only once, so safe to call multiple times without producing
excessive disk I/O. Returns None instead of raising KeyError when there is
no (b'id', b'name') field.
2018-03-02 11:26:02 +01:00
Sybren A. Stüvel
2bb9cffa49 Renamed block_walkers to blocks2assets 2018-03-02 10:06:41 +01:00
Sybren A. Stüvel
f46e761f09 Removed base_index parameter in favour of explicit array handling
The `base_index` parameter is confusing and only works in a limited number
of cases. Having explicit functions to deal with those cases is preferred.
2018-03-01 12:50:22 +01:00
Sybren A. Stüvel
2c0cc6003d Updated block_walkers docstring 2018-03-01 10:35:51 +01:00
Sybren A. Stüvel
d93516d34f Better naming of functions in block_walkers.py 2018-03-01 10:31:41 +01:00
Sybren A. Stüvel
204626b671 Fix issue when library blend file does not exist 2018-02-28 17:23:43 +01:00
Sybren A. Stüvel
6252b041d5 Implemented JSON dependency logging output 2018-02-28 17:18:18 +01:00
Sybren A. Stüvel
a7706f21b6 Nicer CLI listing of dependencies 2018-02-28 17:02:34 +01:00
Sybren A. Stüvel
2af8d94cb9 Perform recursion after handling all blocks of current file
This way file access isn't interleaved and all dependencies of one file are
reported before moving to the next.
2018-02-28 17:02:19 +01:00
Sybren A. Stüvel
ca964181fe Beginning of CLI interface + protection against infinite recursion. 2018-02-28 16:47:13 +01:00
Sybren A. Stüvel
8ae400acbe Support particle simulation point cache data
Also see https://developer.blender.org/T53562
2018-02-28 14:11:48 +01:00
Sybren A. Stüvel
86af05e823 Added recursion into library blend files. 2018-02-28 12:42:27 +01:00
Sybren A. Stüvel
cb5eff2dcb Some docstrings 2018-02-28 11:56:41 +01:00
Sybren A. Stüvel
7541922b74 Also report library blocks.
Those are needed for recursive tracing of dependencies.
2018-02-28 11:55:10 +01:00
Sybren A. Stüvel
0d7bbb34f0 Reduced cyclomatic complexity of BlockUsage.__init__() 2018-02-28 11:17:27 +01:00
Sybren A. Stüvel
a5bc52523d Some more comments 2018-02-28 11:16:58 +01:00
Sybren A. Stüvel
65b690e998 Added block walker implementations + tests 2018-02-27 17:30:28 +01:00
Sybren A. Stüvel
6b9c0a3f95 Support slash notation for BlendPath
This mimicks the slash notation of pathlib.Path
2018-02-27 17:29:44 +01:00
Sybren A. Stüvel
15cd74cda4 Start of dependency tracer work. 2018-02-26 18:16:15 +01:00
Sybren A. Stüvel
59c0b6df4c Allow block.get() to return the dna.Field
This is needed by the upcoming dependency tracer.
2018-02-26 18:15:14 +01:00
Sybren A. Stüvel
a56e985cdc Unify behaviour of block[path] and block.get(path) 2018-02-26 18:14:23 +01:00
Sybren A. Stüvel
127f357e49 Marked set() as ported 2018-02-23 15:54:13 +01:00
Sybren A. Stüvel
bce5f4b670 Ported get_file_offset() and renamed to abs_offset() 2018-02-23 15:53:26 +01:00
Sybren A. Stüvel
aed1827ff7 Moved pad_up_4() to inner function as it's only used there. 2018-02-23 15:44:57 +01:00
Sybren A. Stüvel
55075c09b6 Ported get_data_hash() and renamed to hash() 2018-02-23 15:42:48 +01:00
Sybren A. Stüvel
9750a91571 Fixed file leak when opening corrupted file. 2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
eb8281ea82 Fix leaking file object when loading non-blend file 2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
8e0b135eb3 Fixed recompressing after modification 2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
67751d9a3e Fixed loading compressed files 2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
b42a090f32 Support for modifying string/bytes fields. 2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
efc60f437b Improved BFB.set() a bit, not yet tested at all. 2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
934a8e210e Clarified type refinement, simplified API, custom exception for get_pointer
Type refinement is now only done with BlendFileBlock.refine_type(), and
no longer with sdna_index_refine parameters to various functions. This
simplifies the API at the expense of having to call two simple functions
instead of one more complex one.
2018-02-23 14:26:57 +01:00
Sybren A. Stüvel
9c8766a28c str → repr 2018-02-23 12:24:50 +01:00
Sybren A. Stüvel
42413c4d99 Added some TODOs 2018-02-23 12:24:50 +01:00
Sybren A. Stüvel
74ef3877c6 Renamed internal func and removed an iteration over self.blocks 2018-02-23 12:24:50 +01:00
Sybren A. Stüvel
8d32ab513f Recursively add offsets of Struct.field_from_path() 2018-02-23 12:24:50 +01:00
Sybren A. Stüvel
480b82337e Some simplifications 2018-02-22 17:44:50 +01:00
Sybren A. Stüvel
968068d21d Better exception message 2018-02-22 17:44:50 +01:00
Sybren A. Stüvel
63c7e4fcef Ported iteration over properties 2018-02-22 17:44:50 +01:00
Sybren A. Stüvel
7165d121bd Ported BlendFileBlock.get_recursive_iter()
Also simplified get_file_offset(), because its optional parameters are
never used anyway.
2018-02-22 16:45:16 +01:00
Sybren A. Stüvel
87300df6a3 Fixed issue reading array items and renamed some stuff 2018-02-22 16:14:10 +01:00
Sybren A. Stüvel
9c7791f762 Implemented/fixed/ported loading of blend files and getting blocks & props 2018-02-22 15:52:10 +01:00
Sybren A. Stüvel
e66b1edaf4 Implemented + tested dna.Struct.field_get 2018-02-22 14:50:24 +01:00
Sybren A. Stüvel
dcda85c3e6 Ported dna.Name, dna.Field, and started with dna.Struct 2018-02-22 14:50:24 +01:00
Sybren A. Stüvel
0532634d13 Initial check-in, not yet working and has old, unported BAM code 2018-02-22 14:50:10 +01:00