diff --git a/doc/tidy.conf b/doc/tidy.conf new file mode 100644 index 0000000000..47699e78dc --- /dev/null +++ b/doc/tidy.conf @@ -0,0 +1,7 @@ +indent: yes +indent-spaces: 4 +indent-attributes: yes +wrap: 80 +wrap-attributes: yes +output-xml: yes +input-xml: yes diff --git a/tools/tidy-manifests b/tools/tidy-manifests new file mode 100755 index 0000000000..dd9f2c3931 --- /dev/null +++ b/tools/tidy-manifests @@ -0,0 +1,69 @@ +#!/bin/ksh + +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. + +# Copyright 2024 OmniOS Community Edition (OmniOSce) Association. + +# This script reformats SMF manifests to a consistent style. It's not +# necessarily anyone's preferred style, but it is consistent! + +PATH=/usr/bin:/usr/sbin + +typeset -r TIDY=/opt/ooce/bin/tidy +typeset -r __SCRIPTDIR="${0%/*}" +typeset -r CFG="$__SCRIPTDIR/../doc/tidy.conf" +typeset -a ELEMENTS=( + '&2 + exit 1 +} + +[ -n "$1" ] || fatal "Syntax: $0 ,..." +[ -r "$CFG" ] || fatal "Cannot read config file $CFG" + +for mfst in "$@"; do + print "PROCESSING: $mfst" + + # Tidy manifest according to doc/tidy.conf + $TIDY -q -config $CFG -m "$mfst" \ + || fatal "An error occurred processing $mfst" + + # Use only double quotes in manifest + sed -i 's/'"'"'/"/g' "$mfst" + + # Check for nested quotes + sed 's/[^"]//g' "$mfst" | awk ' + length % 2 != 0 { + print "WARNING: line", FNR, "contains nested quotes" + }' + + # Introduce spacing for readability between elements + for i in "${ELEMENTS[@]}"; do + gsed -i "/$i/s/^/\n/" "$mfst" \ + || fatal "An error occurred processing $mfst" + done + + svccfg validate "$mfst" || fatal "$mfst is corrupt" +done +