[tcsh] tcsh: support both $anyerror and $tcsh_posix_status

Pavel Raiskup praiskup at fedoraproject.org
Wed Aug 27 15:05:48 UTC 2014


commit 804e62644c28b1e4aea85c9bb55dad1489ba0227
Author: Pavel Raiskup <praiskup at redhat.com>
Date:   Wed Aug 27 16:17:54 2014 +0200

    tcsh: support both $anyerror and $tcsh_posix_status
    
    Before, the $tcsh_posix_status was added but the $anyerror support
    was removed, but we need to have both.
    
    Resolves: #1129703
    Version: 6.18.01-12

 tcsh-6.18.01-introduce-tcsh_posix_status.patch |  145 ++++++++++++++++++++++++
 tcsh-6.18.01-posix-exit-status-value.patch     |  123 --------------------
 tcsh.spec                                      |    3 +-
 3 files changed, 147 insertions(+), 124 deletions(-)
---
diff --git a/tcsh-6.18.01-introduce-tcsh_posix_status.patch b/tcsh-6.18.01-introduce-tcsh_posix_status.patch
new file mode 100644
index 0000000..d8ddd40
--- /dev/null
+++ b/tcsh-6.18.01-introduce-tcsh_posix_status.patch
@@ -0,0 +1,145 @@
+From 5f012d155159b96f2a458ba047085cb1b348befc Mon Sep 17 00:00:00 2001
+From: Pavel Raiskup <praiskup at redhat.com>
+Date: Mon, 28 Jul 2014 14:47:33 +0200
+Subject: [PATCH 13/15] downstream: implement variable tcsh_posix_status
+
+This patch partially reverts the dist-git commit e0b2d458fda4
+because we _don't_ really want drop upstream-supported 'anyerror'
+variable.  And we can not drop tcsh_posix_status neither, as we
+already support that in RHEL5+ downstream.
+
+So from now, if "!defined(anyerror) ||
+defined(tcsh_posix_status)", tcsh behaves, with regards to
+pipelines, same way as POSIX-like shells.
+
+Note: This feature is left undocumented intentionaly, just to push people use
+the upstream supported $anyerror.
+
+Resolves: #1129703
+Related: #759132
+
+---
+ sh.c               |  2 ++
+ sh.h               |  1 +
+ sh.proc.c          |  2 +-
+ sh.set.c           |  5 +++++
+ tc.const.c         |  2 ++
+ tests/variables.at | 28 ++++++++++++++++++++++++++++
+ 6 files changed, 39 insertions(+), 1 deletion(-)
+
+diff --git a/sh.c b/sh.c
+index f897317..498bf25 100644
+--- a/sh.c
++++ b/sh.c
+@@ -354,6 +354,8 @@ main(int argc, char **argv)
+     anyerror = 1;		/* for compatibility */
+     setcopy(STRanyerror, STRNULL, VAR_READWRITE);
+ 
++    tcsh_posix_status = 0;
++
+     /* Default history size to 100 */
+     setcopy(STRhistory, str2short("100"), VAR_READWRITE);
+ 
+diff --git a/sh.h b/sh.h
+index 4e3f13c..74b7719 100644
+--- a/sh.h
++++ b/sh.h
+@@ -597,6 +597,7 @@ EXTERN int    editing IZERO;	/* doing filename expansion and line editing */
+ EXTERN int    noediting IZERO;	/* initial $term defaulted to noedit */
+ EXTERN int    bslash_quote IZERO;/* PWP: tcsh-style quoting?  (in sh.c) */
+ EXTERN int    anyerror IZERO;	/* propagate errors from pipelines/backq */
++EXTERN int    tcsh_posix_status	IZERO;	/* negation for anyerror */
+ EXTERN int    compat_expr IZERO;/* csh-style expressions? */
+ EXTERN int    isoutatty IZERO;	/* is SHOUT a tty */
+ EXTERN int    isdiagatty IZERO;/* is SHDIAG a tty */
+diff --git a/sh.proc.c b/sh.proc.c
+index f2356d1..e32ebda 100644
+--- a/sh.proc.c
++++ b/sh.proc.c
+@@ -560,7 +560,7 @@ pjwait(struct process *pp)
+     do {
+ 	/* In case of pipelines only the result of the last
+ 	 * command should be taken in account */
+-	if (!anyerror && !(fp->p_flags & PBRACE)
++	if ((!anyerror || tcsh_posix_status) && !(fp->p_flags & PBRACE)
+ 		&& ((fp->p_flags & PPOU) || (fp->p_flags & PBACKQ)))
+ 	    continue;
+ 	if (fp->p_reason)
+diff --git a/sh.set.c b/sh.set.c
+index 0f98a2b..8d660e0 100644
+--- a/sh.set.c
++++ b/sh.set.c
+@@ -109,6 +109,9 @@ update_vars(Char *vp)
+     else if (eq(vp, STRanyerror)) {
+ 	anyerror = 1;
+     }
++    else if (eq(vp, STRtcsh_posix_status)) {
++	tcsh_posix_status = 1;
++    }
+     else if (eq(vp, STRsymlinks)) {
+ 	Char *pn = varval(vp);
+ 
+@@ -768,6 +771,8 @@ unset(Char **v, struct command *c)
+ 	loginsh = 0;
+     if (adrof(STRanyerror) == 0)
+ 	anyerror = 0;
++    if (adrof(STRtcsh_posix_status) == 0)
++	tcsh_posix_status = 0;
+     if (adrof(STRwordchars) == 0)
+ 	word_chars = STR_WORD_CHARS;
+     if (adrof(STRedit) == 0)
+diff --git a/tc.const.c b/tc.const.c
+index 641e234..d942542 100644
+--- a/tc.const.c
++++ b/tc.const.c
+@@ -44,6 +44,8 @@ Char STRrootdefautologout[] = { '1', '5', '\0' };
+ Char STRautomatic[]	= { 'a', 'u', 't', 'o', 'm', 'a', 't', 'i', 'c',
+ 			    '\0' };
+ Char STRanyerror[]	= { 'a', 'n', 'y', 'e', 'r', 'r', 'o', 'r', '\0' };
++Char STRtcsh_posix_status[] = {'t', 'c', 's', 'h', '_', 'p', 'o', 's', 'i', 'x',
++			       '_', 's', 't', 'a', 't', 'u', 's', '\0' };
+ Char STRhangup[]	= { 'h', 'a', 'n', 'g', 'u', 'p', '\0' };
+ Char STRaout[]		= { 'a', '.', 'o', 'u', 't', '\0' };
+ Char STRtty[]		= { 't', 't', 'y', '\0' };
+diff --git a/tests/variables.at b/tests/variables.at
+index 424e4da..f270e59 100644
+--- a/tests/variables.at
++++ b/tests/variables.at
+@@ -937,6 +937,34 @@ AT_CHECK([tcsh -f -c 'echo $?tcsh'], ,
+ AT_CLEANUP
+ 
+ 
++AT_SETUP([$ tcsh_posix_status])
++
++AT_DATA([exit_status.csh],
++[[echo $?tcsh_posix_status
++false | true ; echo $?
++set tcsh_posix_status = 1 ; echo $?tcsh_posix_status $tcsh_posix_status
++false | true ; echo $?
++set tcsh_posix_status = 0 ; echo $?tcsh_posix_status $tcsh_posix_status
++# Note it is still set!
++false | true ; echo $?
++unset tcsh_posix_status ; echo $?tcsh_posix_status
++false | true ; echo $?
++]])
++
++AT_CHECK([tcsh -f exit_status.csh],,
++[0
++1
++1 1
++0
++1 0
++0
++0
++1
++])
++
++AT_CLEANUP
++
++
+ AT_SETUP([$ term])
+ 
+ AT_DATA([term.csh],
+-- 
+1.9.3
+
diff --git a/tcsh.spec b/tcsh.spec
index 08ce320..6e5b6c5 100644
--- a/tcsh.spec
+++ b/tcsh.spec
@@ -23,7 +23,7 @@ Patch33: tcsh-6.18.00-history-merge.patch
 Patch34: tcsh-6.18.01-repeated-words-man.patch
 # Proposed upstream - http://mx.gw.com/pipermail/tcsh-bugs/2013-April/000833.html
 Patch35: tcsh-6.18.01-elf-interpreter.patch
-Patch36: tcsh-6.18.01-posix-exit-status-value.patch
+Patch36: tcsh-6.18.01-introduce-tcsh_posix_status.patch
 Patch37: tcsh-6.18.01-reverse-history-handling-in-loops.patch
 Patch38: tcsh-6.18.01-skip-tty-tests.patch
 
@@ -135,6 +135,7 @@ fi
 - use the %%autosetup macro
 - enable testsuite in %%check
 - skip tests which are not able to be run without tty
+- support both $anyerror & $tcsh_posix_status (#1129703)
 
 * Mon Aug 18 2014 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 6.18.01-11
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild


More information about the scm-commits mailing list