Redirects for renamed repos (#807)
	
		
	
				
					
				
			* Redirects for renamed repos * Remove unused phrase from localestokarchuk/v1.17
							parent
							
								
									e86d935175
								
							
						
					
					
						commit
						027591a3a5
					
				@ -0,0 +1,62 @@ | 
				
			||||
// 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 | 
				
			||||
 | 
				
			||||
import "strings" | 
				
			||||
 | 
				
			||||
// 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 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
// NewRepoRedirect create a new repo redirect
 | 
				
			||||
func NewRepoRedirect(ownerID, repoID int64, oldRepoName, newRepoName string) error { | 
				
			||||
	oldRepoName = strings.ToLower(oldRepoName) | 
				
			||||
	newRepoName = strings.ToLower(newRepoName) | 
				
			||||
	sess := x.NewSession() | 
				
			||||
	defer sess.Close() | 
				
			||||
 | 
				
			||||
	if err := sess.Begin(); err != nil { | 
				
			||||
		return err | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if err := deleteRepoRedirect(sess, ownerID, newRepoName); err != nil { | 
				
			||||
		sess.Rollback() | 
				
			||||
		return err | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if _, err := sess.Insert(&RepoRedirect{ | 
				
			||||
		OwnerID:        ownerID, | 
				
			||||
		LowerName:      oldRepoName, | 
				
			||||
		RedirectRepoID: repoID, | 
				
			||||
	}); err != nil { | 
				
			||||
		sess.Rollback() | 
				
			||||
		return err | 
				
			||||
	} | 
				
			||||
	return sess.Commit() | 
				
			||||
} | 
				
			||||
 | 
				
			||||
// 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 | 
				
			||||
} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue