Fixed #275, #285: Empty package location causes errors

This happens when the directory exists for a root repo location but
it contains no files. Glide thinks it exists but it's a broken
location.

The fix here detetects the problem and fetches a fresh copy of
the package.
diff --git a/dependency/resolver.go b/dependency/resolver.go
index d12a50c..1d40cfa 100644
--- a/dependency/resolver.go
+++ b/dependency/resolver.go
@@ -400,7 +400,7 @@
 			msg.Debug("Using Iterative Scanning for %s", dep)
 			imps, err = IterativeScan(vdep)
 			if err != nil {
-				msg.Err("Error scanning %s: %s", dep, err)
+				msg.Err("Iterative scanning error %s: %s", dep, err)
 				continue
 			}
 		} else if err != nil {
diff --git a/repo/installer.go b/repo/installer.go
index 1506652..1ceaec1 100644
--- a/repo/installer.go
+++ b/repo/installer.go
@@ -329,8 +329,23 @@
 	// This package may have been placed on the list to look for when it wasn't
 	// downloaded but it has since been downloaded before coming to this entry.
 	if _, err := os.Stat(dest); err == nil {
-		msg.Debug("Found %s", dest)
-		return true, nil
+		// Make sure the location contains files. It may be an empty directory.
+		empty, err := gpath.IsDirectoryEmpty(dest)
+		if err != nil {
+			return false, err
+		}
+		if empty {
+			msg.Warn("%s is an existing location with no files. Fetching a new copy of the dependency.", dest)
+			msg.Debug("Removing empty directory %s", dest)
+			err := os.RemoveAll(dest)
+			if err != nil {
+				msg.Debug("Installer error removing directory %s: %s", dest, err)
+				return false, err
+			}
+		} else {
+			msg.Debug("Found %s", dest)
+			return true, nil
+		}
 	}
 
 	msg.Info("Fetching %s into %s", pkg, m.destination)
diff --git a/repo/vcs.go b/repo/vcs.go
index 3ef8ff1..9ff76c7 100644
--- a/repo/vcs.go
+++ b/repo/vcs.go
@@ -55,6 +55,17 @@
 		_, err = v.DetectVcsFromFS(dest)
 		if updateVendored == false && empty == false && err == v.ErrCannotDetectVCS {
 			msg.Warn("%s appears to be a vendored package. Unable to update. Consider the '--update-vendored' flag.\n", dep.Name)
+		} else if updateVendored == false && empty == true && err == v.ErrCannotDetectVCS {
+			msg.Warn("%s is an empty directory. Fetching a new copy of the dependency.", dep.Name)
+			msg.Debug("Removing empty directory %s", dest)
+			err := os.RemoveAll(dest)
+			if err != nil {
+				return err
+			}
+			if err = VcsGet(dep, dest, home, cache, cacheGopath, useGopath); err != nil {
+				msg.Warn("Unable to checkout %s\n", dep.Name)
+				return err
+			}
 		} else {
 
 			if updateVendored == true && empty == false && err == v.ErrCannotDetectVCS {