Control: user d...@packages.debian.org
Control: usertags -1 rsn

Andrej Shadura writes ("Bug#940588: git-debpush: pipefail in 
get_file_from_ref"):
> Package: git-debpush
> Version: 9.9
> Severity: important
...
> In line 61, grep -Eq may cause a pipefail if grep exits before git
> ls-tree concludes. With a debug print for $? I can see this:
> 
>     ++ get_file_from_ref debian/source/format
>     ++ local path=debian/source/format
>     ++ git ls-tree --name-only -r refs/heads/debian/buster-security
>     ++ grep -Eq '^debian/source/format$'
>     ++ echo @@@@ 141
> 
> It helped when I replaced it with a redirect:
> 
>     if git ls-tree --name-only -r "$branch" \
>             | grep -E "^$path$" >/dev/null; then
>         git cat-file blob $branch:$path
>     fi
> 
> ++ local path=debian/source/format
> ++ git ls-tree --name-only -r refs/heads/debian/buster-security
> ++ grep -E '^debian/source/format$'
> ++ echo @@@@ 0

I agree with the suggestion to redirect to >/dev/null

Background from irc:

11:37 <Diziet> The thing with pipefail and SIGPIPE is very annoying.
11:37 <Diziet> IMO this is a bug in set -o pipefail
11:38 <Diziet> if ( git ls-tree --name-only -r "$branch" || test $? = 141 ) | 
               ...
11:38 <Diziet> What even weirder this is all in an if
11:39 <andrewsh> I’d just >/dev/null tbh
11:39 <Diziet> http://paste.debian.net/1101208/#

ie:

mariner:~> bash -xec 'set -o pipefail; if yes | head -1 ; then id; fi'
+ set -o pipefail
+ yes
+ head -1
y
mariner:~> 

11:39 <andrewsh> that’s more readable to me at least
11:40 <Diziet> I guess the performance is not really a consideration since it's 
               O(n) either way
11:40 <Diziet> (both because the worst case is O(n) and because the rest of it 
               is O(n))


-- 
Ian Jackson <ijack...@chiark.greenend.org.uk>   These opinions are my own.

If I emailed you from an address @fyvzl.net or @evade.org.uk, that is
a private address which bypasses my fierce spamfilter.

Reply via email to