Hi all,

Here's a pretty simple patch for #1109.  This simply catches any
exceptions that occur during retrieval of http locations (it already
handles svn and local files differently: there it checks first whether
the source exists before creating the target dir), and then removes
the directory if it didn't exist initially.

As is our rule, I removed the square parens so the patch is a little
bigger than it strictly speaking has to be.  I also rewrote the let and
let-values stuff to a simpler receive/let* combination.

Cheers,
Peter
-- 
http://www.more-magic.net
>From 06a109028c94fde222004215093351c521951e7c Mon Sep 17 00:00:00 2001
From: Peter Bex <peter....@xs4all.nl>
Date: Sun, 3 Aug 2014 21:25:51 +0200
Subject: [PATCH] Fix #1109: chicken-install -r should remove empty directory
 when egg doesn't exist

Thanks to Alex Charlton for pointing out this bug
---
 NEWS                    |    4 +++
 manual/Acknowledgements |   91 ++++++++++++++++++++++++-----------------------
 setup-download.scm      |   33 +++++++++--------
 3 files changed, 69 insertions(+), 59 deletions(-)

diff --git a/NEWS b/NEWS
index 20ece38..5ab28f0 100644
--- a/NEWS
+++ b/NEWS
@@ -61,6 +61,10 @@
 - Tools
   - "csc"
     - On Cygwin, -static now works again (thanks to Michele La Monaca)
+  - "chicken-install"
+    - When using chicken-install -retrieve, and an error occurs during
+       retrieval (or the egg doesn't exist), the egg's directory is
+       now properly cleaned up (#1109, thanks to Alex Charlton)
 
 4.9.0
 
diff --git a/manual/Acknowledgements b/manual/Acknowledgements
index 3d04556..107a944 100644
--- a/manual/Acknowledgements
+++ b/manual/Acknowledgements
@@ -9,51 +9,52 @@ Bignolles, Oivind Binde, Alaric Blagrave-Snellpym, Dave 
Bodenstab,
 Fabian Böhlke, T. Kurt Bond, Ashley Bone, Dominique Boucher, Terence
 Brannon, Roy Bryant, Adam Buchbinder, Hans Bulfone, "Category 5",
 Taylor Campbell, Naruto Canada, Mark Carter, Esteban U. Caamano
-Castro, Semih Cemiloglu, Franklin Chen, Joo ChurlSoo, Thomas Chust,
-Gian Paolo Ciceri, Fulvio Ciriaco, Paul Colby, Tobia Conforto, John
-Cowan, Grzegorz Chrupala, James Crippen, Evan Hanson, Adhi Hargo,
-Moritz Heidkamp, Tollef Fog Heen, Drew Hess, Alejandro Forero Cuervo,
-Peter Danenberg, Linh Dang, Brian Denheyer, Sean D'Epagnier, "dgym",
-"Don", Chris Double, "Brown Dragon", David Dreisigmeyer, Jarod Eells,
-Petter Egesund, Stephen Eilert, Steve Elkins, Daniel B. Faken, Erik
-Falor, Will Farr, Graham Fawcett, Marc Feeley, "Fizzie", Matthew
-Flatt, Kimura Fuyuki, Tony Garnock-Jones, Martin Gasbichler, Abdulaziz
-Ghuloum, Joey Gibson, Stephen C. Gilardi, Mario Domenech Goulart,
-Joshua Griffith, Johannes Groedem, Damian Gryski, Matt Gushee, Andreas
-Gustafsson, Sven Hartrumpf, Jun-ichiro itojun Hagino, Ahdi Hargo,
-Matthias Heiler, Karl M. Hegbloom, William P. Heinemann, Bill Hoffman,
-Bruce Hoult, Hans Hübner, Markus Hülsmann, Götz Isenmann, Paulo
-Jabardo, Wietse Jacobs, David Janssens, Christian Jäger, Matt Jones,
-Dale Jordan, Valentin Kamyshenko, Daishi Kato, Peter Keller, Christian
-Kellermann, Brad Kind, Ron Kneusel, Matthias Köppe, Krysztof
-Kowalczyk, Andre Kühne, Todd R. Kueny Sr, Goran Krampe, David
-Krentzlin, Ben Kurtz, Michele La Monaca, Micky Latowicki, Kristian
-Lein-Mathisen, John Lenz, Kirill Lisovsky, Jürgen Lorenz, Kon Lovett,
-Lam Luu, Vitaly Magerya, Leonardo Valeri Manera, Claude Marinier,
-Dennis Marti, Charles Martin, Bob McIsaac, "megane", Alain Mellan,
-Eric Merrit, Perry Metzger, Scott G. Miller, Mikael, Karel Miklav,
-Bruce Mitchener, Fadi Moukayed, Chris Moline, Eric E. Moore, Julian
-Morrison, Dan Muresan, David N. Murray, Timo Myyrä, "nicktick", Lars
-Nilsson, Ian Oversby, "o.t.", Gene Pavlovsky, Levi Pearson, Jeronimo
-Pellegrini, Nicolas Pelletier, Derrell Piper, Carlos Pita, "Pluijzer",
-Robin Lee Powell, Alan Post, "Pupeno", Davide Puricelli, "presto",
-Doug Quale, Imran Rafique, Eric Raible, Ivan Raikov, Santosh Rajan,
-Joel Reymont, "rivo", Chris Roberts, Eric Rochester, Paul Romanchenko,
-Andreas Rottman, David Rush, Lars Rustemeier, Daniel Sadilek, Otavio
-Salvador, Burton Samograd, "Sandro", "satori", Aleksej Saushev, Oskar
-Schirmer, Reed Sheridan, Ronald Schröder, Spencer Schumann, Ivan
-Shcheklein, Alex Shinn, Ivan Shmakov, "Shmul", Tony Sidaway, Jeffrey
-B. Siegal, Andrey Sidorenko, Michele Simionato, Iruata Souza, Volker
-Stolz, Jon Strait, Dorai Sitaram, Robert Skeels, Jason Songhurst,
-Clifford Stein, David Steiner, Sunnan, Zbigniew Szadkowski, Rick
-Taube, Nathan Thern, Mike Thomas, Minh Thu, Christian Tismer, Andre
-van Tonder, John Tobey, Henrik Tramberend, Vladimir Tsichevsky, James
-Ursetto, Neil van Dyke, Sam Varner, Taylor Venable, Sander Vesik,
-Jaques Vidrine, Panagiotis Vossos, Shawn Wagner, Peter Wang, Ed
-Watkeys, Brad Watson, Thomas Weidner, Göran Weinholt, Matthew Welland,
-Drake Wilson, Jörg Wittenberger, Peter Wright, Mark Wutka, Adam Young,
-Richard Zidlicky, Houman Zolfaghari and Florian Zumbiehl for
-bug-fixes, tips and suggestions.
+Castro, Semih Cemiloglu, Alex Charlton, Franklin Chen, Joo ChurlSoo,
+Thomas Chust, Gian Paolo Ciceri, Fulvio Ciriaco, Paul Colby, Tobia
+Conforto, John Cowan, Grzegorz Chrupala, James Crippen, Evan Hanson,
+Adhi Hargo, Moritz Heidkamp, Tollef Fog Heen, Drew Hess, Alejandro
+Forero Cuervo, Peter Danenberg, Linh Dang, Brian Denheyer, Sean
+D'Epagnier, "dgym", "Don", Chris Double, "Brown Dragon", David
+Dreisigmeyer, Jarod Eells, Petter Egesund, Stephen Eilert, Steve
+Elkins, Daniel B. Faken, Erik Falor, Will Farr, Graham Fawcett, Marc
+Feeley, "Fizzie", Matthew Flatt, Kimura Fuyuki, Tony Garnock-Jones,
+Martin Gasbichler, Abdulaziz Ghuloum, Joey Gibson, Stephen C. Gilardi,
+Mario Domenech Goulart, Joshua Griffith, Johannes Groedem, Damian
+Gryski, Matt Gushee, Andreas Gustafsson, Sven Hartrumpf, Jun-ichiro
+itojun Hagino, Ahdi Hargo, Matthias Heiler, Karl M. Hegbloom, William
+P. Heinemann, Bill Hoffman, Bruce Hoult, Hans Hübner, Markus Hülsmann,
+Götz Isenmann, Paulo Jabardo, Wietse Jacobs, David Janssens, Christian
+Jäger, Matt Jones, Dale Jordan, Valentin Kamyshenko, Daishi Kato,
+Peter Keller, Christian Kellermann, Brad Kind, Ron Kneusel, Matthias
+Köppe, Krysztof Kowalczyk, Andre Kühne, Todd R. Kueny Sr, Goran
+Krampe, David Krentzlin, Ben Kurtz, Michele La Monaca, Micky
+Latowicki, Kristian Lein-Mathisen, John Lenz, Kirill Lisovsky, Jürgen
+Lorenz, Kon Lovett, Lam Luu, Vitaly Magerya, Leonardo Valeri Manera,
+Claude Marinier, Dennis Marti, Charles Martin, Bob McIsaac, "megane",
+Alain Mellan, Eric Merrit, Perry Metzger, Scott G. Miller, Mikael,
+Karel Miklav, Bruce Mitchener, Fadi Moukayed, Chris Moline, Eric
+E. Moore, Julian Morrison, Dan Muresan, David N. Murray, Timo Myyrä,
+"nicktick", Lars Nilsson, Ian Oversby, "o.t.", Gene Pavlovsky, Levi
+Pearson, Jeronimo Pellegrini, Nicolas Pelletier, Derrell Piper, Carlos
+Pita, "Pluijzer", Robin Lee Powell, Alan Post, "Pupeno", Davide
+Puricelli, "presto", Doug Quale, Imran Rafique, Eric Raible, Ivan
+Raikov, Santosh Rajan, Joel Reymont, "rivo", Chris Roberts, Eric
+Rochester, Paul Romanchenko, Andreas Rottman, David Rush, Lars
+Rustemeier, Daniel Sadilek, Otavio Salvador, Burton Samograd,
+"Sandro", "satori", Aleksej Saushev, Oskar Schirmer, Reed Sheridan,
+Ronald Schröder, Spencer Schumann, Ivan Shcheklein, Alex Shinn, Ivan
+Shmakov, "Shmul", Tony Sidaway, Jeffrey B. Siegal, Andrey Sidorenko,
+Michele Simionato, Iruata Souza, Volker Stolz, Jon Strait, Dorai
+Sitaram, Robert Skeels, Jason Songhurst, Clifford Stein, David
+Steiner, Sunnan, Zbigniew Szadkowski, Rick Taube, Nathan Thern, Mike
+Thomas, Minh Thu, Christian Tismer, Andre van Tonder, John Tobey,
+Henrik Tramberend, Vladimir Tsichevsky, James Ursetto, Neil van Dyke,
+Sam Varner, Taylor Venable, Sander Vesik, Jaques Vidrine, Panagiotis
+Vossos, Shawn Wagner, Peter Wang, Ed Watkeys, Brad Watson, Thomas
+Weidner, Göran Weinholt, Matthew Welland, Drake Wilson, Jörg
+Wittenberger, Peter Wright, Mark Wutka, Adam Young, Richard Zidlicky,
+Houman Zolfaghari and Florian Zumbiehl for bug-fixes, tips and
+suggestions.
 
 Special thanks to Brandon van Every for contributing the (now defunct)
 [[http://www.cmake.org|CMake]] support and for helping with Windows
diff --git a/setup-download.scm b/setup-download.scm
index e87446e..1e70990 100644
--- a/setup-download.scm
+++ b/setup-download.scm
@@ -233,20 +233,25 @@
 
   (define (locate-egg/http egg url #!optional version destination tests
                           proxy-host proxy-port proxy-user-pass)
-    (let ([tmpdir (or destination (get-temporary-directory))])
-      (let-values ([(host port locn) (deconstruct-url url)])
-       (let ([locn (string-append
-                    locn
-                    "?name=" egg
-                    (if version (string-append "&version=" version) "")
-                    "&mode=" (->string *mode*)
-                    (if tests "&tests=yes" ""))]
-             [eggdir (make-pathname tmpdir egg) ] )
-         (unless (file-exists? eggdir) (create-directory eggdir))
-         (let ((fversion
-                (http-fetch host port locn eggdir proxy-host proxy-port 
proxy-user-pass)))
-           ;; If we get here then version of egg exists
-           (values eggdir (or fversion version "")) ) ) ) ))
+    (receive (host port locn)
+       (deconstruct-url url)
+      (let* ((locn (string-append
+                   locn
+                   "?name=" egg
+                   (if version (string-append "&version=" version) "")
+                   "&mode=" (->string *mode*)
+                   (if tests "&tests=yes" "")))
+            (tmpdir (or destination (get-temporary-directory)))
+            (eggdir (make-pathname tmpdir egg))
+            (pre-existing-dir? (file-exists? eggdir)) )
+       (unless pre-existing-dir? (create-directory eggdir))
+       (handle-exceptions exn
+           (begin (unless pre-existing-dir? (remove-directory eggdir))
+                  (signal exn))
+        (let ((fversion
+               (http-fetch host port locn eggdir proxy-host proxy-port 
proxy-user-pass)))
+          ;; If we get here then version of egg exists
+          (values eggdir (or fversion version "")) )) ) ) )
 
   (define (network-failure msg . args)
     (signal
-- 
1.7.10.4

_______________________________________________
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers

Reply via email to