Merge pull request #324 from garyburd/master

Follow redirect in search API
diff --git a/gddo-server/main.go b/gddo-server/main.go
index 486addd..464deb5 100644
--- a/gddo-server/main.go
+++ b/gddo-server/main.go
@@ -60,6 +60,7 @@
 	robotRequest
 	queryRequest
 	refreshRequest
+	apiRequest
 )
 
 type crawlResult struct {
@@ -84,7 +85,7 @@
 
 	needsCrawl := false
 	switch requestType {
-	case queryRequest:
+	case queryRequest, apiRequest:
 		needsCrawl = nextCrawl.IsZero() && len(pkgs) == 0
 	case humanRequest:
 		needsCrawl = nextCrawl.Before(time.Now())
@@ -598,7 +599,10 @@
 	var pkgs []database.Package
 
 	if gosrc.IsValidRemotePath(q) || (strings.Contains(q, "/") && gosrc.IsGoRepoPath(q)) {
-		pdoc, _, err := getDoc(q, robotRequest)
+		pdoc, _, err := getDoc(q, apiRequest)
+		if e, ok := err.(gosrc.NotFoundError); ok && e.Redirect != "" {
+			pdoc, _, err = getDoc(e.Redirect, robotRequest)
+		}
 		if err == nil && pdoc != nil {
 			pkgs = []database.Package{{Path: pdoc.ImportPath, Synopsis: pdoc.Synopsis}}
 		}