Josef Sipek <jsipek@xxxxxxxxxxxxxxxxx> writes: [...] >> +get_guarded_series() >> +{ >> + get_series | while read p >> + do >> + [ -z `check_guards $p` ] && echo "$p" > > Having check_guards return 0 or 1 makes things cleaner: > > check_guards "$p" && echo "$p" > >> + done >> +} >> + >> +# usage: check_guards <patch> >> +# Returns t if the patch should be skipped >> +check_guards() >> +{ >> + get_guards "$1" | while read guard >> + do >> + pos=`echo $guard | grep -e "^+"` >> + guard=`echo $guard | sed -e 's/[+-]//'` >> + if [ $pos ]; then >> + # Push +guard *only if* guard selected >> + push=`grep -e "^$guard\$" "$guards_file" > /dev/null; echo $?` >> + [ $push -ne 0 ] && echo t > > [ $push -ne 0 ] && return 1 > This returns from the subshell created by the pipe and the while loop, right? So I'm using: check_guards() { get_guards "$1" | while read guard do pos=`echo $guard | grep -e "^+"` guard=`echo $guard | sed -e 's/^[+-]//'` if [ $pos ]; then # Push +guard *only if* guard selected push=`grep -e "^$guard\$" "$guards_file" > /dev/null; echo $?` [ $push -ne 0 ] && return 1 else # Push -guard *unless* guard selected push=`grep -e "^$guard\$" "$guards_file" > /dev/null; echo $?` [ $push -eq 0 ] && return 1 fi return 0 done return $? } where 1 means push. >> +# usage: get_guards <patch> >> +get_guards() >> +{ >> + grep -e "^$1[[:space:]]*#" < "$series" | sed -e "s/^$1 //" -e 's/#[^+-]*//g' >> +} Should this also be one sed script instead of a grep + sed? >> + >> +# usage: set_guards <patch> <guards> > > I'd try to make it clearer that multiple guards can be specified. > Done with <guards...> now. >> +set_guards() >> +{ >> + p="$1" >> + shift >> + for x in "$@"; do >> + if [ -z $(echo "$x" | grep -e "^[+-]") ]; then > > Is that the only restriction on the guard name? > Yes. On patches, you put a '+guard' or '-guard'. When selecting with guilt-select, it's just 'guard'. The + or - just means 'apply when selected' or 'apply unless selected'. You can edit things manually to make guards with a space in the name, but the mechanism will work even in that case. >> + echo "'$x' is not a valid guard name" >> + else >> + sed -i -e "s/^\($p[[:space:]]*.*\)$/\1 #$x/" "$series" >> + fi >> + done >> +} >> + >> +# usage: unset_guards <patch> <guards> > [...] The rest I'll do. Thanks for the review. Eric - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html