mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Respect LFS File Lock on UI (#8719)
* update #8687 respect file locking * upate #8687 Add LFS locker information * update #8719 enhance coding style and return error
This commit is contained in:
		| @@ -2810,3 +2810,19 @@ func (repo *Repository) GetOriginalURLHostname() string { | ||||
|  | ||||
| 	return u.Host | ||||
| } | ||||
|  | ||||
| // GetTreePathLock returns LSF lock for the treePath | ||||
| func (repo *Repository) GetTreePathLock(treePath string) (*LFSLock, error) { | ||||
| 	if setting.LFS.StartServer { | ||||
| 		locks, err := GetLFSLockByRepoID(repo.ID) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		for _, lock := range locks { | ||||
| 			if lock.Path == treePath { | ||||
| 				return lock, nil | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return nil, nil | ||||
| } | ||||
|   | ||||
| @@ -703,6 +703,7 @@ editor.preview_changes = Preview Changes | ||||
| editor.cannot_edit_lfs_files = LFS files cannot be edited in the web interface. | ||||
| editor.cannot_edit_non_text_files = Binary files cannot be edited in the web interface. | ||||
| editor.edit_this_file = Edit File | ||||
| editor.this_file_locked = File is locked | ||||
| editor.must_be_on_a_branch = You must be on a branch to make or propose changes to this file. | ||||
| editor.fork_before_edit = You must fork this repository to make or propose changes to this file. | ||||
| editor.delete_this_file = Delete File | ||||
|   | ||||
| @@ -119,8 +119,19 @@ func RefBlame(ctx *context.Context) { | ||||
| 	ctx.Data["IsBlame"] = true | ||||
|  | ||||
| 	if ctx.Repo.CanEnableEditor() { | ||||
| 		// Check LFS Lock | ||||
| 		lfsLock, err := ctx.Repo.Repository.GetTreePathLock(ctx.Repo.TreePath) | ||||
| 		if err != nil { | ||||
| 			ctx.ServerError("GetTreePathLock", err) | ||||
| 			return | ||||
| 		} | ||||
| 		if lfsLock != nil && lfsLock.OwnerID != ctx.User.ID { | ||||
| 			ctx.Data["CanDeleteFile"] = false | ||||
| 			ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.this_file_locked") | ||||
| 		} else { | ||||
| 			ctx.Data["CanDeleteFile"] = true | ||||
| 			ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.delete_this_file") | ||||
| 		} | ||||
| 	} else if !ctx.Repo.IsViewBranch { | ||||
| 		ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.must_be_on_a_branch") | ||||
| 	} else if !ctx.Repo.CanWrite(models.UnitTypeCode) { | ||||
|   | ||||
| @@ -265,6 +265,17 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st | ||||
| 			ctx.Data["RawFileLink"] = fmt.Sprintf("%s%s.git/info/lfs/objects/%s/%s", setting.AppURL, ctx.Repo.Repository.FullName(), meta.Oid, filenameBase64) | ||||
| 		} | ||||
| 	} | ||||
| 	// Check LFS Lock | ||||
| 	lfsLock, err := ctx.Repo.Repository.GetTreePathLock(ctx.Repo.TreePath) | ||||
| 	ctx.Data["LFSLock"] = lfsLock | ||||
| 	if err != nil { | ||||
| 		ctx.ServerError("GetTreePathLock", err) | ||||
| 		return | ||||
| 	} | ||||
| 	if lfsLock != nil { | ||||
| 		ctx.Data["LFSLockOwner"] = lfsLock.Owner.DisplayName() | ||||
| 		ctx.Data["LFSLockHint"] = ctx.Tr("repo.editor.this_file_locked") | ||||
| 	} | ||||
|  | ||||
| 	// Assume file is not editable first. | ||||
| 	if isLFSFile { | ||||
| @@ -334,8 +345,13 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st | ||||
| 		} | ||||
| 		if !isLFSFile { | ||||
| 			if ctx.Repo.CanEnableEditor() { | ||||
| 				if lfsLock != nil && lfsLock.OwnerID != ctx.User.ID { | ||||
| 					ctx.Data["CanEditFile"] = false | ||||
| 					ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.this_file_locked") | ||||
| 				} else { | ||||
| 					ctx.Data["CanEditFile"] = true | ||||
| 					ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.edit_this_file") | ||||
| 				} | ||||
| 			} else if !ctx.Repo.IsViewBranch { | ||||
| 				ctx.Data["EditFileTooltip"] = ctx.Tr("repo.editor.must_be_on_a_branch") | ||||
| 			} else if !ctx.Repo.CanWrite(models.UnitTypeCode) { | ||||
| @@ -368,8 +384,13 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st | ||||
| 	} | ||||
|  | ||||
| 	if ctx.Repo.CanEnableEditor() { | ||||
| 		if lfsLock != nil && lfsLock.OwnerID != ctx.User.ID { | ||||
| 			ctx.Data["CanDeleteFile"] = false | ||||
| 			ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.this_file_locked") | ||||
| 		} else { | ||||
| 			ctx.Data["CanDeleteFile"] = true | ||||
| 			ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.delete_this_file") | ||||
| 		} | ||||
| 	} else if !ctx.Repo.IsViewBranch { | ||||
| 		ctx.Data["DeleteFileTooltip"] = ctx.Tr("repo.editor.must_be_on_a_branch") | ||||
| 	} else if !ctx.Repo.CanWrite(models.UnitTypeCode) { | ||||
|   | ||||
| @@ -16,6 +16,12 @@ | ||||
| 							{{FileSize .FileSize}}{{if .IsLFSFile}} ({{.i18n.Tr "repo.stored_lfs"}}){{end}} | ||||
| 						</div> | ||||
| 					{{end}} | ||||
| 					{{if .LFSLock}} | ||||
| 						<div class="file-info-entry"> | ||||
| 							<i class="fa fa-lock poping up disabled" data-content="{{.LFSLockHint}}" data-position="bottom center" data-variation="tiny inverted"></i> | ||||
| 							<a href="{{AppSubUrl}}/{{.LFSLock.Owner.Name}}">{{.LFSLockOwner}}</a> | ||||
| 						</div> | ||||
| 					{{end}} | ||||
| 				</div> | ||||
| 			{{end}} | ||||
| 		</div> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user