From 121ecfd2349f9f6c78bffa7e9d6c9b1fe7fb8092a7df4a118a7c5234854e4d06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ismail=20D=C3=B6nmez?= Date: Wed, 25 Dec 2013 12:35:38 +0000 Subject: [PATCH] - Update to version 5.0.4 * Small bugfix release - Add zsh-pipefix.patch to import pipe fixes from zsh.git - Remove upstream patches * zsh-osc-suseversion.patch * zsh-zypper-completion.patch OBS-URL: https://build.opensuse.org/package/show/shells/zsh?expand=0&rev=123 --- zsh-5.0.2.tar.bz2 | 3 - zsh-5.0.4.tar.bz2 | 3 + zsh-osc-suseversion.patch | 15 ---- zsh-pipefix.patch | 159 ++++++++++++++++++++++++++++++++++++ zsh-zypper-completion.patch | 26 ------ zsh.changes | 10 +++ zsh.spec | 23 ++---- 7 files changed, 178 insertions(+), 61 deletions(-) delete mode 100644 zsh-5.0.2.tar.bz2 create mode 100644 zsh-5.0.4.tar.bz2 delete mode 100644 zsh-osc-suseversion.patch create mode 100644 zsh-pipefix.patch delete mode 100644 zsh-zypper-completion.patch diff --git a/zsh-5.0.2.tar.bz2 b/zsh-5.0.2.tar.bz2 deleted file mode 100644 index eff99b8..0000000 --- a/zsh-5.0.2.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eb220ae5a8076191ec6b4c6a5a2f18122d074a19f25b45f0320b44b8166c5a03 -size 3025767 diff --git a/zsh-5.0.4.tar.bz2 b/zsh-5.0.4.tar.bz2 new file mode 100644 index 0000000..45c0356 --- /dev/null +++ b/zsh-5.0.4.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e96fe7c9440adb4169fd4b2f0d9a5c8bdf1498423bc2efd2c3205ef7c1de4ee8 +size 3093541 diff --git a/zsh-osc-suseversion.patch b/zsh-osc-suseversion.patch deleted file mode 100644 index f29d927..0000000 --- a/zsh-osc-suseversion.patch +++ /dev/null @@ -1,15 +0,0 @@ -Index: zsh/Completion/openSUSE/Command/_osc -=================================================================== ---- zsh.orig/Completion/openSUSE/Command/_osc -+++ zsh/Completion/openSUSE/Command/_osc -@@ -16,8 +16,8 @@ - # version 0.2 - # - --OSC_BUILD_TARGETS="openSUSE_11.2 openSUSE_11.3 openSUSE_11.4 openSUSE_12.1 openSUSE_Tumbleweed openSUSE_Factory SLE_11_SP1" --OSC_PROJECTS="openSUSE:Factory openSUSE:Tumbleweed openSUSE:12.1 openSUSE:11.4 openSUSE:11.2 openSUSE:11.3" -+OSC_BUILD_TARGETS="openSUSE_12.1 openSUSE_12.2 openSUSE_12.3 openSUSE_Tumbleweed openSUSE_Factory SLE_11_SP2" -+OSC_PROJECTS="openSUSE:Factory openSUSE:Tumbleweed openSUSE:12.3 openSUSE:12.2 openSUSE:12.1" - - # user defined variables $OSC_BUILD_TARGETS_EXTRA and - # $OSC_PROJECTS_EXTRA can add to the project/build target list diff --git a/zsh-pipefix.patch b/zsh-pipefix.patch new file mode 100644 index 0000000..3a0d0f0 --- /dev/null +++ b/zsh-pipefix.patch @@ -0,0 +1,159 @@ +diff --git a/Src/exec.c b/Src/exec.c +index dccdc2b..4480033 100644 +--- a/Src/exec.c ++++ b/Src/exec.c +@@ -1691,6 +1691,7 @@ execpline2(Estate state, wordcode pcode, + execcmd(state, input, output, how, last1 ? 1 : 2); + else { + int old_list_pipe = list_pipe; ++ int subsh_close = -1; + Wordcode next = state->pc + (*state->pc), pc; + wordcode code; + +@@ -1738,6 +1739,7 @@ execpline2(Estate state, wordcode pcode, + } else { + /* otherwise just do the pipeline normally. */ + addfilelist(NULL, pipes[0]); ++ subsh_close = pipes[0]; + execcmd(state, input, pipes[1], how, 0); + } + zclose(pipes[1]); +@@ -1750,6 +1752,8 @@ execpline2(Estate state, wordcode pcode, + execpline2(state, *state->pc++, how, pipes[0], output, last1); + list_pipe = old_list_pipe; + cmdpop(); ++ if (subsh_close != pipes[0]) ++ zclose(pipes[0]); + } + } + +diff --git a/Test/A05execution.ztst b/Test/A05execution.ztst +index c8320a1..61d24fe 100644 +--- a/Test/A05execution.ztst ++++ b/Test/A05execution.ztst +@@ -202,3 +202,15 @@ F:the bug is still there or it reappeared. See workers-29973 for details. + 0:Check $pipestatus with a known difficult case + >1 0 1 0 0 + F:This similar test was triggering a reproducible failure with pipestatus. ++ ++ { unsetopt MONITOR } 2>/dev/null ++ coproc { read -Et 5 || kill -INT $$ } ++ print -u $ZTST_fd 'This test takes 5 seconds to fail...' ++ { printf "%d\n" {1..20000} } | ( read -E ) ++ print -p done ++ read -Ep ++0:Bug regression: piping a shell construct to an external process may hang ++>1 ++>done ++F:This test checks for a file descriptor leak that could cause the left ++F:side of a pipe to block on write after the right side has exited +diff --git a/Src/exec.c b/Src/exec.c +index 4480033..f16cfd3 100644 +--- a/Src/exec.c ++++ b/Src/exec.c +@@ -2389,7 +2389,7 @@ static void + execcmd(Estate state, int input, int output, int how, int last1) + { + HashNode hn = NULL; +- LinkList args; ++ LinkList args, filelist = NULL; + LinkNode node; + Redir fn; + struct multio *mfds[10]; +@@ -2911,6 +2911,7 @@ execcmd(Estate state, int input, int output, int how, int last1) + flags |= ESUB_KEEPTRAP; + if (type == WC_SUBSH && !(how & Z_ASYNC)) + flags |= ESUB_JOB_CONTROL; ++ filelist = jobtab[thisjob].filelist; + entersubsh(flags); + close(synch[1]); + forked = 1; +@@ -3264,6 +3265,7 @@ execcmd(Estate state, int input, int output, int how, int last1) + + if (is_shfunc) { + /* It's a shell function */ ++ pipecleanfilelist(filelist); + execshfunc((Shfunc) hn, args); + } else { + /* It's a builtin */ +@@ -3342,6 +3344,7 @@ execcmd(Estate state, int input, int output, int how, int last1) + DPUTS(varspc, + "BUG: assignment before complex command"); + list_pipe = 0; ++ pipecleanfilelist(filelist); + /* If we're forked (and we should be), no need to return */ + DPUTS(last1 != 1 && !forked, "BUG: not exiting?"); + DPUTS(type != WC_SUBSH, "Not sure what we're doing."); +diff --git a/Src/jobs.c b/Src/jobs.c +index 371b8eb..a321172 100644 +--- a/Src/jobs.c ++++ b/Src/jobs.c +@@ -1173,6 +1173,30 @@ addfilelist(const char *name, int fd) + zaddlinknode(ll, jf); + } + ++/* Clean up pipes no longer needed associated with a job */ ++ ++/**/ ++void ++pipecleanfilelist(LinkList filelist) ++{ ++ LinkNode node; ++ ++ if (!filelist) ++ return; ++ node = firstnode(filelist); ++ while (node) { ++ Jobfile jf = (Jobfile)getdata(node); ++ if (jf->is_fd) { ++ LinkNode next = nextnode(node); ++ zclose(jf->u.fd); ++ (void)remnode(filelist, node); ++ zfree(jf, sizeof(*jf)); ++ node = next; ++ } else ++ incnode(node); ++ } ++} ++ + /* Finished with list of files for a job */ + + /**/ +@@ -1415,19 +1439,7 @@ zwaitjob(int job, int wait_cmd) + * we can't deadlock on the fact that those still exist, so + * that's not a problem. + */ +- LinkNode node = firstnode(jn->filelist); +- while (node) { +- Jobfile jf = (Jobfile)getdata(node); +- if (jf->is_fd) { +- LinkNode next = nextnode(node); +- (void)remnode(jn->filelist, node); +- zclose(jf->u.fd); +- zfree(jf, sizeof(*jf)); +- node = next; +- } else { +- incnode(node); +- } +- } ++ pipecleanfilelist(jn->filelist); + } + while (!errflag && jn->stat && + !(jn->stat & STAT_DONE) && +diff --git a/Test/A05execution.ztst b/Test/A05execution.ztst +index 61d24fe..6abfd8b 100644 +--- a/Test/A05execution.ztst ++++ b/Test/A05execution.ztst +@@ -207,10 +207,12 @@ F:This similar test was triggering a reproducible failure with pipestatus. + coproc { read -Et 5 || kill -INT $$ } + print -u $ZTST_fd 'This test takes 5 seconds to fail...' + { printf "%d\n" {1..20000} } | ( read -E ) ++ hang(){ printf "%d\n" {2..20000} | cat }; hang | ( read -E ) + print -p done + read -Ep + 0:Bug regression: piping a shell construct to an external process may hang + >1 ++>2 + >done + F:This test checks for a file descriptor leak that could cause the left + F:side of a pipe to block on write after the right side has exited diff --git a/zsh-zypper-completion.patch b/zsh-zypper-completion.patch deleted file mode 100644 index 4021c37..0000000 --- a/zsh-zypper-completion.patch +++ /dev/null @@ -1,26 +0,0 @@ -Index: zsh/Completion/openSUSE/Command/_zypper -=================================================================== ---- zsh.orig/Completion/openSUSE/Command/_zypper -+++ zsh/Completion/openSUSE/Command/_zypper -@@ -28,11 +28,10 @@ _zypper() { - local hline - local -a cmdlist - local tag=0 -- _call_program help-commands zypper help | while read -A hline; do -+ _call_program help-commands LANG=C zypper help | sed -e ':a;N;$!ba;s/\n\t\t\t\t/ /g' | while read -A hline; do - # start parsing with "Global Options:" - [[ $hline =~ "^Global Options:" ]] && tag=1 - [[ $tag = 0 ]] && continue -- [[ $hline[1] =~ ^\t\t\t\t ]] && continue - # all commands have to start with lower case letters - [[ $hline[1] =~ ^[A-Z] ]] && continue - (( ${#hline} < 2 )) && continue -@@ -51,7 +50,7 @@ _zypper_cmd_do() { - local hline - local -a cmdlist - local tag=0 -- _call_program help-commands zypper help $cmd | while read -A hline; do -+ _call_program help-commands LANG=C zypper help $cmd | while read -A hline; do - # start parsing from "Options:" - [[ $hline =~ "^Command options:" ]] && tag=1 - [[ $tag = 0 ]] && continue diff --git a/zsh.changes b/zsh.changes index 4f100ab..09997fc 100644 --- a/zsh.changes +++ b/zsh.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Wed Dec 25 12:25:03 UTC 2013 - idonmez@suse.com + +- Update to version 5.0.4 + * Small bugfix release +- Add zsh-pipefix.patch to import pipe fixes from zsh.git +- Remove upstream patches + * zsh-osc-suseversion.patch + * zsh-zypper-completion.patch + ------------------------------------------------------------------- Mon Apr 22 09:22:02 UTC 2013 - idonmez@suse.com diff --git a/zsh.spec b/zsh.spec index 9b94ff5..4c947e8 100644 --- a/zsh.spec +++ b/zsh.spec @@ -17,7 +17,7 @@ Name: zsh -Version: 5.0.2 +Version: 5.0.4 Release: 0 Summary: Shell with comprehensive completion License: MIT @@ -36,9 +36,8 @@ Source15: zshenv.rhs Source16: dotzshrc.rh Source17: zshprompt.pl %endif -Patch1: zsh-zypper-completion.patch -Patch2: zsh-osc-suseversion.patch -Patch3: trim-unneeded-completions.patch +Patch1: trim-unneeded-completions.patch +Patch2: zsh-pipefix.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %if 0%{?suse_version} Requires(pre): %{install_info_prereq} @@ -94,11 +93,10 @@ This package contains the Zsh manual in html format. %prep %setup -q -n %{name}-%{version} -%patch1 -p1 -%patch2 -p1 %if 0%{?suse_version} -%patch3 -p1 +%patch1 -p1 %endif +%patch2 -p1 # Remove executable bit chmod 0644 Etc/changelog2html.pl @@ -129,15 +127,6 @@ perl -p -i -e 's|/usr/local/bin|%{_bindir}|' \ make all info html -# make help text files -install -d Help -pushd Help/ -troff -Tlatin1 -t -mandoc ../Doc/zshbuiltins.1 | \ - grotty -cbou | \ - sed -e 's/±/{+|-}/' | \ - ../Util/helpfiles -popd - # generate intro.ps groff -Tps -ms Doc/intro.ms > intro.ps @@ -179,7 +168,7 @@ done # install help files install -m 0755 -Dd %{buildroot}%{_datadir}/%{name}/%{version}/help -install -m 0644 Help/* %{buildroot}%{_datadir}/%{name}/%{version}/help/ +install -m 0644 Doc/help/* %{buildroot}%{_datadir}/%{name}/%{version}/help/ # link zsh binary ln -sf %{_bindir}/zsh %{buildroot}/bin/zsh