Opened 11 years ago

Closed 9 months ago

#11786 closed defect (invalid)

Maxima fails to build if $HOME is not accessible

Reported by: leif Owned by: tbd
Priority: minor Milestone: sage-duplicate/invalid/wontfix
Component: packages: standard Keywords: maxima.fasb error
Cc: vbraun, dimpase, slelievre Merged in:
Authors: Reviewers: Samuel Lelièvre
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges

Description (last modified by chapoton)

...
;;; Loading "/tmp/leif/sage-4.7.2.alpha2/spkg/build/maxima-5.23.2.p0/src/src/../lisp-utils/defsystem.lisp"
;;; Loading "/tmp/leif/sage-4.7.2.alpha2/spkg/build/maxima-5.23.2.p0/src/src/maxima-package.lisp"
;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=0
;;;
;;; End of Pass 1.
;;; Note:
;;;   Invoking external command:
;;;   gcc -I. -I/tmp/leif/sage-4.7.2.alpha2/local/include/ -march=native -O3 -g -DHONORS_CPPFLAGS -I/tmp/leif/sage-4.7.2.alpha2/local/include -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -g -O2 -march=native -O3 -fno-strict-aliasing -fomit-frame-pointer -g -DHONORS_CFLAGS -fPIC -Dlinux -O2 -w -c /tmp/ecl001Oj22KE.c -o /tmp/ecl001Oj22KE.o 
An error occurred during initialization:
Filesystem error with pathname #P"/home/".
Either
 1) the file does not exist, or
 2) we are not allow to access the file, or
 3) the pathname points to a broken symbolic link..
;;; Note:
;;;   Invoking external command:
;;;   gcc -o /tmp/ecl001Oj22KE.fas -L/tmp/leif/sage-4.7.2.alpha2/local/lib/ /tmp/ecl001Oj22KE.o -Wl,--rpath,/tmp/leif/sage-4.7.2.alpha2/local/lib/ -shared -L/tmp/leif/sage-4.7.2.alpha2/local/lib -L/tmp/leif/sage-4.7.2.alpha2/local/lib -lecl -lgmp -lgc -ldl -lm 
installing Maxima library as /tmp/leif/sage-4.7.2.alpha2/local/lib/ecl//maxima.fas
cp: cannot stat `maxima.fasb': No such file or directory
***********************************************************
Failed to install maxima.fasb as a library
***********************************************************

real 4m43.367s
user 4m56.150s
sys 0m47.370s
sage: An error occurred while installing maxima-5.23.2.p0
...

This happened because HOME was set to /home/leif, but /home wasn't mounted (on the machine I was building on).

The first error message is quite precise, but the failure seems odd.

I have no idea (at the moment) why Maxima tries to access (or at least checks the validity of) $HOME at all.

Change History (20)

comment:1 follow-up: Changed 11 years ago by fbissey

It is very odd indeed. I am expecting that it just check the existence of HOME and doesn't write anything there. We would have sandbox violation while building maxima in Gentoo otherwise (outside of sage that is).

comment:2 in reply to: ↑ 1 ; follow-up: Changed 11 years ago by leif

Replying to fbissey:

It is very odd indeed. I am expecting that it just check the existence of HOME and doesn't write anything there. We would have sandbox violation while building maxima in Gentoo otherwise (outside of sage that is).

Maybe you don't have HOME set there at all?

OTOH Sage always sets HOME if it isn't already.

Still weird that the file cp wants to copy apparently doesn't get built (or renamed / copied / whatever to the proper one) in this case. We've seen the same error on other(?) occasions already...

comment:3 follow-up: Changed 11 years ago by nbruin

I confirm the failure.

In spkg-install I changed the following command sequence:

#build maxima as a lisp library
#and install it in the ecl library directory

cd src
echo "building Maxima as an ecl library"
mkdir ./lisp-cache 

export HOME=/does/not/exist ### I added this line

ecl \
  -eval '(require `asdf)' \
  -eval '(setf asdf::*user-cache* (truename "./lisp-cache"))' \
  -eval '(load "maxima-build.lisp")' \
  -eval '(asdf:make-build :maxima :type :fasl :move-here ".")' \
  -eval '(quit)' 

as a consequence, the call to asdf:make-build fails with a complaint about "/" not existing (whereas of course it's "/does" that does not exist, just as in the reported case where the mount point "/home" probably does exist). Apparently, asdf feels the need to resolve the path in "$HOME". asdf is the "make/build" tool for common lisp and is quite complex. Note that asdf::*user-cache* normally points to a directory in "$HOME".

There are very few people who grok asdf and fewer who are familiar with ecl's implementation specifics. It might be that asdf has other business in $HOME than just *user-cache* and that this is causing the path resolution request.

You could consider reporting upstream but I'm not sure that the observed behaviour should be considered a bug.

The fact that spkg-install fails on the cp and not on ecl is that I am not sure that a failed build results in an error code from ecl. The present approach is plainly phenomenological: If "maxima.fasb" is present then obviously the build succeeded. If it isn't the copy will fail and trigger an appropriate check-error.

(".fasb" is produced by asdf to not clash with ecl's "native" build system that produces ".fas". The file is the same format and renaming to ".fas" is safe. I think ecl is increasingly embracing asdf as the build-tool of choice)

comment:4 in reply to: ↑ 3 Changed 11 years ago by leif

Replying to nbruin:

...
ecl \
  -eval '(require `asdf)' \
  -eval '(setf asdf::*user-cache* (truename "./lisp-cache"))' \
  -eval '(load "maxima-build.lisp")' \
  -eval '(asdf:make-build :maxima :type :fasl :move-here ".")' \
  -eval '(quit)'
...

[...] You could consider reporting upstream but I'm not sure that the observed behaviour should be considered a bug.

The fact that spkg-install fails on the cp and not on ecl is that I am not sure that a failed build results in an error code from ecl.


With HOME=/does/not/exist, I get:

...
;;;   Invoking external command:
;;;   gcc -I. -I/tmp/leif/sage-4.7.2.alpha2/local/include/ -march=native -O3 -g -DHONORS_CPPFLAGS -I/tmp/leif/sage-4.7.2.alpha2/local/include -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -g -O2 -march=native -O3 -fno-strict-aliasing -fomit-frame-pointer -g -DHONORS_CFLAGS -fPIC -Dlinux -O2 -w -c /tmp/ecl001SW4Wdt.c -o /tmp/ecl001SW4Wdt.o 
An error occurred during initialization:
Filesystem error with pathname #P"/".
Either
 1) the file does not exist, or
 2) we are not allow to access the file, or
 3) the pathname points to a broken symbolic link..
;;; Note:
;;;   Invoking external command:
;;;   gcc -o /tmp/ecl001SW4Wdt.fas -L/tmp/leif/sage-4.7.2.alpha2/local/lib/ /tmp/ecl001SW4Wdt.o -Wl,--rpath,/tmp/leif/sage-4.7.2.alpha2/local/lib/ -shared -L/tmp/leif/sage-4.7.2.alpha2/local/lib -L/tmp/leif/sage-4.7.2.alpha2/local/lib -lecl -lgmp -lgc -ldl -lm

ecl ... asdf:make-build :maxima ... returned 1

(Just added an echo "... $?".)

So certainly the exit code should be checked in spkg-install.

It's funny though that first an error message is printed, but apparently afterwards an "external command" still gets invoked. Perhaps just the output streams aren't in sync, or asdf does some kind of parallel make. So this might be a (minor) bug.


FWIW,

$ (unset HOME; ./sage -f spkg/standard/maxima-5.23.2.p0.spkg)

works.

So we may unset it in spkg-install, perhaps only if it really doesn't exist (or isn't readable / cd'able; test -d, -r, -x).

comment:5 Changed 11 years ago by leif

More detailed output:

...
lstat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=69632, ...}) = 0
lstat("/tmp/ecl001OMGuRc.fas", {st_mode=S_IFREG|0755, st_size=22499, ...}) = 0
open("/tmp/ecl001OMGuRc.fas", O_RDONLY) = 4
read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\7\0\0\0\0\0\0"..., 832) = 832
fstat(4, {st_mode=S_IFREG|0755, st_size=22499, ...}) = 0
mmap(NULL, 2101328, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7f36a2ea8000
mprotect(0x7f36a2ea9000, 2093056, PROT_NONE) = 0
mmap(0x7f36a30a8000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0) = 0x7f36a30a8000
close(4)                                = 0
mprotect(0x7f36a30a8000, 4096, PROT_READ) = 0
stat("/tmp/ecl001OMGuRc.fas", {st_mode=S_IFREG|0755, st_size=22499, ...}) = 0
getcwd("/tmp/leif/sage-4.7.2.alpha2/spkg/build/maxima-5.23.2.p1/src/src", 128) = 64
lstat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=69632, ...}) = 0
lstat("/tmp/ecl001OMGuRc.fas", {st_mode=S_IFREG|0755, st_size=22499, ...}) = 0
unlink("/tmp/ecl001OMGuRc.fas")         = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
stat("/tmp/ecl001OMGuRc.c", 0x7fff24de7eb0) = -1 ENOENT (No such file or directory)
stat("/tmp/ecl001OMGuRc.h", 0x7fff24de7eb0) = -1 ENOENT (No such file or directory)
stat("/tmp/ecl001OMGuRc.fas", 0x7fff24de7eb0) = -1 ENOENT (No such file or directory)
stat("/tmp/ecl001OMGuRc.tmp", 0x7fff24de7eb0) = -1 ENOENT (No such file or directory)
read(3, "", 8192)                       = 0
close(3)                                = 0
stat("/tmp/leif/sage-4.7.2.alpha2/local/lib/ecl/maxima.asd", 0x7fff24de6e20) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/sage-4.7.2.alpha2/spkg/build/maxima-5.23.2.p1/src/src/", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0
getcwd("/tmp/leif/sage-4.7.2.alpha2/spkg/build/maxima-5.23.2.p1/src/src", 128) = 64
lstat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=69632, ...}) = 0
lstat("/tmp/leif", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/sage-4.7.2.alpha2", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/sage-4.7.2.alpha2/spkg", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/sage-4.7.2.alpha2/spkg/build", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/sage-4.7.2.alpha2/spkg/build/maxima-5.23.2.p1", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/sage-4.7.2.alpha2/spkg/build/maxima-5.23.2.p1/src", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/sage-4.7.2.alpha2/spkg/build/maxima-5.23.2.p1/src/src", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0
lstat("/tmp/leif/sage-4.7.2.alpha2/spkg/build/maxima-5.23.2.p1/src/src/", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0
getcwd("/tmp/leif/sage-4.7.2.alpha2/spkg/build/maxima-5.23.2.p1/src/src", 128) = 64
lstat("/does", 0x7fff24de3df0)          = -1 ENOENT (No such file or directory)
write(2, "A", 1A)                        = 1
write(2, "n", 1n)                        = 1
write(2, " ", 1 )                        = 1
write(2, "e", 1e)                        = 1
write(2, "r", 1r)                        = 1
write(2, "r", 1r)                        = 1
write(2, "o", 1o)                        = 1
write(2, "r", 1r)                        = 1
write(2, " ", 1 )                        = 1
write(2, "o", 1o)                        = 1
write(2, "c", 1c)                        = 1
write(2, "c", 1c)                        = 1
write(2, "u", 1u)                        = 1
write(2, "r", 1r)                        = 1
write(2, "r", 1r)                        = 1
write(2, "e", 1e)                        = 1
write(2, "d", 1d)                        = 1
write(2, " ", 1 )                        = 1

... a few hundred lines deleted ...

write(2, "b", 1b)                        = 1
write(2, "r", 1r)                        = 1
write(2, "o", 1o)                        = 1
write(2, "k", 1k)                        = 1
write(2, "e", 1e)                        = 1
write(2, "n", 1n)                        = 1
write(2, " ", 1 )                        = 1
write(2, "s", 1s)                        = 1
write(2, "y", 1y)                        = 1
write(2, "m", 1m)                        = 1
write(2, "b", 1b)                        = 1
write(2, "o", 1o)                        = 1
write(2, "l", 1l)                        = 1
write(2, "i", 1i)                        = 1
write(2, "c", 1c)                        = 1
write(2, " ", 1 )                        = 1
write(2, "l", 1l)                        = 1
write(2, "i", 1i)                        = 1
write(2, "n", 1n)                        = 1
write(2, "k", 1k)                        = 1
write(2, ".", 1.)                        = 1
write(2, ".", 1.)                        = 1
write(2, "\n", 1
)                       = 1
munmap(0x7f36a2ea8000, 2101328)         = 0
munmap(0x7f36a30aa000, 2981152)         = 0
munmap(0x7f36a3382000, 2406024)         = 0
write(1, ";;; Note:\n;;;   Invoking externa"..., 304;;; Note:
;;;   Invoking external command:
;;;   gcc -o /tmp/ecl001OMGuRc.fas -L/tmp/leif/sage-4.7.2.alpha2/local/lib/ /tmp/ecl001OMGuRc.o -Wl,--rpath,/tmp/leif/sage-4.7.2.alpha2/local/lib/ -shared -L/tmp/leif/sage-4.7.2.alpha2/local/lib -L/tmp/leif/sage-4.7.2.alpha2/local/lib -lecl -lgmp -lgc -ldl -lm ) = 304
exit_group(1)                           = ?

ecl ... asdf:make-build :maxima ... returned 1

:)

comment:6 Changed 11 years ago by leif

... and this is what ECL (I think) does in $HOME:

stat("/tmp/leif/home/.ecl.fas", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.ecl.fasl", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.ecl.fasb", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.ecl.lsp", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.ecl.lisp", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.ecl.LSP", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.ecl.LISP", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.ecl.fasb", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.ecl.FASB", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.ecl", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.eclrc.fas", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.eclrc.fasl", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.eclrc.fasb", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.eclrc.lsp", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.eclrc.lisp", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.eclrc.LSP", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.eclrc.LISP", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.eclrc.fasb", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.eclrc.FASB", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
stat("/tmp/leif/home/.eclrc", 0x7fff93cc9ee0) = -1 ENOENT (No such file or directory)
lstat("/tmp/leif/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/tmp/leif/home/.config/common-lisp/", 0x7fff93cc5180) = -1 ENOENT (No such file or directory)
lstat("/tmp/leif/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/tmp/leif/home/.config/common-lisp/", 0x7fff93cc4360) = -1 ENOENT (No such file or directory)
lstat("/tmp/leif/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/tmp/leif/home/.local/share/", 0x7fff93cc1900) = -1 ENOENT (No such file or directory)
lstat("/tmp/leif/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/tmp/leif/home/.config/common-lisp/", 0x7fff93cc2720) = -1 ENOENT (No such file or directory)
lstat("/tmp/leif/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/tmp/leif/home/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/tmp/leif/home/.config/common-lisp/", 0x7fff93cc1900) = -1 ENOENT (No such file or directory)

So I'd say it's a bug that not being able to stat $HOME is treated as a fatal error.

The truncated error message ("/ does not exist") is of course a bug.

comment:7 in reply to: ↑ 2 ; follow-up: Changed 11 years ago by fbissey

Replying to leif:

Replying to fbissey:

It is very odd indeed. I am expecting that it just check the existence of HOME and doesn't write anything there. We would have sandbox violation while building maxima in Gentoo otherwise (outside of sage that is).

Maybe you don't have HOME set there at all?

By default it is /root. All lisp pull an external version of asdf in Gentoo but I have no idea if it is in fact used. I concur that it is a bug to treat not being able to stat $HOME as a fatal error. I am unconvinced that you should ever need to do something in $HOME from a building perspective.

comment:8 in reply to: ↑ 7 Changed 11 years ago by leif

Replying to fbissey:

I concur that it is a bug to treat not being able to stat $HOME as a fatal error. I am unconvinced that you should ever need to do something in $HOME from a building perspective.

Yep. I'm still not sure whether this is due to Maxima or ECL (or asdf).

From ECL's perspective, it is pretty ok, or even desirable, to look for some user files below $HOME. Raising a fatal error if this fails is of course not, unless some files from there were really needed.

And the crippled error message (the truncated directory name) remains.

I wonder how much time ECL overall spends re-stating the same files again and again, and in system calls writing strings one by one character... m)

comment:9 Changed 11 years ago by fbissey

ecl upstream is fairly good with our requests and reports. Should someone ask them about it? For info I got HOME wrong for root (it is "/" really) and reproduced the problem with maxima-5.25.1 and an external asdf (it is definitely used) on Gentoo. Of course ecl could read configuration in $HOME, I guess I overstated that it shouldn't write.

I am guessing the error is really that ecl cannot enter the directory, it has no problem with the files not existing so it has to be getting to the folder.

comment:10 Changed 9 years ago by jdemeyer

  • Milestone changed from sage-5.11 to sage-5.12

comment:11 Changed 8 years ago by vbraun_spam

  • Milestone changed from sage-6.1 to sage-6.2

comment:12 follow-up: Changed 8 years ago by gagern

My changes from ticket:16178 might help solve this issue here as well. It does get rid of asdf, so if that is the only problem here, things should work out fine.

comment:13 in reply to: ↑ 12 ; follow-up: Changed 8 years ago by leif

Replying to gagern:

My changes from ticket:16178 might help solve this issue here as well. It does get rid of asdf, so if that is the only problem here, things should work out fine.

Haven't looked at those, but IIRC the $HOME issue is also solved by (always) invoking ecl with --norc (strongly suggested by upstream a while ago). I don't recall whether we fixed that at some point, but I did leave comments on that on tickets dealing with the Maxima package to that time.

comment:14 in reply to: ↑ 13 Changed 8 years ago by leif

Replying to leif:

IIRC the $HOME issue is also solved by (always) invoking ecl with --norc (strongly suggested by upstream a while ago). I don't recall whether we fixed that at some point [...]

Oh, apparently not. Unless I missed something...

comment:15 Changed 8 years ago by vbraun_spam

  • Milestone changed from sage-6.2 to sage-6.3

comment:16 Changed 8 years ago by vbraun_spam

  • Milestone changed from sage-6.3 to sage-6.4

comment:17 Changed 7 years ago by chapoton

  • Description modified (diff)

comment:18 Changed 22 months ago by mkoeppe

  • Cc dimpase added
  • Milestone changed from sage-6.4 to sage-duplicate/invalid/wontfix
  • Status changed from new to needs_review

Outdated spkg or build system ticket, should be closed

comment:19 Changed 9 months ago by slelievre

  • Cc slelievre added
  • Reviewers set to Samuel Lelièvre
  • Status changed from needs_review to positive_review

Let's close this.

comment:20 Changed 9 months ago by mkoeppe

  • Resolution set to invalid
  • Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.