diff options
Diffstat (limited to 'patchadd.in')
-rwxr-xr-x | patchadd.in | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/patchadd.in b/patchadd.in new file mode 100755 index 0000000..95f32c6 --- /dev/null +++ b/patchadd.in @@ -0,0 +1,95 @@ +#!/bin/sh + +# Read in library functions +if ! [ -r @LIB@/patchfns ] +then + echo "Cannot read library @LIB@/patchfns" >&2 + exit 1 +fi +. @LIB@/patchfns + +usage() +{ + echo "Usage: patchadd [-p patchname] filename ..." + if [ x$1 = x-h ] + then + cat <<EOF + +Add one or more files to the topmost or named patch. +Files must be added to the patch before being modified. +Files that are modified by patches on top of the specified +patch cannot be added. + +-p patchname + Patch to add files to. + +EOF + exit 0 + else + exit 1 + fi +} + +options=`getopt -o p:h -- "$@"` + +if [ $? -ne 0 ] +then + usage +fi + +eval set -- "$options" + +while true +do + case "$1" in + -p) + opt_patch=$2 + shift 2 ;; + -h) + usage -h ;; + --) + shift + break ;; + esac +done + +if [ $# -lt 1 ] +then + usage +fi + +patch=$(stripit $opt_patch) +if [ -z "$patch" ] +then + patch=$(top_patch) +fi +if [ -z "$patch" ] +then + echo "No patches seem to be applied" +fi + +if ! is_applied $patch +then + echo "Patch $patch is not applied" + exit 1 +fi + +for file in $* +do + if file_in_patch $file $patch + then + echo "File $file is already in patch $patch" + else + next_patch=$(next_patch_for_file $patch $file) + if [ -n "$next_patch" ] + then + echo "File $file shadowed by patch $next_patch" + exit 1 + fi + + if install_file_in_patch $file $patch + then + echo "File $file added to patch $patch" + fi + fi +done |