>From 06a109028c94fde222004215093351c521951e7c Mon Sep 17 00:00:00 2001 From: Peter Bex 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