From 1240fef0ca252f03c8cd67ef84d6fd48cd3cb76d Mon Sep 17 00:00:00 2001
From: lunnyxiao <xiaolunwen@gmail.com>
Date: Tue, 2 Sep 2014 11:57:06 +0800
Subject: [PATCH] bug fixed for migrate and fixed #141

---
 models/repo.go | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/models/repo.go b/models/repo.go
index 4703696678..105e8eecda 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -277,7 +277,7 @@ func MirrorUpdate() {
 
 // MigrateRepository migrates a existing repository from other project hosting.
 func MigrateRepository(u *User, name, desc string, private, mirror bool, url string) (*Repository, error) {
-	repo, err := CreateRepository(u, name, desc, "", "", private, mirror, false)
+	repo, err := CreateRepository(u, name, desc, "", "", private, true, false)
 	if err != nil {
 		return nil, err
 	}
@@ -307,8 +307,15 @@ func MigrateRepository(u *User, name, desc string, private, mirror bool, url str
 		return repo, UpdateRepository(repo)
 	}
 
-	// Clone from local repository.
+	// this command could for both migrate and mirror
 	_, stderr, err := process.ExecTimeout(10*time.Minute,
+		fmt.Sprintf("MigrateRepository: %s", repoPath),
+		"git", "clone", "--mirror", "--bare", url, repoPath)
+	if err != nil {
+		return repo, errors.New("git clone: " + stderr)
+	}
+	// Clone from local repository.
+	/*_, stderr, err := process.ExecTimeout(10*time.Minute,
 		fmt.Sprintf("MigrateRepository(git clone): %s", repoPath),
 		"git", "clone", repoPath, tmpDir)
 	if err != nil {
@@ -327,7 +334,7 @@ func MigrateRepository(u *User, name, desc string, private, mirror bool, url str
 		tmpDir, fmt.Sprintf("MigrateRepository(git push): %s", repoPath),
 		"git", "push", "--tags", "origin", "refs/remotes/upstream/*:refs/heads/*"); err != nil {
 		return repo, errors.New("git push: " + stderr)
-	}
+	}*/
 
 	return repo, UpdateRepository(repo)
 }