summaryrefslogtreecommitdiffstats
path: root/web_src/js
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2023-05-11 16:25:46 +0800
committerGitHub <noreply@github.com>2023-05-11 08:25:46 +0000
commitf6e029e6c7849d4361abf7f1d749b5d528364ac4 (patch)
treeaf285dd000dc48e4e94e717cf61a8b2437e99beb /web_src/js
parent58dfaf3a75a097088376a9c221784b3675ac9c48 (diff)
downloadgitea-f6e029e6c7849d4361abf7f1d749b5d528364ac4.tar.gz
gitea-f6e029e6c7849d4361abf7f1d749b5d528364ac4.zip
Make repo migration cancelable and fix various bugs (#24605)
Replace #12917 Close #24601 Close #12845 ![image](https://github.com/go-gitea/gitea/assets/2114189/39378118-064d-40fb-8396-4579ebf33917) ![image](https://github.com/go-gitea/gitea/assets/2114189/faf37418-191c-46a6-90a8-353141e00e2d) ![image](https://github.com/go-gitea/gitea/assets/2114189/fdc8ee4d-125f-4737-9990-89bcdf9eb388) ![image](https://github.com/go-gitea/gitea/assets/2114189/9a3bd2c2-fe20-4011-81f0-990ed869d139) --------- Co-authored-by: Yarden Shoham <git@yardenshoham.com> Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Giteabot <teabot@gitea.io>
Diffstat (limited to 'web_src/js')
-rw-r--r--web_src/js/features/repo-migrate.js90
1 files changed, 47 insertions, 43 deletions
diff --git a/web_src/js/features/repo-migrate.js b/web_src/js/features/repo-migrate.js
index 93d1390b4b..e57348d31b 100644
--- a/web_src/js/features/repo-migrate.js
+++ b/web_src/js/features/repo-migrate.js
@@ -1,51 +1,55 @@
import $ from 'jquery';
import {hideElem, showElem} from '../utils/dom.js';
-const {appSubUrl, csrfToken} = window.config;
+const {appSubUrl} = window.config;
export function initRepoMigrationStatusChecker() {
- const migrating = $('#repo_migrating');
- hideElem($('#repo_migrating_failed'));
- hideElem($('#repo_migrating_failed_image'));
- hideElem($('#repo_migrating_progress_message'));
- if (migrating) {
- const task = migrating.attr('task');
- if (task === undefined) {
- return;
+ const $repoMigrating = $('#repo_migrating');
+ if (!$repoMigrating.length) return;
+
+ const task = $repoMigrating.attr('data-migrating-task-id');
+
+ // returns true if the refresh still need to be called after a while
+ const refresh = async () => {
+ const res = await fetch(`${appSubUrl}/user/task/${task}`);
+ if (res.status !== 200) return true; // continue to refresh if network error occurs
+
+ const data = await res.json();
+
+ // for all status
+ if (data.message) {
+ $('#repo_migrating_progress_message').text(data.message);
+ }
+
+ // TaskStatusFinished
+ if (data.status === 4) {
+ window.location.reload();
+ return false;
}
- $.ajax({
- type: 'GET',
- url: `${appSubUrl}/user/task/${task}`,
- data: {
- _csrf: csrfToken,
- },
- complete(xhr) {
- if (xhr.status === 200 && xhr.responseJSON) {
- if (xhr.responseJSON.status === 4) {
- window.location.reload();
- return;
- } else if (xhr.responseJSON.status === 3) {
- hideElem($('#repo_migrating_progress'));
- hideElem($('#repo_migrating'));
- showElem($('#repo_migrating_failed'));
- showElem($('#repo_migrating_failed_image'));
- $('#repo_migrating_failed_error').text(xhr.responseJSON.message);
- return;
- }
- if (xhr.responseJSON.message) {
- showElem($('#repo_migrating_progress_message'));
- $('#repo_migrating_progress_message').text(xhr.responseJSON.message);
- }
- setTimeout(() => {
- initRepoMigrationStatusChecker();
- }, 2000);
- return;
- }
- hideElem($('#repo_migrating_progress'));
- hideElem($('#repo_migrating'));
- showElem($('#repo_migrating_failed'));
- showElem($('#repo_migrating_failed_image'));
+
+ // TaskStatusFailed
+ if (data.status === 3) {
+ hideElem('#repo_migrating_progress');
+ hideElem('#repo_migrating');
+ showElem('#repo_migrating_failed');
+ showElem('#repo_migrating_failed_image');
+ $('#repo_migrating_failed_error').text(data.message);
+ return false;
+ }
+
+ return true; // continue to refresh
+ };
+
+ const syncTaskStatus = async () => {
+ let doNextRefresh = true;
+ try {
+ doNextRefresh = await refresh();
+ } finally {
+ if (doNextRefresh) {
+ setTimeout(syncTaskStatus, 2000);
}
- });
- }
+ }
+ };
+
+ syncTaskStatus(); // no await
}