forked from omniosorg/omnios-extra
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtidy-manifests
executable file
·75 lines (61 loc) · 1.98 KB
/
tidy-manifests
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/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
# Produce de-tokenised version of the manifest suitable for validation
typeset tf=`mktemp`
sed 's/\$(\([a-zA-Z]*\))/\1/g' < "$mfst" > "$tf"
svccfg validate "$tf"
typeset -i rc=$?
rm -f $tf
((rc == 0)) || fatal "$mfst is corrupt"
done