GNU bug report logs - #52691
[PATCH] git: Display a hint when CLONE* lacks permission.

Previous Next

Package: guix-patches;

Reported by: Tobias Geerinckx-Rice <me <at> tobias.gr>

Date: Tue, 21 Dec 2021 00:52:01 UTC

Severity: normal

Tags: patch

To reply to this bug, email your comments to 52691 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#52691; Package guix-patches. (Tue, 21 Dec 2021 00:52:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Tobias Geerinckx-Rice <me <at> tobias.gr>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Tue, 21 Dec 2021 00:52:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Tobias Geerinckx-Rice <me <at> tobias.gr>
To: guix-patches <at> gnu.org
Subject: [PATCH] git: Display a hint when CLONE* lacks permission.
Date: Tue, 21 Dec 2021 01:51:02 +0100
Without this, it's not obvious where users should even start looking:

  $ guix pull
  Updating channel 'guix' from Git repository at URL...
  guix pull: error: mkdir: Permission denied
  $

* guix/git.scm (clone*): Print DIRECTORY as a hint on EPERM.

Reported by karrq on #guix.
---
 guix/git.scm | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/guix/git.scm b/guix/git.scm
index dc2ca1be84..1b322be0fe 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -35,6 +35,7 @@ (define-module (guix git)
   #:use-module (guix gexp)
   #:use-module (guix sets)
   #:use-module ((guix diagnostics) #:select (leave warning))
+  #:use-module (guix ui)
   #:use-module (guix progress)
   #:autoload   (guix swh) (swh-download commit-id?)
   #:use-module (rnrs bytevectors)
@@ -200,8 +201,16 @@ (define (clone* url directory)
       (clone url directory
              (make-clone-options
               #:fetch-options (make-default-fetch-options))))
-    (lambda _
-      (false-if-exception (rmdir directory)))))
+    (lambda args
+      (false-if-exception (rmdir directory))
+      ;; Compensate for unixy errors, e.g., ‘error: mkdir: Permission denied’.
+      ;; XXX This displays the hint before the error.  After would be nicer.
+      ;; XXX So would a generic mechanism for dealing with such errors.
+      (match args
+        ((system-error _ _ _ EPERM)
+         (display-hint (format #f (G_ "can you create and write to ~a?")
+                               directory)))
+        (_ #f)))))
 
 (define (url+commit->name url sha1)
   "Return the string \"<REPO-NAME>-<SHA1:7>\" where REPO-NAME is the name of
-- 
2.34.0





Information forwarded to guix-patches <at> gnu.org:
bug#52691; Package guix-patches. (Tue, 21 Dec 2021 14:43:01 GMT) Full text and rfc822 format available.

Message #8 received at 52691 <at> debbugs.gnu.org (full text, mbox):

From: zimoun <zimon.toutoune <at> gmail.com>
To: Tobias Geerinckx-Rice <me <at> tobias.gr>
Cc: 52691 <at> debbugs.gnu.org
Subject: Re: bug#52691: [PATCH] git: Display a hint when CLONE* lacks
 permission.
Date: Tue, 21 Dec 2021 15:42:07 +0100
[Message part 1 (text/plain, inline)]
Hi Tobias,

On mar., 21 déc. 2021 at 01:51, Tobias Geerinckx-Rice <me <at> tobias.gr> wrote:
> Without this, it's not obvious where users should even start looking:
>
>   $ guix pull
>   Updating channel 'guix' from Git repository at URL...
>   guix pull: error: mkdir: Permission denied

Instead of hint, I propose this patch which displays:

--8<---------------cut here---------------start------------->8---
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
guix pull: error: mkdir: Permission non accordée /home/sitour/.cache/guix/checkouts/pjmkglp4t7znuugeurpurzikxq3tnlaywmisyr27shj7apsnalwq
--8<---------------cut here---------------end--------------->8---

Somehow, the URL is already reported and the patch exposes the hidden
’directory’ variable whatever the error could be.

[clone.patch (text/x-diff, inline)]
diff --git a/guix/git.scm b/guix/git.scm
index dc2ca1be84..e2285f5f55 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -200,8 +200,12 @@ (define (clone* url directory)
       (clone url directory
              (make-clone-options
               #:fetch-options (make-default-fetch-options))))
-    (lambda _
-      (false-if-exception (rmdir directory)))))
+    (lambda (key subr fmt args . rest)
+      (let ((message (match args
+                       ((reason tail ...)
+                        (list (string-append reason " " directory))))))
+        (false-if-exception (rmdir directory))
+        (apply throw key subr fmt message rest)))))
 
 (define (url+commit->name url sha1)
   "Return the string \"<REPO-NAME>-<SHA1:7>\" where REPO-NAME is the name of
[Message part 3 (text/plain, inline)]

> +  #:use-module (guix ui)

I think that less UI is outside guix/scripts/ and easy maintenance we
have.  Ideally, G_ should only be under guix/scripts/.


Last, if my proposal does not fit, from this snippet,

--8<---------------cut here---------------start------------->8---
+    (lambda args
+      (false-if-exception (rmdir directory))
+      ;; Compensate for unixy errors, e.g., ‘error: mkdir: Permission denied’.
+      ;; XXX This displays the hint before the error.  After would be nicer.
+      ;; XXX So would a generic mechanism for dealing with such errors.
+      (match args
+        ((system-error _ _ _ EPERM)
+         (display-hint (format #f (G_ "can you create and write to ~a?")
+                               directory)))
+        (_ #f)))))
--8<---------------cut here---------------end--------------->8---

the ’match’ can be avoided

--8<---------------cut here---------------start------------->8---
    (lambda (key subr message args . rest)
      (false-if-exception (rmdir directory))
      ;; Compensate for unixy errors, e.g., ‘error: mkdir: Permission denied’.
      ;; XXX This displays the hint before the error.  After would be nicer.
      ;; XXX So would a generic mechanism for dealing with such errors.
      (when (= EPERM (car rest))
         (display-hint (format #f (G_ "can you create and write to ~a?")
                               directory))))
--8<---------------cut here---------------end--------------->8---

Or someting along these lines. :-)


Cheers,
simon

Information forwarded to guix-patches <at> gnu.org:
bug#52691; Package guix-patches. (Tue, 21 Dec 2021 15:04:01 GMT) Full text and rfc822 format available.

Message #11 received at 52691 <at> debbugs.gnu.org (full text, mbox):

From: Tobias Geerinckx-Rice <me <at> tobias.gr>
To: zimoun <zimon.toutoune <at> gmail.com>
Cc: 52691 <at> debbugs.gnu.org
Subject: Re: bug#52691: [PATCH] git: Display a hint when CLONE* lacks
 permission.
Date: Tue, 21 Dec 2021 15:56:13 +0100
[Message part 1 (text/plain, inline)]
Simon,

zimoun 写道:
> Instead of hint, I propose this patch which displays:

Perfect!  That's what I wanted to write, but couldn't :-)

(I still don't really understand THROW and friends, or what 
exactly your snippet does, but the output is exactly what I had in 
mind.)

Thanks!  LGTM, obviously.

> the ’match’ can be avoided

True, but I chose it deliberately, and still prefer it over CAR or 
equivalent.

Kind regards,

T G-R
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#52691; Package guix-patches. (Tue, 21 Dec 2021 15:14:01 GMT) Full text and rfc822 format available.

Message #14 received at 52691 <at> debbugs.gnu.org (full text, mbox):

From: zimoun <zimon.toutoune <at> gmail.com>
To: Tobias Geerinckx-Rice <me <at> tobias.gr>
Cc: 52691 <at> debbugs.gnu.org
Subject: Re: bug#52691: [PATCH] git: Display a hint when CLONE* lacks
 permission.
Date: Tue, 21 Dec 2021 16:12:42 +0100
Hi,

On Tue, 21 Dec 2021 at 16:03, Tobias Geerinckx-Rice <me <at> tobias.gr> wrote:

> zimoun 写道:
> > Instead of hint, I propose this patch which displays:
>
> Perfect!  That's what I wanted to write, but couldn't :-)
>
> (I still don't really understand THROW and friends, or what
> exactly your snippet does, but the output is exactly what I had in
> mind.)

Me neither!  Especially with new and old way,  And the examples in the
manual do not help very well to understand, IMHO.  Another story. :-)

> Thanks!  LGTM, obviously.

Feel free to proceed. :-)


> > the ’match’ can be avoided
>
> True, but I chose it deliberately, and still prefer it over CAR or
> equivalent.

Yes, me too.  This 'car' was because I had been lazy.  It was about
this pattern:

  (lambda args
    (match args
      ((a b c) #t)
      (_ #f)

when 'args' is an error. :-)


Cheers,
simon




This bug report was last modified 2 years and 98 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.