#10339: Simplify spkg/pipestatus
------------------------------------------------------------------------+---
 Reporter:  jdemeyer                                                    |       
  Owner:  GeorgSWeber                   
     Type:  defect                                                      |       
 Status:  closed                        
 Priority:  major                                                       |     
Milestone:  sage-4.6.1                    
Component:  scripts                                                     |    
Resolution:  fixed                         
 Keywords:  pipestatus Makefile shell environment tee exit code status  |       
 Author:  Jeroen Demeyer, Leif Leonhardy
 Upstream:  N/A                                                         |      
Reviewer:  Leif Leonhardy                
   Merged:  sage-4.6.1.rc0                                              |   
Work_issues:                                
------------------------------------------------------------------------+---
Changes (by leif):

  * keywords:  pipestatus Makefile => pipestatus Makefile shell environment
               tee exit code status


Old description:

> spkg/pipestatus currently uses two different mechanisms, depending on the
> bash version.  Unfortunately, the two alternatives differ in behaviour
> (the consequence is an {{{install.log}}} file appearing in the wrong
> place).
>
> Consider a command
> {{{
> pipestatus "A && B" "C"
> }}}
>
> Alternative 1 (for new versions of bash) does {{{A && (B | C)}}} while
> alternative 2 (for old versions of bash) does {{{(A && B) | C}}}.
>
> The attached patch makes `pipestatus` behave like alternative 1 for
> ''all'' versions of `bash`.

New description:

 `spkg/pipestatus` currently uses two different mechanisms, depending on
 the `bash` version (>=3.0 or not).  Unfortunately, the two alternatives
 currently differ in behaviour (the consequence in one case being an
 `install.log` file appearing in the wrong place).

 Consider a command
 {{{
 pipestatus "A && B" "C"
 }}}

 '''Alternative 1''' (for new versions of bash) does
 {{{
 #!sh
 A && (B | C)
 }}}
 (which is - without regard of the subshell environment - equivalent to the
 command list without parentheses, i.e. `A && B | C`, since the pipe symbol
 has higher precedence),[[BR]]

 while '''alternative 2''' (for very old versions of bash) does
 {{{
 #!sh
 (A && B) | C
 }}}

 ----

 The attached / merged patch makes `pipestatus` behave like '''alternative
 1''' for ''all'' versions of `bash`, and executes all commands in the
 ''same'' environment.

 It also patches the top-level `Makefile` to no longer depend on
 (previously) varying behavior of `pipestatus` by changing a receipt to
 {{{
 #!sh
         cd some_dir && pipestatus "A" "B"
 }}}
 (where `A` and `B` are simple commands).

--

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/10339#comment:46>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to