Version 0.4.3.2 .

svn merge -c 20438 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 20501 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@20505 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/tools/VERSION b/tools/VERSION
index 10d3ee8..d7aaa81 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
 MINOR 4
 BUILD 3
-PATCH 1
+PATCH 2
diff --git a/utils/pub/entrypoint.dart b/utils/pub/entrypoint.dart
index a190c1b..f689416 100644
--- a/utils/pub/entrypoint.dart
+++ b/utils/pub/entrypoint.dart
@@ -298,10 +298,16 @@
   Future _linkSecondaryPackageDir(String dir) {
     return defer(() {
       var symlink = path.join(dir, 'packages');
-      if (fileExists(symlink)) {
-        deleteFile(symlink);
-      } else if (dirExists(symlink)) {
+      // The order of if tests is significant here. fileExists() will return
+      // true for a symlink (broken or not) but deleteFile() cannot be used
+      // to delete a broken symlink on Windows. So we test for the directory
+      // first since deleteDir() does work on symlinks.
+      // TODO(rnystrom): Make deleteFile() work for symlinks on Windows so this
+      // doesn't matter.
+      if (dirExists(symlink)) {
         deleteDir(symlink);
+      } else if (fileExists(symlink)) {
+        deleteFile(symlink);
       }
       return createSymlink(packagesDir, symlink, relative: true);
     });
diff --git a/utils/tests/pub/pub.status b/utils/tests/pub/pub.status
index b60d685..a33ef1c 100644
--- a/utils/tests/pub/pub.status
+++ b/utils/tests/pub/pub.status
@@ -14,4 +14,3 @@
 
 [ $system == windows ]
 io_test: Fail # Issue 7505
-install/broken_symlink_test: Fail # Issue 9192