Поправлен скрипт в части экспорта общих файлов
This commit is contained in:
1 parent
a8c897a27b
commit
2d61817489
1 file changed
+24
-3
@@ -269,6 +269,25 @@ def is_device_node(obj):
|
||||
return False
|
||||
|
||||
|
||||
class NonDeviceRoot(object):
|
||||
"""Обёртка вокруг proj, отдающая только НЕ-device top-level узлы
|
||||
(Enums, Structs, __VisualizationStyle и т.п.).
|
||||
|
||||
Нужна из-за того, что walk() при входе в рекурсию не добавляет имя
|
||||
самого переданного node в current_path -- в путь попадают только имена
|
||||
ЕГО детей. Раньше walk() вызывался прямо на каждом top-level non-device
|
||||
child'е (например, на папке Enums), поэтому имя "Enums" терялось и все
|
||||
объекты внутри неё экспортировались с Path: -, хотя реально лежат на
|
||||
уровень глубже. Обернув proj и вызвав walk() один раз на обёртке,
|
||||
получаем, что "Enums" воспринимается как обычный child и попадает
|
||||
в путь корректно."""
|
||||
def __init__(self, proj):
|
||||
self._proj = proj
|
||||
|
||||
def get_children(self, sort):
|
||||
return [c for c in self._proj.get_children(sort) if not is_device_node(c)]
|
||||
|
||||
|
||||
def walk(node, dirs, exported, project_name, device_name, current_path=None, parent_pou_path=None):
|
||||
"""current_path -- список имён родителей от корня устройства (без учёта device_name самого),
|
||||
накапливается по мере рекурсивного спуска по реальному дереву проекта -- поэтому Path
|
||||
@@ -388,9 +407,11 @@ else:
|
||||
walk(device, dev_dirs, exported, project_name, device_name)
|
||||
|
||||
other_dirs = make_dirs(os.path.join(OUTPUT_ROOT, "_common"))
|
||||
for child in top_children:
|
||||
if not is_device_node(child):
|
||||
walk(child, other_dirs, exported, project_name, "-")
|
||||
# Обходим НЕ-device top-level узлы (Enums, Structs, ...) через
|
||||
# обёртку NonDeviceRoot одним вызовом walk(), а не по одному
|
||||
# per-child -- иначе имя самой папки (напр. "Enums") теряется
|
||||
# и не попадает в Path (см. комментарий к NonDeviceRoot выше).
|
||||
walk(NonDeviceRoot(proj), other_dirs, exported, project_name, "-")
|
||||
else:
|
||||
print("Устройства верхнего уровня не найдены, экспорт без разбивки по папкам.")
|
||||
dirs = make_dirs(OUTPUT_ROOT)
|
||||
|
||||
Reference in new issue
Block a user