--- a/contrib/asdf/pull-asdf.sh
+++ b/contrib/asdf/pull-asdf.sh
@@ -1,13 +1,26 @@
-#!/bin/sh
+#!/bin/sh -e
 
 # Get the current ASDF release from the upstream repo.
 
 if test -d asdf-upstream
 then
-    cd asdf-upstream
+    if test -d ../../obj/asdf-upstream
+    then
+        rm -rf asdf-upstream
+    else
+        mv asdf-upstream ../../obj/asdf-upstream
+    fi
+fi
+
+if test -d ../../obj/asdf-upstream
+then
+    (cd ../../obj/asdf-upstream/
     git checkout release
     git reset --hard release
-    git pull -a
+    git pull -a origin release)
 else
-    git clone --branch release git://common-lisp.net/projects/asdf/asdf.git asdf-upstream
+    (cd ../../obj/
+    git clone --branch release git://common-lisp.net/projects/asdf/asdf.git asdf-upstream)
 fi
+
+cd ../../obj/asdf-upstream && make