#!/bin/bash set -e # stg-fold-files-from - picks changes to one file from another patch. # Only supports picking from one file pattern, but allows to select any range # of hunks from the file, using the -# flag to filterdiff. # Use together with "filterdiff --annotate" in your diff pager, to # identify hunk numbers easily. # Use "-O -U" to get finer hunk granularity for -#. # usage: stg-fold-files-from [-n] [-O ] [-#[-][,]...] # Copyright (c) 2006-2007 Yann Dirson # Subject to the GNU GPL, version 2. PATCH="$1" shift filtercmd=cat hunks= foldflags= showflags=() noact=0 while [ "$#" -gt 0 ]; do case "$1" in -\#*) hunks="$1" ;; -t) foldflags="-t" ;; -n) noact=1 ;; -O) showflags+=(-O "$2"); shift ;; -*) { echo >&2 "unknown flag '$1'"; exit 1; } ;; *) break ;; esac shift done [ "$#" = 1 ] || { echo >&2 "supports one file only"; exit 1; } getpatch() { stg show "${showflags[@]}" "$PATCH" | filterdiff -p1 $hunks -i "$1" } if [ $noact = 1 ]; then getpatch "$1" else getpatch "$1" | stg fold $foldflags fi