Opened 10 years ago
Last modified 9 years ago
#9811 closed defect
`sage -i ...` exits with 0, even if it is unable to install a package. — at Version 7
Reported by: | drkirkby | Owned by: | GeorgSWeber |
---|---|---|---|
Priority: | major | Milestone: | sage-4.7.2 |
Component: | scripts | Keywords: | sage-sage return code status pipestatus tee |
Cc: | leif, mpatel, jhpalmieri | Merged in: | |
Authors: | Leif Leonhardy | Reviewers: | |
Report Upstream: | N/A | Work issues: | |
Branch: | Commit: | ||
Dependencies: | #10157 | Stopgaps: |
Description (last modified by )
I wanted to do some testing of Sage in a loop and would check the return code to see if what I used worked or not. But this is impossible, as Sage appears to exit with 0, even if it should not have. In the example below, I try to install a non-existent package using Sage. The return code in a case like this should be non-zero, but it is not.
drkirkby@hawk:~/sage-4.5.2$ ./sage -f some-non-existant-package Force installing some-non-existant-package Calling sage-spkg on some-non-existant-package Warning: Attempted to overwrite SAGE_ROOT environment variable Building Sage on Solaris in 64-bit mode Creating SAGE_LOCAL/lib/sage-64.txt since it does not exist Detected SAGE64 flag Building Sage on Solaris in 64-bit mode some-non-existant-package Machine: SunOS hawk 5.11 snv_134 i86pc i386 i86pc Deleting directories from past builds of previous/current versions of some-non-existant-package /export/home/drkirkby/sage-4.5.2/local/bin/sage-spkg: file some-non-existant-package does not exist Attempting to download it. http://www.sagemath.org//packages/optional/some-non-existant-package.spkg --> some-non-existant-package.spkg [ ] http://www.sagemath.org//packages/standard/some-non-existant-package.spkg --> some-non-existant-package.spkg [ ] http://www.sagemath.org//packages/experimental/some-non-existant-package.spkg --> some-non-existant-package.spkg [ ] http://www.sagemath.org//packages/archive/some-non-existant-package.spkg --> some-non-existant-package.spkg [ ] ********************************************************************** * Unable to download some-non-existant-package * Please see http://www.sagemath.org//packages for a list of valid * packages or check the package name. ********************************************************************** sage: Failed to download package some-non-existant-package from http://www.sagemath.org/ drkirkby@hawk:~/sage-4.5.2$ $? bash: 0: command not found drkirkby@hawk:~/sage-4.5.2$
The same happens if one uses sage -i
to install a package. If it fails, the exit code is still 0.
In contrast, if I try this with a well written command like ls
drkirkby@hawk:~/sage-4.5.2$ ls some-non-existant-package some-non-existant-package: No such file or directory drkirkby@hawk:~/sage-4.5.2$ $? bash: 2: command not found
the exit code is non-zero - in this case 2.
Also on a similar theme is #9799, showing that make
can exit with the wrong code too.
Apply
to the Sage scripts repository.
Change History (7)
comment:1 in reply to: ↑ description ; follow-up: ↓ 2 Changed 10 years ago by
comment:2 in reply to: ↑ 1 Changed 10 years ago by
- Description modified (diff)
Replying to leif:
Well, you did
sage -f ...
... I wonder what Sage returns if you dosage -i ...
instead... ;-)
The Sage. It still exits with an exit code of zero.
Btw,
sage-spkg
has lots of other flaws. I'm considering writing (and using) my own version, since I doubt the bunch of changes I aim at would get merged soon... (Same for the top-level Makefile, which by the way was namedmakefile
, I guess by some DOS programmer.)Hopefully not too many people read our tickets... :D
More, should I think.
Dave
comment:3 Changed 10 years ago by
From sage-sage
:
... install() { cd "$SAGE_ROOT/spkg" if [ $# -lt 2 ]; then sage-spkg exit $? fi OPT="$1" shift if [ "$1" = '-m' -o "$1" = '-s' ]; then OPT=$OPT" "$1 shift fi SAGE_LOGS="$SAGE_ROOT/spkg/logs" if [ ! -d "$SAGE_LOGS" ]; then mkdir -p "$SAGE_LOGS" fi for PKG in "$@" do echo "Calling sage-spkg on $PKG" PKG_NAME=`echo "$PKG" | sed -e "s/\.spkg$//"` PKG_NAME=`basename "$PKG_NAME"` case $PKG in /*) sage-spkg $OPT "$PKG" 2>&1 | (trap "" SIGINT; tee -a ../install.log "$SAGE_LOGS/$PKG_NAME".log) ;; *) sage-spkg $OPT "$CUR/$PKG" 2>&1 | (trap "" SIGINT; tee -a ../install.log "$SAGE_LOGS/$PKG_NAME".log) ;; esac if [ $? -ne 0 ]; then exit 1 fi shift done exit $? } ... if [ "$1" = '-i' ]; then shift echo "Installing $@" install " " "$@" fi if [ "$1" = '-f' ]; then shift echo "Force installing $@" install -f "$@" fi ...
So once again, we get the exit status of tee
rather than that of sage-spkg
.
comment:4 Changed 10 years ago by
- Description modified (diff)
Using pipestatus
there, too (i.e. in sage-sage
) most probably requires #10157.
comment:5 Changed 10 years ago by
- Milestone changed from sage-4.6 to sage-4.6.1
comment:6 Changed 10 years ago by
comment:7 Changed 9 years ago by
- Component changed from build to scripts
- Dependencies set to #10157
- Description modified (diff)
- Keywords sage-sage return code status pipestatus tee added
- Status changed from new to needs_review
- Summary changed from sage exits with 0, even if it is unable to install a package. to `sage -i ...` exits with 0, even if it is unable to install a package.
Attached patch fixes the exit code (by using pipestatus
) and a few minor things in that area of sage-sage
.
(I haven't changed more since there are other tickets already touching sage-sage
especially there, which may need slight rebasing on the patch here though.)
Replying to drkirkby:
Well, you did
sage -f ...
...A well written command like
rm
exits with a zero status if you use-f
:I wonder what Sage returns if you do
sage -i ...
instead... ;-)Btw,
sage-spkg
has lots of other flaws. I'm considering writing (and using) my own version, since I doubt the bunch of changes I aim at would get merged soon... (Same for the top-level Makefile, which by the way was namedmakefile
, I guess by some DOS programmer.)Hopefully not too many people read our tickets... :D