* bug#56503: Poor error message on missing file using substitute*
@ 2022-07-11 22:16 Maxim Cournoyer
2022-07-13 10:23 ` Daniel Meißner via Bug reports for GNU Guix
0 siblings, 1 reply; 4+ messages in thread
From: Maxim Cournoyer @ 2022-07-11 22:16 UTC (permalink / raw)
To: 56503
Hello Guix,
When substitute* encounters a nonexistent file, the error is reported to
the guix CLI like so:
--8<---------------cut here---------------start------------->8---
error: in phase 'bake-tor': uncaught exception:
system-error "mkstemp" "~A" ("No such file or directory") (2)
phase `bake-tor' failed after 0.0 seconds
Backtrace:
11 (primitive-load "/gnu/store/0i9iay6rahmps8by40aja6qz1fv…")
In guix/build/gnu-build-system.scm:
906:2 10 (gnu-build #:source _ #:outputs _ #:inputs _ #:phases . #)
In ice-9/boot-9.scm:
1752:10 9 (with-exception-handler _ _ #:unwind? _ # _)
In srfi/srfi-1.scm:
634:9 8 (for-each #<procedure 7ffff49ef640 at guix/build/gnu-b…> …)
In ice-9/boot-9.scm:
1752:10 7 (with-exception-handler _ _ #:unwind? _ # _)
In guix/build/gnu-build-system.scm:
927:23 6 (_)
In ice-9/eval.scm:
619:8 5 (_ #(#(#<directory (guile-user) 7ffff5fdbc80>) (# # …)))
In srfi/srfi-1.scm:
634:9 4 (for-each #<procedure substitute-one-file (a)> _)
In guix/build/utils.scm:
843:19 3 (with-atomic-file-replacement "desktop/src/onionshare/…" …)
In unknown file:
2 (mkstemp! "desktop/src/onionshare/gui_common.py.XXXXXX" #)
In ice-9/boot-9.scm:
1685:16 1 (raise-exception _ #:continuable? _)
1685:16 0 (raise-exception _ #:continuable? _)
ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure mkstemp: No such file or directory
note: keeping build directory `/tmp/guix-build-onionshare-cli-2.5.drv-0'
--8<---------------cut here---------------end--------------->8---
The main error message, "system-error "mkstemp" "~A" ("No such file or
directory") (2)" is malformed and doesn't report the actual file which
is missing; one must decipher the backtrace for clues as to which file
caused the error.
We should improve it :-).
Maxim
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#56503: Poor error message on missing file using substitute*
2022-07-11 22:16 bug#56503: Poor error message on missing file using substitute* Maxim Cournoyer
@ 2022-07-13 10:23 ` Daniel Meißner via Bug reports for GNU Guix
2022-07-13 19:46 ` Liliana Marie Prikler
2022-07-18 12:57 ` Ludovic Courtès
0 siblings, 2 replies; 4+ messages in thread
From: Daniel Meißner via Bug reports for GNU Guix @ 2022-07-13 10:23 UTC (permalink / raw)
To: Maxim Cournoyer; +Cc: 56503
Hi,
Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:
> When substitute* encounters a nonexistent file, the error is reported
> to the guix CLI like so:
>
> [...]
>
> The main error message, "system-error "mkstemp" "~A" ("No such file or
> directory") (2)" is malformed and doesn't report the actual file which
> is missing; one must decipher the backtrace for clues as to which file
> caused the error.
>
> We should improve it :-).
I am Guix and Guile newbie but looking at the definition of the
procedure ‘with-atomic-file-replacement’ I think we have to catch the
(possible) exception of the call to ‘mkstemp!’ and provide a custom
error message.
This is because the exception thrown by ‘mkstemp!’ does not contain any
information about which file was tried. Try this snippet in a Guile
REPL:
--8<---------------cut here---------------start------------->8---
(with-exception-handler (lambda (x) (write x) (newline))
(lambda ()
(mkstemp! "/non/existing/path/foo.XXXXXX")))
--8<---------------cut here---------------end--------------->8---
It prints:
--8<---------------cut here---------------start------------->8---
#<&compound-exception components: (#<&external-error> #<&origin origin: "mkstemp"> #<&message message: "~A"> #<&irritants irritants: ("Datei oder Verzeichnis nicht gefunden")> #<&exception-with-kind-and-args kind: system-error args: ("mkstemp" "~A" ("Datei oder Verzeichnis nicht gefunden") (2))>)>
--8<---------------cut here---------------end--------------->8---
So maybe this is a bug in Guile? Shouldn’t ‘mkstemp!’ list the path in
the irritants?
Best
--
Daniel
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#56503: Poor error message on missing file using substitute*
2022-07-13 10:23 ` Daniel Meißner via Bug reports for GNU Guix
@ 2022-07-13 19:46 ` Liliana Marie Prikler
2022-07-18 12:57 ` Ludovic Courtès
1 sibling, 0 replies; 4+ messages in thread
From: Liliana Marie Prikler @ 2022-07-13 19:46 UTC (permalink / raw)
To: Daniel Meißner, Maxim Cournoyer; +Cc: 56503
Am Mittwoch, dem 13.07.2022 um 12:23 +0200 schrieb Daniel Meißner:
> Hi,
>
> Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:
>
> > When substitute* encounters a nonexistent file, the error is
> > reported
> > to the guix CLI like so:
> >
> > [...]
> >
> > The main error message, "system-error "mkstemp" "~A" ("No such file
> > or
> > directory") (2)" is malformed and doesn't report the actual file
> > which
> > is missing; one must decipher the backtrace for clues as to which
> > file
> > caused the error.
> >
> > We should improve it :-).
>
> I am Guix and Guile newbie but looking at the definition of the
> procedure ‘with-atomic-file-replacement’ I think we have to catch the
> (possible) exception of the call to ‘mkstemp!’ and provide a custom
> error message.
>
> This is because the exception thrown by ‘mkstemp!’ does not contain
> any
> information about which file was tried. Try this snippet in a Guile
> REPL:
>
> --8<---------------cut here---------------start------------->8---
> (with-exception-handler (lambda (x) (write x) (newline))
> (lambda ()
> (mkstemp! "/non/existing/path/foo.XXXXXX")))
> --8<---------------cut here---------------end--------------->8---
>
> It prints:
>
> --8<---------------cut here---------------start------------->8---
> #<&compound-exception components: (#<&external-error> #<&origin
> origin: "mkstemp"> #<&message message: "~A"> #<&irritants irritants:
> ("Datei oder Verzeichnis nicht gefunden")> #<&exception-with-kind-
> and-args kind: system-error args: ("mkstemp" "~A" ("Datei oder
> Verzeichnis nicht gefunden") (2))>)>
> --8<---------------cut here---------------end--------------->8---
>
> So maybe this is a bug in Guile? Shouldn’t ‘mkstemp!’ list the path
> in the irritants?
IMHO this matters little, as one can let-bind the filename or (as we do
it) take it as argument. The reason Guile does not report it is
probably because it's converted from a POSIX errno, which lacks that
context :)
What's a little more confusing is that a throw-handler is installed
directly after mkstemp!, which re-raises the exception. This is an
alternative way of failing when the file does not exist, as it wraps
call-with-input-file.
Cheers
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#56503: Poor error message on missing file using substitute*
2022-07-13 10:23 ` Daniel Meißner via Bug reports for GNU Guix
2022-07-13 19:46 ` Liliana Marie Prikler
@ 2022-07-18 12:57 ` Ludovic Courtès
1 sibling, 0 replies; 4+ messages in thread
From: Ludovic Courtès @ 2022-07-18 12:57 UTC (permalink / raw)
To: Daniel Meißner; +Cc: 56503, Maxim Cournoyer
Hi,
Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de> skribis:
> It prints:
>
> #<&compound-exception components: (#<&external-error> #<&origin origin: "mkstemp"> #<&message message: "~A"> #<&irritants irritants: ("Datei oder Verzeichnis nicht gefunden")> #<&exception-with-kind-and-args kind: system-error args: ("mkstemp" "~A" ("Datei oder Verzeichnis nicht gefunden") (2))>)>
>
> So maybe this is a bug in Guile? Shouldn’t ‘mkstemp!’ list the path in
> the irritants?
Yes, it should, but it’s a change that’s probably not safe to do within
a Guile stable series.
For the record, (guix ui) works around this for selected procedures—look
for ‘error-reporting-wrapper’. These are not used (and cannot be used)
in (guix build utils) though.
Ludo’.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-07-18 12:58 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-11 22:16 bug#56503: Poor error message on missing file using substitute* Maxim Cournoyer
2022-07-13 10:23 ` Daniel Meißner via Bug reports for GNU Guix
2022-07-13 19:46 ` Liliana Marie Prikler
2022-07-18 12:57 ` Ludovic Courtès
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).