参考所有分组,完成尽量多的内容。禁止顺手扩功能 smoke
结论:收敛第 1 组 switchkins/remap 生成器约束,--all-output-dir 拒绝含空白路径和文件系统根目录,避免生成表/配置 case 误写到不受控位置;未扩展 smoke 功能。验证:./check-linuxcnc-switchkins-remap-table.sh linuxcnc-kinematics-source-files.txt、CNC_SIM_ALL_NATIVE_GUARDRAILS_ONLY=1 ./test-all-native.sh、./test-native.sh、./test-linuxcnc-source-link.sh 均通过。
This commit is contained in:
@@ -380,6 +380,8 @@ validate_generator_cli_contract() {
|
|||||||
local cli_manifest_without_postgui
|
local cli_manifest_without_postgui
|
||||||
local cli_manifest_without_remap
|
local cli_manifest_without_remap
|
||||||
local cli_manifest_without_tooldata
|
local cli_manifest_without_tooldata
|
||||||
|
local cli_output_root_log
|
||||||
|
local cli_output_whitespace_log
|
||||||
cli_dir=$(mktemp -d "${TMPDIR:-/tmp}/linuxcnc_switchkins_remap_cli.XXXXXX")
|
cli_dir=$(mktemp -d "${TMPDIR:-/tmp}/linuxcnc_switchkins_remap_cli.XXXXXX")
|
||||||
trap 'rm -rf "$cli_dir"' EXIT
|
trap 'rm -rf "$cli_dir"' EXIT
|
||||||
cli_manifest="$cli_dir/bridgemill-manifest.txt"
|
cli_manifest="$cli_dir/bridgemill-manifest.txt"
|
||||||
@@ -408,6 +410,8 @@ validate_generator_cli_contract() {
|
|||||||
cli_manifest_without_postgui="$cli_dir/bridgemill-manifest-without-postgui.txt"
|
cli_manifest_without_postgui="$cli_dir/bridgemill-manifest-without-postgui.txt"
|
||||||
cli_manifest_without_remap="$cli_dir/bridgemill-manifest-without-remap.txt"
|
cli_manifest_without_remap="$cli_dir/bridgemill-manifest-without-remap.txt"
|
||||||
cli_manifest_without_tooldata="$cli_dir/bridgemill-manifest-without-tooldata.txt"
|
cli_manifest_without_tooldata="$cli_dir/bridgemill-manifest-without-tooldata.txt"
|
||||||
|
cli_output_root_log="$cli_dir/output-root.log"
|
||||||
|
cli_output_whitespace_log="$cli_dir/output-whitespace.log"
|
||||||
|
|
||||||
if ! awk -F: -v manifest="$manifest_file" '
|
if ! awk -F: -v manifest="$manifest_file" '
|
||||||
function require(key) {
|
function require(key) {
|
||||||
@@ -743,6 +747,29 @@ validate_generator_cli_contract() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if LINUXCNC_ROOT="$linuxcnc_root" ./generate-linuxcnc-switchkins-remap-table.sh \
|
||||||
|
--all-output-dir "$cli_dir/out with space" "$cli_manifest" >"$cli_output_whitespace_log" 2>&1; then
|
||||||
|
echo "switchkins remap generator accepted an output directory with whitespace" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! grep -F "switchkins remap output directory must not contain whitespace: $cli_dir/out with space" \
|
||||||
|
"$cli_output_whitespace_log" >/dev/null; then
|
||||||
|
echo "switchkins remap generator did not report whitespace output directories clearly" >&2
|
||||||
|
sed -n '1,20p' "$cli_output_whitespace_log" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if LINUXCNC_ROOT="$linuxcnc_root" ./generate-linuxcnc-switchkins-remap-table.sh \
|
||||||
|
--all-output-dir / "$cli_manifest" >"$cli_output_root_log" 2>&1; then
|
||||||
|
echo "switchkins remap generator accepted the filesystem root as output directory" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! grep -F "switchkins remap output directory must not be the filesystem root" \
|
||||||
|
"$cli_output_root_log" >/dev/null; then
|
||||||
|
echo "switchkins remap generator did not report filesystem-root output directories clearly" >&2
|
||||||
|
sed -n '1,20p' "$cli_output_root_log" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
LINUXCNC_ROOT="$linuxcnc_root" ./generate-linuxcnc-switchkins-remap-table.sh --all-output-dir "$cli_dir/out" "$cli_manifest"
|
LINUXCNC_ROOT="$linuxcnc_root" ./generate-linuxcnc-switchkins-remap-table.sh --all-output-dir "$cli_dir/out" "$cli_manifest"
|
||||||
LINUXCNC_ROOT="$linuxcnc_root" ./generate-linuxcnc-switchkins-remap-table.sh "$cli_manifest" \
|
LINUXCNC_ROOT="$linuxcnc_root" ./generate-linuxcnc-switchkins-remap-table.sh "$cli_manifest" \
|
||||||
>"$cli_dir/linuxcnc_switchkins_remap_table.stdout.inc"
|
>"$cli_dir/linuxcnc_switchkins_remap_table.stdout.inc"
|
||||||
|
|||||||
@@ -64,6 +64,10 @@ if [[ "$mode" == all && -z "$all_output_dir" ]]; then
|
|||||||
echo "missing output directory for --all-output-dir" >&2
|
echo "missing output directory for --all-output-dir" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
if [[ "$mode" == all && "$all_output_dir" =~ [[:space:]] ]]; then
|
||||||
|
echo "switchkins remap output directory must not contain whitespace: $all_output_dir" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
linuxcnc_root=$(cd "$linuxcnc_root" && pwd)
|
linuxcnc_root=$(cd "$linuxcnc_root" && pwd)
|
||||||
|
|
||||||
@@ -1244,6 +1248,11 @@ elif [[ "$mode" == all ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
mkdir -p "$all_output_dir"
|
mkdir -p "$all_output_dir"
|
||||||
|
all_output_dir=$(cd "$all_output_dir" && pwd)
|
||||||
|
if [[ "$all_output_dir" == "/" ]]; then
|
||||||
|
echo "switchkins remap output directory must not be the filesystem root" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
write_generated_file "$all_output_dir/linuxcnc_switchkins_remap_table.inc" "table" write_table
|
write_generated_file "$all_output_dir/linuxcnc_switchkins_remap_table.inc" "table" write_table
|
||||||
write_generated_file "$all_output_dir/linuxcnc_switchkins_remap_config_cases.inc" "config cases" write_config_cases
|
write_generated_file "$all_output_dir/linuxcnc_switchkins_remap_config_cases.inc" "config cases" write_config_cases
|
||||||
write_generated_file "$all_output_dir/linuxcnc_switchkins_remap_config_cases.json" "JSON config cases" write_json_cases
|
write_generated_file "$all_output_dir/linuxcnc_switchkins_remap_config_cases.json" "JSON config cases" write_json_cases
|
||||||
|
|||||||
Reference in New Issue
Block a user