2017-02-05 17:35:03 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package models
2019-06-12 22:41:28 +03:00
import (
"strings"
)
2017-02-05 17:35:03 +03:00
// RepoRedirect represents that a repo name should be redirected to another
type RepoRedirect struct {
ID int64 ` xorm:"pk autoincr" `
OwnerID int64 ` xorm:"UNIQUE(s)" `
LowerName string ` xorm:"UNIQUE(s) INDEX NOT NULL" `
RedirectRepoID int64 // repoID to redirect to
}
// LookupRepoRedirect look up if a repository has a redirect name
func LookupRepoRedirect ( ownerID int64 , repoName string ) ( int64 , error ) {
repoName = strings . ToLower ( repoName )
redirect := & RepoRedirect { OwnerID : ownerID , LowerName : repoName }
if has , err := x . Get ( redirect ) ; err != nil {
return 0 , err
} else if ! has {
return 0 , ErrRepoRedirectNotExist { OwnerID : ownerID , RepoName : repoName }
}
return redirect . RedirectRepoID , nil
}
2021-01-24 18:23:05 +03:00
// newRepoRedirect create a new repo redirect
func newRepoRedirect ( e Engine , ownerID , repoID int64 , oldRepoName , newRepoName string ) error {
2017-02-05 17:35:03 +03:00
oldRepoName = strings . ToLower ( oldRepoName )
newRepoName = strings . ToLower ( newRepoName )
2021-01-24 18:23:05 +03:00
if err := deleteRepoRedirect ( e , ownerID , newRepoName ) ; err != nil {
2017-02-05 17:35:03 +03:00
return err
}
2021-01-24 18:23:05 +03:00
if _ , err := e . Insert ( & RepoRedirect {
2017-02-05 17:35:03 +03:00
OwnerID : ownerID ,
LowerName : oldRepoName ,
RedirectRepoID : repoID ,
} ) ; err != nil {
return err
}
2019-12-06 07:00:50 +03:00
return nil
2017-02-05 17:35:03 +03:00
}
// deleteRepoRedirect delete any redirect from the specified repo name to
// anything else
func deleteRepoRedirect ( e Engine , ownerID int64 , repoName string ) error {
repoName = strings . ToLower ( repoName )
_ , err := e . Delete ( & RepoRedirect { OwnerID : ownerID , LowerName : repoName } )
return err
}