From 922a189f4061796b0d4afeeb45e508c36cc5e7fc Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Fri, 28 Mar 2014 10:48:36 +0800
Subject: [PATCH] bug fixed

---
 update.go | 55 ++++++++++++++++++++++++++++++-------------------------
 1 file changed, 30 insertions(+), 25 deletions(-)

diff --git a/update.go b/update.go
index 39729937e..1c14c33d7 100644
--- a/update.go
+++ b/update.go
@@ -40,24 +40,33 @@ func runUpdate(c *cli.Context) {
 	log.SetOutput(w)
 
 	args := c.Args()
+	//log.Info(args)
 	if len(args) != 3 {
 		log.Error("received less 3 parameters")
 		return
 	}
 
 	refName := args[0]
+	if refName == "" {
+		log.Error("refName is empty, shouldn't use")
+		return
+	}
 	oldCommitId := args[1]
 	newCommitId := args[2]
 
+	isNew := strings.HasPrefix(oldCommitId, "0000000")
+	if isNew &&
+		strings.HasPrefix(newCommitId, "0000000") {
+		log.Error("old rev and new rev both 000000")
+		return
+	}
+
 	userName := os.Getenv("userName")
 	userId := os.Getenv("userId")
 	//repoId := os.Getenv("repoId")
 	repoName := os.Getenv("repoName")
 
-	log.Info("username", userName)
-	log.Info("repoName", repoName)
 	f := models.RepoPath(userName, repoName)
-	log.Info("f", f)
 
 	gitUpdate := exec.Command("git", "update-server-info")
 	gitUpdate.Dir = f
@@ -69,24 +78,6 @@ func runUpdate(c *cli.Context) {
 		return
 	}
 
-	ref, err := repo.LookupReference(refName)
-	if err != nil {
-		log.Error("runUpdate.Ref repoId: %v", err)
-		return
-	}
-
-	oldOid, err := git.NewOidFromString(oldCommitId)
-	if err != nil {
-		log.Error("runUpdate.Ref repoId: %v", err)
-		return
-	}
-
-	oldCommit, err := repo.LookupCommit(oldOid)
-	if err != nil {
-		log.Error("runUpdate.Ref repoId: %v", err)
-		return
-	}
-
 	newOid, err := git.NewOidFromString(newCommitId)
 	if err != nil {
 		log.Error("runUpdate.Ref repoId: %v", err)
@@ -101,11 +92,25 @@ func runUpdate(c *cli.Context) {
 
 	var l *list.List
 	// if a new branch
-	if strings.HasPrefix(oldCommitId, "0000000") {
-		l, err = ref.AllCommits()
-
+	if isNew {
+		l, err = repo.CommitsBefore(newCommit.Id())
+		if err != nil {
+			log.Error("Find CommitsBefore erro:", err)
+			return
+		}
 	} else {
-		l = ref.CommitsBetween(newCommit, oldCommit)
+		oldOid, err := git.NewOidFromString(oldCommitId)
+		if err != nil {
+			log.Error("runUpdate.Ref repoId: %v", err)
+			return
+		}
+
+		oldCommit, err := repo.LookupCommit(oldOid)
+		if err != nil {
+			log.Error("runUpdate.Ref repoId: %v", err)
+			return
+		}
+		l = repo.CommitsBetween(newCommit, oldCommit)
 	}
 
 	if err != nil {