Support conversion of make.conf-style files.
The script is very cautious, and may miss some; checking the results by hand is absolutely vital.
This commit is contained in:
parent
6b15ac9b7e
commit
7cc980c36f
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=298824
1 changed files with 89 additions and 19 deletions
|
@ -5,26 +5,96 @@
|
|||
# This script makes a backup of the ports OPTIONS database and then converts
|
||||
# all of the saved files to the new format.
|
||||
|
||||
PORT_DBDIR=$(make -C /usr/ports/shells/bash -V PORT_DBDIR)
|
||||
usage()
|
||||
{
|
||||
<<EOF cat
|
||||
Usage:
|
||||
|
||||
tar cfz $(mktemp /tmp/optionsbackup.tar.gz.XXX) $PORT_DBDIR
|
||||
$0 -p
|
||||
|
||||
for optionsfile in $PORT_DBDIR/*/options
|
||||
do if grep -q ^WITH $optionsfile ; then
|
||||
options_read=
|
||||
echo "Converting $optionsfile"
|
||||
tmpfile=$(mktemp /tmp/optionsconvert.XXXXXXX) || exit 1
|
||||
grep '^[#_]' $optionsfile > $tmpfile
|
||||
for option in $(sed -ne 's/^WITH_\([^=]*\)=true/\1/p' < $optionsfile)
|
||||
do echo "OPTIONS_FILE_SET+=$option" >> $tmpfile
|
||||
options_read="${options_read} $option"
|
||||
Converts the ports OPTIONS database from WITH_/WITHOUT_ format to
|
||||
OPTIONS_FILE_SET format. A backup tar archive is created and left in /tmp.
|
||||
|
||||
$0 -f [filename]
|
||||
|
||||
Converts filename (in WITH_/WITHOUT_ format, for example make.conf) into
|
||||
OPTIONS_SET format.
|
||||
|
||||
XXX The output must be checked; the script attempts to avoid changes that
|
||||
make no sense, but some may slip through. To avoid nonsensical conversions
|
||||
(such as WITH_*_VER) only WITH_ variables that are set to "true" or "yes"
|
||||
(case-insensitive, with or without quotes) will be converted.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
args=$(getopt pf: $*)
|
||||
if [ $? -ne 0 ]; then
|
||||
usage;
|
||||
exit 2
|
||||
fi
|
||||
|
||||
set -- $args
|
||||
|
||||
case "$1" in
|
||||
-p)
|
||||
PORT_DBDIR=$(make -C /usr/ports/shells/bash -V PORT_DBDIR)
|
||||
|
||||
tar cfz $(mktemp /tmp/optionsbackup.tar.gz.XXX) $PORT_DBDIR
|
||||
|
||||
for optionsfile in $PORT_DBDIR/*/options
|
||||
do if grep -q ^WITH $optionsfile ; then
|
||||
options_read=
|
||||
echo "Converting $optionsfile"
|
||||
tmpfile=$(mktemp /tmp/optionsconvert.XXXXXXX) || exit 1
|
||||
grep '^[#_]' $optionsfile > $tmpfile
|
||||
for option in $(sed -ne 's/^WITH_\([^=]*\)=true/\1/p' < $optionsfile)
|
||||
do echo "OPTIONS_FILE_SET+=$option" >> $tmpfile
|
||||
options_read="${options_read} $option"
|
||||
done
|
||||
for option in $(sed -ne 's/^WITHOUT_\([^=]*\)=true/\1/p' < $optionsfile)
|
||||
do echo "OPTIONS_FILE_UNSET+=$option" >> $tmpfile
|
||||
options_read="${options_read} $option"
|
||||
done
|
||||
echo "_FILE_COMPLETE_OPTIONS_LIST=$options_read" >> $tmpfile
|
||||
mv $tmpfile $optionsfile
|
||||
chmod 644 $optionsfile
|
||||
fi
|
||||
done
|
||||
for option in $(sed -ne 's/^WITHOUT_\([^=]*\)=true/\1/p' < $optionsfile)
|
||||
do echo "OPTIONS_FILE_UNSET+=$option" >> $tmpfile
|
||||
options_read="${options_read} $option"
|
||||
;;
|
||||
-f)
|
||||
filename=$2
|
||||
if [ ! -f $filename ]
|
||||
then echo $filename does not exist!
|
||||
exit 2
|
||||
fi
|
||||
|
||||
tmpfile=$(mktemp /tmp/makeconfconvert.XXXXXXX) || exit 1
|
||||
|
||||
IFS='
|
||||
'
|
||||
for line in $(cat $filename)
|
||||
do if $(echo $line | grep -Eq '(PKGNG|DEBUG)')
|
||||
then echo $line >> $tmpfile
|
||||
else echo $line | sed -E \
|
||||
-e 's,^WITH_([^=]*)=[ ]*.?[TtYy][RrEe][UuSs][Ee]?.?,OPTIONS_SET+= \1,' \
|
||||
-e 's,^WITHOUT_([^=]*)=[ ]*.?[TtYy][RrEe][UuSs][Ee]?.?,OPTIONS_UNSET+= \1,' \
|
||||
>> $tmpfile
|
||||
fi
|
||||
done
|
||||
echo "_FILE_COMPLETE_OPTIONS_LIST=$options_read" >> $tmpfile
|
||||
mv $tmpfile $optionsfile
|
||||
chmod 644 $optionsfile
|
||||
fi
|
||||
done
|
||||
|
||||
diff -yW 80 $filename $tmpfile
|
||||
|
||||
<<EOF cat
|
||||
|
||||
The results are stored in $tmpfile; please check it for
|
||||
sanity and copy it back over the original file (remember to keep a backup
|
||||
copy of the original file!)
|
||||
|
||||
EOF
|
||||
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
|
|
Loading…
Reference in a new issue