完美一版
This commit is contained in:
@@ -440,6 +440,18 @@ rcl_get_effective_install_dir(library_test_rcl_full_name::core _rcl_full_name_in
|
||||
test_assert_strequal("${_rcl_full_name_install_dir}" "${TEST_OUTPUT_DIR}/rcl_full_name/install/core")
|
||||
library_get(library_test_rcl_full_name library_test_rcl_full_name::core INIT_SCRIPT_CONTENT _rcl_full_name_init_script)
|
||||
test_assert_strequal("${_rcl_full_name_init_script}" "set(LIBRARY_TEST_RCL_CORE TRUE)")
|
||||
rcl_export_configuration(library_test_rcl_full_name)
|
||||
library_get_effective_data_export_dir(library_test_rcl_full_name _rcl_full_name_data_dir)
|
||||
set(_rcl_full_name_map_file "${_rcl_full_name_data_dir}/registry/nodes/library_test_rcl_full_name/core/map.txt")
|
||||
map_deserialize_file(_rcl_full_name_disk_map "${_rcl_full_name_map_file}")
|
||||
map_get(_rcl_full_name_disk_map GIT_BRANCH _rcl_full_name_disk_branch)
|
||||
test_assert_strequal("${_rcl_full_name_disk_branch}" "main")
|
||||
library_set(library_test_rcl_full_name library_test_rcl_full_name::core GIT_BRANCH updated)
|
||||
rcl_export_configuration(library_test_rcl_full_name)
|
||||
map_deserialize_file(_rcl_full_name_refreshed_map "${_rcl_full_name_map_file}")
|
||||
map_get(_rcl_full_name_refreshed_map GIT_BRANCH _rcl_full_name_refreshed_branch)
|
||||
# 旧 map.txt 已存在时仍必须覆盖;此断言防止重新引入 EXISTS/时间戳短路。
|
||||
test_assert_strequal("${_rcl_full_name_refreshed_branch}" "updated")
|
||||
library_create(library_test_auto_register "${TEST_OUTPUT_DIR}/auto_register")
|
||||
set(_target_loader_script "${TEST_OUTPUT_DIR}/target_loader.sh")
|
||||
file(WRITE "${_target_loader_script}" [=[#!/usr/bin/env bash
|
||||
|
||||
@@ -159,6 +159,21 @@ function(rcl_get_data_export_dir namespace_name output_variable)
|
||||
library_get_effective_data_export_dir("${namespace_name}" _data_export_dir)
|
||||
set(${output_variable} "${_data_export_dir}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
# API: rcl_export_configuration(<namespace_name>)
|
||||
# 作用: 将命名空间当前注册配置完整刷新到磁盘,供后续动作目标加载。
|
||||
# 参数: namespace_name 是已经初始化并完成注册的命名空间。
|
||||
# 返回: 无。
|
||||
# 设计契约:
|
||||
# 1. 当前 configure 过程中,内存 registry 是配置编辑态的唯一权威来源。
|
||||
# 2. namespace 的全部注册和属性设置完成后调用本函数;随后才能创建动作目标。
|
||||
# 3. 每次 configure 都必须无条件覆盖磁盘快照。禁止用 EXISTS、时间戳或旧 map.txt 跳过刷新,
|
||||
# 否则 CMakeLists 中修改过的版本、选项、依赖和初始化脚本不会进入本轮动作目标。
|
||||
# 4. library_export_dir 负责整批导出,禁止逐文件修补 registry,避免产生不同步的状态源。
|
||||
function(rcl_export_configuration namespace_name)
|
||||
rcl_get_data_export_dir("${namespace_name}" _namespace_data_dir)
|
||||
library_cache_operations("${namespace_name}" _operations)
|
||||
library_export_dir("${namespace_name}" "${_namespace_data_dir}")
|
||||
endfunction()
|
||||
# API: rcl_set_script_root(<namespace_name> <script_root>)
|
||||
# 作用: 设置命名空间脚本根目录。
|
||||
# 参数: namespace_name 是命名空间;script_root 是脚本根目录。
|
||||
@@ -387,6 +402,8 @@ endfunction()
|
||||
# 作用: 从磁盘读取一个库的自包含配置,不导出 namespace,也不写文件。
|
||||
# 参数: library_name 使用 namespace::id;两个输出参数分别接收临时 map ID 和配置记录的数据目录。
|
||||
# 返回: 通过 PARENT_SCOPE 返回输出;单库配置文件不存在时终止配置。
|
||||
# 设计契约: 本函数只读取由 rcl_export_configuration 在本轮 configure 中刷新的快照;
|
||||
# 禁止在这里从旧文件恢复、按缺失补写或回退到内存 registry。
|
||||
function(__rcl_read_library_map library_name map_output data_dir_output)
|
||||
__rcl_split_library_name("${library_name}" _namespace_name _library_id)
|
||||
rcl_get_data_export_dir("${_namespace_name}" _namespace_data_dir)
|
||||
|
||||
Reference in New Issue
Block a user