Make repository management section handle lfs locks (#8726)

* Make repository maangement section handle lfs locks

* Add check attribute handling and handle locking paths better

* More cleanly check-attributes

* handle error

* Check if file exists in default branch before linking to it.

* fixup

* Properly cleanPath

* Use cleanPath

* Sigh
This commit is contained in:
zeripath 2019-12-12 13:18:07 +00:00 committed by Lunny Xiao
parent 751cfb805d
commit dc2fe9801f
10 changed files with 367 additions and 9 deletions

View file

@ -49,7 +49,7 @@ func (l *LFSLock) AfterLoad(session *xorm.Session) {
}
func cleanPath(p string) string {
return path.Clean(p)
return path.Clean("/" + p)[1:]
}
// APIFormat convert a Release to lfs.LFSLock
@ -71,6 +71,8 @@ func CreateLFSLock(lock *LFSLock) (*LFSLock, error) {
return nil, err
}
lock.Path = cleanPath(lock.Path)
l, err := GetLFSLock(lock.Repo, lock.Path)
if err == nil {
return l, ErrLFSLockAlreadyExist{lock.RepoID, lock.Path}
@ -110,9 +112,24 @@ func GetLFSLockByID(id int64) (*LFSLock, error) {
}
// GetLFSLockByRepoID returns a list of locks of repository.
func GetLFSLockByRepoID(repoID int64) (locks []*LFSLock, err error) {
err = x.Where("repo_id = ?", repoID).Find(&locks)
return
func GetLFSLockByRepoID(repoID int64, page, pageSize int) ([]*LFSLock, error) {
sess := x.NewSession()
defer sess.Close()
if page >= 0 && pageSize > 0 {
start := 0
if page > 0 {
start = (page - 1) * pageSize
}
sess.Limit(pageSize, start)
}
lfsLocks := make([]*LFSLock, 0, pageSize)
return lfsLocks, sess.Find(&lfsLocks, &LFSLock{RepoID: repoID})
}
// CountLFSLockByRepoID returns a count of all LFSLocks associated with a repository.
func CountLFSLockByRepoID(repoID int64) (int64, error) {
return x.Count(&LFSLock{RepoID: repoID})
}
// DeleteLFSLockByID deletes a lock by given ID.

View file

@ -2913,7 +2913,7 @@ func (repo *Repository) GetOriginalURLHostname() string {
// GetTreePathLock returns LSF lock for the treePath
func (repo *Repository) GetTreePathLock(treePath string) (*LFSLock, error) {
if setting.LFS.StartServer {
locks, err := GetLFSLockByRepoID(repo.ID)
locks, err := GetLFSLockByRepoID(repo.ID, 0, 0)
if err != nil {
return nil, err
}