diff --git a/models/repo.go b/models/repo.go
index 802a16465..3311869c0 100755
--- a/models/repo.go
+++ b/models/repo.go
@@ -936,17 +936,24 @@ func (repo *Repository) DescriptionHTML() template.HTML {
return template.HTML(markup.Sanitize(string(desc)))
}
-func isRepositoryExist(e Engine, u *User, repoName string) (bool, error) {
- has, err := e.Get(&Repository{
- OwnerID: u.ID,
- LowerName: strings.ToLower(repoName),
- })
- return has && com.IsDir(RepoPath(u.Name, repoName)), err
+func isRepositoryExist(e Engine, u *User, repoName string, alias string) (bool, error) {
+ var cond = builder.NewCond()
+ cond = cond.And(builder.Eq{"owner_id": u.ID})
+ if alias != "" {
+ subCon := builder.NewCond()
+ subCon = subCon.Or(builder.Eq{"alias": alias}, builder.Eq{"lower_name": repoName})
+ cond = cond.And(subCon)
+ } else {
+ cond = cond.And(builder.Eq{"lower_name": repoName})
+ }
+ count, err := e.Where(cond).Count(&Repository{})
+ //todo 确定从 && 改成 || 是否有问题
+ return count > 0 || com.IsDir(RepoPath(u.Name, repoName)), err
}
// IsRepositoryExist returns true if the repository with given name under user has already existed.
-func IsRepositoryExist(u *User, repoName string) (bool, error) {
- return isRepositoryExist(x, u, repoName)
+func IsRepositoryExist(u *User, repoName string, alias string) (bool, error) {
+ return isRepositoryExist(x, u, repoName, alias)
}
// CloneLink represents different types of clone URLs of repository.
@@ -990,20 +997,24 @@ func (repo *Repository) CloneLink() (cl *CloneLink) {
}
// CheckCreateRepository check if could created a repository
-func CheckCreateRepository(doer, u *User, name string) error {
+func CheckCreateRepository(doer, u *User, repoName, alias string) error {
if !doer.CanCreateRepo() {
return ErrReachLimitOfRepo{u.MaxRepoCreation}
}
- if err := IsUsableRepoName(name); err != nil {
+ if err := IsUsableRepoName(repoName); err != nil {
+ return err
+ }
+
+ if err := IsUsableRepoAlias(alias); err != nil {
return err
}
- has, err := isRepositoryExist(x, u, name)
+ has, err := isRepositoryExist(x, u, repoName, alias)
if err != nil {
return fmt.Errorf("IsRepositoryExist: %v", err)
} else if has {
- return ErrRepoAlreadyExist{u.Name, name}
+ return ErrRepoAlreadyExist{u.Name, repoName}
}
return nil
}
@@ -1052,8 +1063,10 @@ func GetRepoInitFile(tp, name string) ([]byte, error) {
}
var (
- reservedRepoNames = []string{".", ".."}
- reservedRepoPatterns = []string{"*.git", "*.wiki"}
+ reservedRepoNames = []string{".", ".."}
+ reservedRepoPatterns = []string{"*.git", "*.wiki"}
+ reservedRepoAliasNames = []string{}
+ reservedRepoAliasPatterns = []string{}
)
// IsUsableRepoName returns true when repository is usable
@@ -1061,13 +1074,21 @@ func IsUsableRepoName(name string) error {
return isUsableName(reservedRepoNames, reservedRepoPatterns, name)
}
+// IsUsableRepoAlias returns true when repository alias is usable
+func IsUsableRepoAlias(name string) error {
+ return isUsableName(reservedRepoAliasNames, reservedRepoAliasPatterns, name)
+}
+
// CreateRepository creates a repository for the user/organization.
func CreateRepository(ctx DBContext, doer, u *User, repo *Repository) (err error) {
if err = IsUsableRepoName(repo.Name); err != nil {
return err
}
- has, err := isRepositoryExist(ctx.e, u, repo.Name)
+ if err := IsUsableRepoAlias(repo.Alias); err != nil {
+ return err
+ }
+ has, err := isRepositoryExist(ctx.e, u, repo.Name, repo.Alias)
if err != nil {
return fmt.Errorf("IsRepositoryExist: %v", err)
} else if has {
@@ -1249,7 +1270,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error
}
// Check if new owner has repository with same name.
- has, err := IsRepositoryExist(newOwner, repo.Name)
+ has, err := IsRepositoryExist(newOwner, repo.Name, repo.Alias)
if err != nil {
return fmt.Errorf("IsRepositoryExist: %v", err)
} else if has {
@@ -1382,7 +1403,7 @@ func ChangeRepositoryName(doer *User, repo *Repository, newRepoName string) (err
return err
}
- has, err := IsRepositoryExist(repo.Owner, newRepoName)
+ has, err := IsRepositoryExist(repo.Owner, newRepoName, "")
if err != nil {
return fmt.Errorf("IsRepositoryExist: %v", err)
} else if has {
@@ -2538,6 +2559,9 @@ func UpdateRepositoryCommitNum(repo *Repository) error {
}
func GenerateDefaultRepoName(ownerName string) string {
+ if len(ownerName) > 5 {
+ ownerName = ownerName[:5]
+ }
now := time.Now().Format("20060102150405")
return ownerName + now + fmt.Sprint(rand.Intn(10))
}
diff --git a/modules/auth/repo_form.go b/modules/auth/repo_form.go
index 6fefc135d..32890a5c1 100755
--- a/modules/auth/repo_form.go
+++ b/modules/auth/repo_form.go
@@ -63,6 +63,7 @@ type MigrateRepoForm struct {
UID int64 `json:"uid" binding:"Required"`
// required: true
RepoName string `json:"repo_name" binding:"Required;AlphaDashDot;MaxSize(100)"`
+ Alias string `json:"alias" binding:"Required;AlphaDashDotChinese;MaxSize(100)"`
Mirror bool `json:"mirror"`
Private bool `json:"private"`
Description string `json:"description" binding:"MaxSize(255)"`
diff --git a/modules/structs/repo.go b/modules/structs/repo.go
index 2928b6123..b824813bb 100755
--- a/modules/structs/repo.go
+++ b/modules/structs/repo.go
@@ -218,6 +218,7 @@ type MigrateRepoOption struct {
UID int `json:"uid" binding:"Required"`
// required: true
RepoName string `json:"repo_name" binding:"Required"`
+ Alias string `json:"alias" binding:"Required"`
Mirror bool `json:"mirror"`
Private bool `json:"private"`
Description string `json:"description"`
diff --git a/modules/task/task.go b/modules/task/task.go
index 72f111ecc..722e39bec 100644
--- a/modules/task/task.go
+++ b/modules/task/task.go
@@ -84,6 +84,7 @@ func CreateMigrateTask(doer, u *models.User, opts base.MigrateOptions) (*models.
repo, err := repo_module.CreateRepository(doer, u, models.CreateRepoOptions{
Name: opts.RepoName,
+ Alias: opts.Alias,
Description: opts.Description,
OriginalURL: opts.OriginalURL,
GitServiceType: opts.GitServiceType,
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 35f0a98bf..98b2a92f0 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -340,6 +340,7 @@ require_error = ` cannot be empty.`
alpha_dash_error = ` should contain only alphanumeric, dash ('-') and underscore ('_') characters.`
alpha_dash_dot_error = ` should contain only alphanumeric, dash ('-'), underscore ('_') and dot ('.') characters.`
git_ref_name_error = ` must be a well-formed Git reference name.`
+alpha_dash_dot_chinese_error= ` should contain only alphanumeric, chinese, dash ('-') and underscore ('_') characters.`
size_error = ` must be size %s.`
min_size_error = ` must contain at least %s characters.`
max_size_error = ` must contain at most %s characters.`
@@ -856,7 +857,7 @@ modelarts.train_job.description=Description
modelarts.train_job.parameter_setting=Parameter setting
modelarts.train_job.parameter_setting_info=Parameter Info
modelarts.train_job.fast_parameter_setting=fast_parameter_setting
-modelarts.train_job.fast_parameter_setting_config=fast_parameter_setting_config
+modelarts.train_job.fast_parameter_setting_config=fast_parameter_setting_config
modelarts.train_job.fast_parameter_setting_config_link=fast_parameter_setting_config_link
modelarts.train_job.frames=frames
modelarts.train_job.algorithm_origin=Algorithm Origin
@@ -1136,7 +1137,7 @@ issues.filter_label_exclude = `Use alt
+ click/enter
t
issues.filter_label_no_select = All labels
issues.filter_milestone = Milestone
issues.filter_milestone_no_select = All milestones
-issues.filter_milestone_no_add = Not add milestones
+issues.filter_milestone_no_add = Not add milestones
issues.filter_assignee = Assignee
issues.filter_assginee_no_select = All assignees
issues.filter_type = Type
diff --git a/routers/repo/repo.go b/routers/repo/repo.go
index e20bc7fb3..a509cb52e 100644
--- a/routers/repo/repo.go
+++ b/routers/repo/repo.go
@@ -362,6 +362,7 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
GitServiceType: gitServiceType,
CloneAddr: remoteAddr,
RepoName: form.RepoName,
+ Alias: form.Alias,
Description: form.Description,
Private: form.Private || setting.Repository.ForcePrivate,
Mirror: form.Mirror,
@@ -384,7 +385,7 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
opts.Releases = false
}
- err = models.CheckCreateRepository(ctx.User, ctxUser, opts.RepoName)
+ err = models.CheckCreateRepository(ctx.User, ctxUser, opts.RepoName, opts.Alias)
if err != nil {
handleMigrateError(ctx, ctxUser, err, "MigratePost", tplMigrate, &form)
return