Flamenco exclusion filter requires BAM 1.1.7; this is now checked
A warning is shown in the GUI when a BAM version that's too old is used (instead of simply crashing when an exclusion filter was specified).
This commit is contained in:
parent
01ae0f5f54
commit
543da5c8d8
@ -426,6 +426,8 @@ class BlenderCloudPreferences(AddonPreferences):
|
|||||||
text='Local Cloud Project Path')
|
text='Local Cloud Project Path')
|
||||||
|
|
||||||
def draw_flamenco_buttons(self, flamenco_box, bcp: flamenco.FlamencoManagerGroup, context):
|
def draw_flamenco_buttons(self, flamenco_box, bcp: flamenco.FlamencoManagerGroup, context):
|
||||||
|
from .flamenco import bam_interface
|
||||||
|
|
||||||
header_row = flamenco_box.row(align=True)
|
header_row = flamenco_box.row(align=True)
|
||||||
header_row.label('Flamenco:', icon_value=icon('CLOUD'))
|
header_row.label('Flamenco:', icon_value=icon('CLOUD'))
|
||||||
|
|
||||||
@ -461,7 +463,15 @@ class BlenderCloudPreferences(AddonPreferences):
|
|||||||
props = path_box.operator('flamenco.explore_file_path', text='', icon='DISK_DRIVE')
|
props = path_box.operator('flamenco.explore_file_path', text='', icon='DISK_DRIVE')
|
||||||
props.path = self.flamenco_job_output_path
|
props.path = self.flamenco_job_output_path
|
||||||
|
|
||||||
job_output_box.prop(self, 'flamenco_exclude_filter')
|
show_warning = bool(self.flamenco_exclude_filter and
|
||||||
|
not bam_interface.bam_supports_exclude_option())
|
||||||
|
job_output_box.alert = show_warning
|
||||||
|
job_output_box.prop(self, 'flamenco_exclude_filter',
|
||||||
|
icon='ERROR' if show_warning else 'NONE')
|
||||||
|
if show_warning:
|
||||||
|
job_output_box.label(
|
||||||
|
text='Warning, the exclusion filter requires a newer version of Blender!')
|
||||||
|
job_output_box.alert = False
|
||||||
|
|
||||||
prop_split = job_output_box.split(0.32, align=True)
|
prop_split = job_output_box.split(0.32, align=True)
|
||||||
prop_split.label('Strip Components:')
|
prop_split.label('Strip Components:')
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
"""BAM packing interface for Flamenco."""
|
"""BAM packing interface for Flamenco."""
|
||||||
|
|
||||||
|
import functools
|
||||||
import logging
|
import logging
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import typing
|
import typing
|
||||||
@ -14,6 +15,28 @@ class CommandExecutionError(Exception):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
if 'bam_supports_exclude_option' in locals():
|
||||||
|
locals()['bam_supports_exclude_option'].cache_clear()
|
||||||
|
|
||||||
|
|
||||||
|
@functools.lru_cache(maxsize=1)
|
||||||
|
def bam_supports_exclude_option() -> bool:
|
||||||
|
"""Returns True if the version of BAM bundled with Blender supports --exclude.
|
||||||
|
|
||||||
|
This feature was added to BAM 1.1.7, so we can do a simple version check.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
import io_blend_utils
|
||||||
|
except ImportError:
|
||||||
|
# If this happens, BAM won't work at all. However, this function can be called from
|
||||||
|
# the GUI; by being a bit careful while importing, we avoid breaking Blender's GUI.
|
||||||
|
log.exception('Error importing io_blend_utils module.')
|
||||||
|
return False
|
||||||
|
|
||||||
|
return io_blend_utils.bl_info['version'] >= (1, 1, 7)
|
||||||
|
|
||||||
|
|
||||||
async def bam_copy(base_blendfile: Path, target_blendfile: Path,
|
async def bam_copy(base_blendfile: Path, target_blendfile: Path,
|
||||||
exclusion_filter: str) -> typing.List[Path]:
|
exclusion_filter: str) -> typing.List[Path]:
|
||||||
"""Uses BAM to copy the given file and dependencies to the target blendfile.
|
"""Uses BAM to copy the given file and dependencies to the target blendfile.
|
||||||
@ -43,7 +66,11 @@ async def bam_copy(base_blendfile: Path, target_blendfile: Path,
|
|||||||
]
|
]
|
||||||
|
|
||||||
if exclusion_filter:
|
if exclusion_filter:
|
||||||
args.extend(['--exclude', exclusion_filter])
|
if bam_supports_exclude_option():
|
||||||
|
args.extend(['--exclude', exclusion_filter])
|
||||||
|
else:
|
||||||
|
log.warning('Your version of Blender does not support the exclusion filter, '
|
||||||
|
'copying all files.')
|
||||||
|
|
||||||
cmd_to_log = ' '.join(shlex.quote(s) for s in args)
|
cmd_to_log = ' '.join(shlex.quote(s) for s in args)
|
||||||
log.info('Executing %s', cmd_to_log)
|
log.info('Executing %s', cmd_to_log)
|
||||||
|
Reference in New Issue
Block a user