Skip to content

Commit

Permalink
Add tidy-manifests tool
Browse files Browse the repository at this point in the history
  • Loading branch information
citrus-it committed Oct 2, 2024
1 parent de21d64 commit 16d8f88
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
7 changes: 7 additions & 0 deletions doc/tidy.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
indent: yes
indent-spaces: 4
indent-attributes: yes
wrap: 80
wrap-attributes: yes
output-xml: yes
input-xml: yes
69 changes: 69 additions & 0 deletions tools/tidy-manifests
Original file line number Diff line number Diff line change
@@ -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=(
'<service '
'<create_default_instance'
'<single_instance'
'<instance'
'<dependency'
'<dependent'
'<exec_method'
'<property_group'
'<template'
'<stability'
'<\/service'
'<\/instance'
)

function fatal {
print "$*" >&2
exit 1
}

[ -n "$1" ] || fatal "Syntax: $0 <manifest file>,..."
[ -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

0 comments on commit 16d8f88

Please sign in to comment.