Blame tools/xml_insert.sh

Packit Service 2781ba
#!/bin/bash
Packit Service 2781ba
#
Packit Service 2781ba
# Utility script to merge an xml snippet from one file into a document.
Packit Service 2781ba
#
Packit Service 2781ba
# To insert the file foo.inc into bar.xml,
Packit Service 2781ba
# after the first line containing the marker  enter
Packit Service 2781ba
#
Packit Service 2781ba
# xml_insert.sh bar.xml foo foo.inc
Packit Service 2781ba
#
Packit Service 2781ba
# 2005 © Øyvind Kolås
Packit Service 2781ba
#
Packit Service 2781ba
# FIXME: add argument checking / error handling
Packit Service 2781ba
Packit Service 2781ba
: ${AWK="awk"}
Packit Service 2781ba
: ${ECHO="echo"}
Packit Service 2781ba
: ${MKDIR="mkdir"}
Packit Service 2781ba
: ${SED="sed"}
Packit Service 2781ba
: ${Xsed="$SED -e 1s/^X//"}
Packit Service 2781ba
Packit Service 2781ba
# Global variables:
Packit Service 2781ba
EXIT_SUCCESS=0
Packit Service 2781ba
EXIT_FAILURE=1
Packit Service 2781ba
Packit Service 2781ba
dirname="s,/[[^/]]*$,,"
Packit Service 2781ba
basename="s,^.*/,,"
Packit Service 2781ba
Packit Service 2781ba
# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
Packit Service 2781ba
# is ksh but when the shell is invoked as "sh" and the current value of
Packit Service 2781ba
# the _XPG environment variable is not equal to 1 (one), the special
Packit Service 2781ba
# positional parameter $0, within a function call, is the name of the
Packit Service 2781ba
# function.
Packit Service 2781ba
progpath="$0"
Packit Service 2781ba
Packit Service 2781ba
# The name of this program:
Packit Service 2781ba
# In the unlikely event $progname began with a '-', it would play havoc with
Packit Service 2781ba
# func_echo (imagine progname=-n), so we prepend ./ in that case:
Packit Service 2781ba
progname=`$ECHO "X$progpath" | $Xsed -e "$basename" -e 's,^-,./-,'`
Packit Service 2781ba
Packit Service 2781ba
# func_error arg...
Packit Service 2781ba
# Echo program name prefixed message to standard error.
Packit Service 2781ba
func_error ()
Packit Service 2781ba
{
Packit Service 2781ba
    $ECHO "$progname: "${1+"$@"} 1>&2
Packit Service 2781ba
}
Packit Service 2781ba
Packit Service 2781ba
# func_fatal_error arg...
Packit Service 2781ba
# Echo program name prefixed message to standard error, and exit.
Packit Service 2781ba
func_fatal_error ()
Packit Service 2781ba
{
Packit Service 2781ba
    func_error ${1+"$@"}
Packit Service 2781ba
    exit $EXIT_FAILURE
Packit Service 2781ba
}
Packit Service 2781ba
Packit Service 2781ba
# func_mktempdir [string]
Packit Service 2781ba
# Make a temporary directory that won't clash with other running
Packit Service 2781ba
# processes, and avoids race conditions if possible.  If
Packit Service 2781ba
# given, STRING is the basename for that directory.
Packit Service 2781ba
func_mktempdir ()
Packit Service 2781ba
{
Packit Service 2781ba
    my_template="${TMPDIR-/tmp}/${1-$progname}"
Packit Service 2781ba
Packit Service 2781ba
    if test "$opt_dry_run" = ":"; then
Packit Service 2781ba
      # Return a directory name, but don't create it in dry-run mode
Packit Service 2781ba
      my_tmpdir="${my_template}-$$"
Packit Service 2781ba
    else
Packit Service 2781ba
Packit Service 2781ba
      # If mktemp works, use that first and foremost
Packit Service 2781ba
      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
Packit Service 2781ba
Packit Service 2781ba
      if test ! -d "$my_tmpdir"; then
Packit Service 2781ba
        # Failing that, at least try and use $RANDOM to avoid a race
Packit Service 2781ba
        my_tmpdir="${my_template}-${RANDOM-0}$$"
Packit Service 2781ba
Packit Service 2781ba
        save_mktempdir_umask=`umask`
Packit Service 2781ba
        umask 0077
Packit Service 2781ba
        $MKDIR "$my_tmpdir"
Packit Service 2781ba
        umask $save_mktempdir_umask
Packit Service 2781ba
      fi
Packit Service 2781ba
Packit Service 2781ba
      # If we're not in dry-run mode, bomb out on failure
Packit Service 2781ba
      test -d "$my_tmpdir" || \
Packit Service 2781ba
        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
Packit Service 2781ba
    fi
Packit Service 2781ba
Packit Service 2781ba
    $ECHO "X$my_tmpdir" | $Xsed
Packit Service 2781ba
}
Packit Service 2781ba
Packit Service 2781ba
tmp_dir="`func_mktempdir`"
Packit Service 2781ba
tmp_file="$tmp_dir/one"
Packit Service 2781ba
Packit Service 2781ba
cp $1 $tmp_file
Packit Service 2781ba
Packit Service 2781ba
numlines=`wc -l $tmp_file | $AWK '{print $1;}'`
Packit Service 2781ba
splitno=`$AWK "/<\!--$2-->/ { print NR; exit 0; }" $tmp_file`
Packit Service 2781ba
tailno=`expr $numlines - $splitno`
Packit Service 2781ba
Packit Service 2781ba
head -$splitno $tmp_file > $1
Packit Service 2781ba
cat $3 >> $1
Packit Service 2781ba
tail -$tailno $tmp_file >> $1
Packit Service 2781ba
Packit Service 2781ba
rm -rf $tmp_dir
Packit Service 2781ba
Packit Service 2781ba
exit $?