mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Add Retry button when creating a mirror-repo fails (#26228)
				
					
				
			fixed #26156 * Added a retry button in the frontend (only displayed when the status is abnormal) * After clicking Retry, the backend adds the task back to the task queue   --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		| @@ -80,6 +80,7 @@ milestones = Milestones | ||||
|  | ||||
| ok = OK | ||||
| cancel = Cancel | ||||
| retry = Retry | ||||
| rerun = Re-run | ||||
| rerun_all = Re-run all jobs | ||||
| save = Save | ||||
|   | ||||
| @@ -259,6 +259,15 @@ func setMigrationContextData(ctx *context.Context, serviceType structs.GitServic | ||||
| 	ctx.Data["service"] = serviceType | ||||
| } | ||||
|  | ||||
| func MigrateRetryPost(ctx *context.Context) { | ||||
| 	if err := task.RetryMigrateTask(ctx.Repo.Repository.ID); err != nil { | ||||
| 		log.Error("Retry task failed: %v", err) | ||||
| 		ctx.ServerError("task.RetryMigrateTask", err) | ||||
| 		return | ||||
| 	} | ||||
| 	ctx.JSONOK() | ||||
| } | ||||
|  | ||||
| func MigrateCancelPost(ctx *context.Context) { | ||||
| 	migratingTask, err := admin_model.GetMigratingTask(ctx.Repo.Repository.ID) | ||||
| 	if err != nil { | ||||
|   | ||||
| @@ -953,7 +953,11 @@ func registerRoutes(m *web.Route) { | ||||
| 				addSettingsSecretsRoutes() | ||||
| 				addSettingVariablesRoutes() | ||||
| 			}, actions.MustEnableActions) | ||||
| 			m.Post("/migrate/cancel", repo.MigrateCancelPost) // this handler must be under "settings", otherwise this incomplete repo can't be accessed | ||||
| 			// the follow handler must be under "settings", otherwise this incomplete repo can't be accessed | ||||
| 			m.Group("/migrate", func() { | ||||
| 				m.Post("/retry", repo.MigrateRetryPost) | ||||
| 				m.Post("/cancel", repo.MigrateCancelPost) | ||||
| 			}) | ||||
| 		}, ctxDataSet("PageIsRepoSettings", true, "LFSStartServer", setting.LFS.StartServer)) | ||||
| 	}, reqSignIn, context.RepoAssignment, context.UnitTypes(), reqRepoAdmin, context.RepoRef()) | ||||
|  | ||||
|   | ||||
| @@ -126,3 +126,27 @@ func CreateMigrateTask(doer, u *user_model.User, opts base.MigrateOptions) (*adm | ||||
|  | ||||
| 	return task, nil | ||||
| } | ||||
|  | ||||
| // RetryMigrateTask retry a migrate task | ||||
| func RetryMigrateTask(repoID int64) error { | ||||
| 	migratingTask, err := admin_model.GetMigratingTask(repoID) | ||||
| 	if err != nil { | ||||
| 		log.Error("GetMigratingTask: %v", err) | ||||
| 		return err | ||||
| 	} | ||||
| 	if migratingTask.Status == structs.TaskStatusQueued || migratingTask.Status == structs.TaskStatusRunning { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	// TODO Need to removing the storage/database garbage brought by the failed task | ||||
|  | ||||
| 	// Reset task status and messages | ||||
| 	migratingTask.Status = structs.TaskStatusQueued | ||||
| 	migratingTask.Message = "" | ||||
| 	if err = migratingTask.UpdateCols("status", "message"); err != nil { | ||||
| 		log.Error("task.UpdateCols failed: %v", err) | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return taskQueue.Push(migratingTask) | ||||
| } | ||||
|   | ||||
| @@ -40,6 +40,7 @@ | ||||
| 									{{else}} | ||||
| 										<button class="ui basic red show-modal button" data-modal="#cancel-repo-modal">{{.locale.Tr "cancel"}}</button> | ||||
| 									{{end}} | ||||
| 									<button id="repo_migrating_retry" data-migrating-task-retry-url="{{.Link}}/settings/migrate/retry" class="ui basic button gt-hidden">{{.locale.Tr "retry"}}</button> | ||||
| 								</div> | ||||
| 							{{end}} | ||||
| 						</div> | ||||
|   | ||||
| @@ -1,12 +1,14 @@ | ||||
| import $ from 'jquery'; | ||||
| import {hideElem, showElem} from '../utils/dom.js'; | ||||
|  | ||||
| const {appSubUrl} = window.config; | ||||
| const {appSubUrl, csrfToken} = window.config; | ||||
|  | ||||
| export function initRepoMigrationStatusChecker() { | ||||
|   const $repoMigrating = $('#repo_migrating'); | ||||
|   if (!$repoMigrating.length) return; | ||||
|  | ||||
|   $('#repo_migrating_retry').on('click', doMigrationRetry); | ||||
|  | ||||
|   const task = $repoMigrating.attr('data-migrating-task-id'); | ||||
|  | ||||
|   // returns true if the refresh still need to be called after a while | ||||
| @@ -31,6 +33,7 @@ export function initRepoMigrationStatusChecker() { | ||||
|     if (data.status === 3) { | ||||
|       hideElem('#repo_migrating_progress'); | ||||
|       hideElem('#repo_migrating'); | ||||
|       showElem('#repo_migrating_retry'); | ||||
|       showElem('#repo_migrating_failed'); | ||||
|       showElem('#repo_migrating_failed_image'); | ||||
|       $('#repo_migrating_failed_error').text(data.message); | ||||
| @@ -53,3 +56,14 @@ export function initRepoMigrationStatusChecker() { | ||||
|  | ||||
|   syncTaskStatus(); // no await | ||||
| } | ||||
|  | ||||
| async function doMigrationRetry(e) { | ||||
|   await fetch($(e.target).attr('data-migrating-task-retry-url'), { | ||||
|     method: 'post', | ||||
|     headers: { | ||||
|       'X-Csrf-Token': csrfToken, | ||||
|       'Content-Type': 'application/json', | ||||
|     }, | ||||
|   }); | ||||
|   window.location.reload(); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user