mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 08:02:36 +09:00 
			
		
		
		
	add migrate api
This commit is contained in:
		@@ -127,6 +127,7 @@ func SetEngine() (err error) {
 | 
				
			|||||||
	x.ShowSQL = true
 | 
						x.ShowSQL = true
 | 
				
			||||||
	x.ShowDebug = true
 | 
						x.ShowDebug = true
 | 
				
			||||||
	x.ShowErr = true
 | 
						x.ShowErr = true
 | 
				
			||||||
 | 
						x.ShowWarn = true
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,11 +5,15 @@
 | 
				
			|||||||
package v1
 | 
					package v1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
	"path"
 | 
						"path"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/Unknwon/com"
 | 
						"github.com/Unknwon/com"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/gogits/gogs/models"
 | 
						"github.com/gogits/gogs/models"
 | 
				
			||||||
 | 
						"github.com/gogits/gogs/modules/auth"
 | 
				
			||||||
 | 
						"github.com/gogits/gogs/modules/log"
 | 
				
			||||||
	"github.com/gogits/gogs/modules/middleware"
 | 
						"github.com/gogits/gogs/modules/middleware"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -55,3 +59,85 @@ func SearchRepos(ctx *middleware.Context) {
 | 
				
			|||||||
		"data": results,
 | 
							"data": results,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Migrate(ctx *middleware.Context, form auth.MigrateRepoForm) {
 | 
				
			||||||
 | 
						ctxUser := ctx.User
 | 
				
			||||||
 | 
						// Not equal means current user is an organization.
 | 
				
			||||||
 | 
						if form.Uid != ctx.User.Id {
 | 
				
			||||||
 | 
							org, err := models.GetUserById(form.Uid)
 | 
				
			||||||
 | 
							if err != nil && err != models.ErrUserNotExist {
 | 
				
			||||||
 | 
								ctx.JSON(500, map[string]interface{}{
 | 
				
			||||||
 | 
									"ok":   false,
 | 
				
			||||||
 | 
									"data": err.Error(),
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							ctxUser = org
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := ctx.User.GetOrganizations(); err != nil {
 | 
				
			||||||
 | 
							ctx.JSON(500, map[string]interface{}{
 | 
				
			||||||
 | 
								"ok":   false,
 | 
				
			||||||
 | 
								"data": err.Error(),
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ctx.HasError() {
 | 
				
			||||||
 | 
							ctx.JSON(500, map[string]interface{}{
 | 
				
			||||||
 | 
								"ok":   false,
 | 
				
			||||||
 | 
								"data": ctx.GetErrMsg(),
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ctxUser.IsOrganization() {
 | 
				
			||||||
 | 
							// Check ownership of organization.
 | 
				
			||||||
 | 
							if !ctxUser.IsOrgOwner(ctx.User.Id) {
 | 
				
			||||||
 | 
								ctx.JSON(403, map[string]interface{}{
 | 
				
			||||||
 | 
									"ok":   false,
 | 
				
			||||||
 | 
									"data": "Not allowed",
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						authStr := strings.Replace(fmt.Sprintf("://%s:%s",
 | 
				
			||||||
 | 
							form.AuthUserName, form.AuthPasswd), "@", "%40", -1)
 | 
				
			||||||
 | 
						url := strings.Replace(form.HttpsUrl, "://", authStr+"@", 1)
 | 
				
			||||||
 | 
						repo, err := models.MigrateRepository(ctxUser, form.RepoName, form.Description, form.Private,
 | 
				
			||||||
 | 
							form.Mirror, url)
 | 
				
			||||||
 | 
						if err == nil {
 | 
				
			||||||
 | 
							log.Trace("Repository migrated: %s/%s", ctxUser.Name, form.RepoName)
 | 
				
			||||||
 | 
							ctx.JSON(200,
 | 
				
			||||||
 | 
								map[string]interface{}{
 | 
				
			||||||
 | 
									"ok":   true,
 | 
				
			||||||
 | 
									"data": "/" + ctxUser.Name + "/" + form.RepoName,
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						} else if err == models.ErrRepoAlreadyExist {
 | 
				
			||||||
 | 
							ctx.JSON(500,
 | 
				
			||||||
 | 
								map[string]interface{}{
 | 
				
			||||||
 | 
									"ok":   false,
 | 
				
			||||||
 | 
									"data": err.Error(),
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						} else if err == models.ErrRepoNameIllegal {
 | 
				
			||||||
 | 
							ctx.JSON(500, map[string]interface{}{
 | 
				
			||||||
 | 
								"ok":   false,
 | 
				
			||||||
 | 
								"data": err.Error(),
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if repo != nil {
 | 
				
			||||||
 | 
							if errDelete := models.DeleteRepository(ctxUser.Id, repo.Id, ctxUser.Name); errDelete != nil {
 | 
				
			||||||
 | 
								log.Error(4, "DeleteRepository: %v", errDelete)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.JSON(500, map[string]interface{}{
 | 
				
			||||||
 | 
							"ok":   false,
 | 
				
			||||||
 | 
							"data": err.Error(),
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user