On Tue, May 13, 2014 at 10:30:48PM +0200, Per Cederqvist wrote:
> If you run something like "guilt header '.*'" the command would crash,
> because the grep comand that tries to ensure that the patch exist
> would detect a match, but the later code expected the match to be
> exact.
> 
> Fixed by comparing exact strings.
> 
> And as a creeping feature "guilt header" will now try to use the
> supplied patch name as an unachored regexp if no exact match was
> found.  If the regexp yields a unique match, it is used; if more than
> one patch matches, the names of all patches are listed and the command
> fails.  (Exercise left to the reader: generalized this so that "guilt
> push" also accepts a unique regular expression.)
> 
> Signed-off-by: Per Cederqvist <ced...@opera.com>
> ---
>  guilt-header | 28 +++++++++++++++++++++++++---
>  1 file changed, 25 insertions(+), 3 deletions(-)
> 
> diff --git a/guilt-header b/guilt-header
> index 41e00cc..4701b31 100755
> --- a/guilt-header
> +++ b/guilt-header
> @@ -45,10 +45,32 @@ esac
>  [ -z "$patch" ] && die "No patches applied."
>  
>  # check that patch exists in the series
> -ret=`get_full_series | grep -e "^$patch\$" | wc -l`
> -if [ $ret -eq 0 ]; then
> -     die "Patch $patch is not in the series"
> +full_series=`get_tmp_file series`
> +get_full_series > "$full_series"
> +found_patch=
> +while read x; do
> +     if [ "$x" = "$patch" ]; then
> +             found_patch="$patch"
> +             break
> +     fi
> +done < "$full_series"

We have to use a temp file instead of a 'get_full_series | while read x; do ...'
because that'd create a subshell, correct?

> +if [ -z "$found_patch" ]; then
> +     TMP_MATCHES=`get_tmp_file series`
> +     grep "$patch" < "$full_series" > "$TMP_MATCHES"
> +     nr=`wc -l < $TMP_MATCHES`
> +     if [ $nr -gt 1 ]; then
> +             echo "$patch does not uniquely identify a patch. Did you mean 
> any of these?" >&2
> +             sed 's/^/  /' "$TMP_MATCHES" >&2
> +             rm -f "$TMP_MATCHES"
> +             exit 1
> +     elif [ $nr -eq 0 ]; then
> +             rm -f "$TMP_MATCHES"
> +             die "Patch $patch is not in the series"
> +     fi
> +     found_patch=`cat $TMP_MATCHES`
> +     rm -f "$TMP_MATCHES"
>  fi
> +patch="$found_patch"

Do we not delete $full_series?

>  
>  # FIXME: warn if we're editing an applied patch
>  
> -- 
> 1.8.3.1
> 

-- 
OpenIndiana ibdm: 8 cores, 12 GB RAM
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to