From ebb396fb7ec3a4615c1d6dc73e3597e8ee6a5328 Mon Sep 17 00:00:00 2001 From: chaideqing Date: Mon, 29 May 2023 10:42:46 +0800 Subject: [PATCH] * Fix bug#34264, gogs server failed to pull the code. --- module/gogs/control.php | 1 - module/gogs/model.php | 2 +- module/repo/config.php | 13 +++++++++ module/repo/control.php | 34 ++++++++++++------------ module/repo/lang/de.php | 1 + module/repo/lang/en.php | 1 + module/repo/lang/fr.php | 1 + module/repo/lang/vi.php | 3 ++- module/repo/lang/zh-cn.php | 1 + module/repo/lang/zh-tw.php | 1 + module/repo/view/showsynccommit.html.php | 5 ++++ 11 files changed, 43 insertions(+), 20 deletions(-) diff --git a/module/gogs/control.php b/module/gogs/control.php index 1d7e34e03c..b0c57072ff 100644 --- a/module/gogs/control.php +++ b/module/gogs/control.php @@ -37,7 +37,6 @@ class gogs extends control */ public function browse($orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) { - $this->app->loadClass('pager', $static = true); $pager = new pager($recTotal, $recPerPage, $pageID); diff --git a/module/gogs/model.php b/module/gogs/model.php index 62989fd9c4..15d63c1f58 100644 --- a/module/gogs/model.php +++ b/module/gogs/model.php @@ -343,7 +343,7 @@ class gogsModel extends model $gogs = $this->getByID($gogsID); $oauth = "{$gogs->token}@"; - $project->tokenCloneUrl = preg_replace('/(http(s)?:\/\/)/', "\$1$oauth", $project->html_url); + $project->tokenCloneUrl = preg_replace('/(http(s)?:\/\/)/', '${1}' . $gogs->token . '@', $project->html_url); } return $project; diff --git a/module/repo/config.php b/module/repo/config.php index b61e8dbf4a..4e34cdc9bd 100644 --- a/module/repo/config.php +++ b/module/repo/config.php @@ -28,6 +28,19 @@ $config->repo->images = '|png|gif|jpg|ico|jpeg|bmp|'; $config->repo->binary = '|pdf|'; $config->repo->synced = ''; +$config->repo->repoSyncLog = new stdclass(); +$config->repo->repoSyncLog->one = 1; +$config->repo->repoSyncLog->done = 'done'; +$config->repo->repoSyncLog->total = 'Total'; +$config->repo->repoSyncLog->fatal = 'fatal'; +$config->repo->repoSyncLog->error = 'error'; +$config->repo->repoSyncLog->failed = 'failed'; +$config->repo->repoSyncLog->finish = 'finish'; +$config->repo->repoSyncLog->emptyRepo = 'empty repository'; +$config->repo->repoSyncLog->finishCount = 'Counting objects: 100%'; +$config->repo->repoSyncLog->logFilePrefix = '/log/clone.progress.'; +$config->repo->repoSyncLog->finishCompress = 'Compressing objects: 100%'; + $config->repo->editor = new stdclass(); $config->repo->editor->create = array('id' => 'desc', 'tools' => 'simpleTools'); $config->repo->editor->edit = array('id' => 'desc', 'tools' => 'simpleTools'); diff --git a/module/repo/control.php b/module/repo/control.php index 5c44383c18..6f22c8e9bf 100644 --- a/module/repo/control.php +++ b/module/repo/control.php @@ -1433,50 +1433,50 @@ class repo extends control * @param int $repoID * @param string $type * @access public - * @return void + * @return int|void */ public function ajaxSyncCommit($repoID = 0, $type = 'batch') { set_time_limit(0); $repo = $this->repo->getRepoByID($repoID); if(empty($repo)) return; - if($repo->synced) return print('finish'); + if($repo->synced) return print($this->config->repo->repoSyncLog->finish); if(in_array($repo->SCM, array('Gitea', 'Gogs'))) { - $logFile = realPath($this->app->getTmpRoot() . "/log/clone.progress." . strtolower($repo->SCM) . ".{$repo->name}.log"); + $logFile = realPath($this->app->getTmpRoot() . $this->config->repo->repoSyncLog->logFilePrefix . strtolower($repo->SCM) . ".{$repo->name}.log"); if($logFile) { $content = file($logFile); - $lastLine = $content[count($content) - 1]; - - if(strpos($lastLine, 'done') === false) + foreach($content as $line) { - if(strpos($lastLine, 'empty repository') !== false) + if(strpos($line, $this->config->repo->repoSyncLog->fatal) !== false or strpos($line, $this->config->repo->repoSyncLog->failed) !== false) return print($this->config->repo->repoSyncLog->error); + } + + $lastLine = $content[count($content) - 1]; + if(strpos($lastLine, $this->config->repo->repoSyncLog->done) === false) + { + if(strpos($lastLine, $this->config->repo->repoSyncLog->emptyRepo) !== false) { @unlink($logFile); } - elseif(strpos($lastLine, 'Total') !== false) + elseif(strpos($lastLine, $this->config->repo->repoSyncLog->total) !== false) { $logContent = file_get_contents($logFile); - if(strpos($logContent, 'Counting objects: 100%') !== false and strpos($logContent, 'Compressing objects: 100%') !== false) + if(strpos($logContent, $this->config->repo->repoSyncLog->finishCount) !== false and strpos($logContent, $this->config->repo->repoSyncLog->finishCompress) !== false) { @unlink($logFile); } else { - return print(1); + return print($this->config->repo->repoSyncLog->one); } } else { - return print(1); + return print($this->config->repo->repoSyncLog->one); } } - elseif(strpos($lastLine, 'fatal') !== false) - { - return print('finish'); - } else { @unlink($logFile); @@ -1553,13 +1553,13 @@ class repo extends control if(empty($branchID)) { $this->repo->markSynced($repoID); - return print('finish'); + return print($this->config->repo->repoSyncLog->finish); } } } $this->dao->update(TABLE_REPO)->set('commits=commits + ' . $commitCount)->where('id')->eq($repoID)->exec(); - echo $type == 'batch' ? $commitCount : 'finish'; + echo $type == 'batch' ? $commitCount : $this->config->repo->repoSyncLog->finish; } /** diff --git a/module/repo/lang/de.php b/module/repo/lang/de.php index ea299f7a14..0a7492e835 100644 --- a/module/repo/lang/de.php +++ b/module/repo/lang/de.php @@ -177,6 +177,7 @@ $lang->repo->placeholder->gitlabHost = 'Input url of gitlab'; $lang->repo->notice = new stdclass(); $lang->repo->notice->syncing = 'Synchronizing. Please wait ...'; $lang->repo->notice->syncComplete = 'Synchronized. Now redirecting ...'; +$lang->repo->notice->syncFailed = 'Synchronized failed.'; $lang->repo->notice->syncedCount = 'The number of records synchronized is '; $lang->repo->notice->delete = 'Do you want to delete this repo?'; $lang->repo->notice->successDelete = 'Repository is removed.'; diff --git a/module/repo/lang/en.php b/module/repo/lang/en.php index 9175adab27..f451b1135f 100644 --- a/module/repo/lang/en.php +++ b/module/repo/lang/en.php @@ -177,6 +177,7 @@ $lang->repo->placeholder->gitlabHost = 'Input url of gitlab'; $lang->repo->notice = new stdclass(); $lang->repo->notice->syncing = 'Synchronizing. Please wait ...'; $lang->repo->notice->syncComplete = 'Synchronized. Now redirecting ...'; +$lang->repo->notice->syncFailed = 'Synchronized failed.'; $lang->repo->notice->syncedCount = 'The number of records synchronized is '; $lang->repo->notice->delete = 'Do you want to delete this repo?'; $lang->repo->notice->successDelete = 'Repository is removed.'; diff --git a/module/repo/lang/fr.php b/module/repo/lang/fr.php index 78d78b2aaf..d96d84dd42 100644 --- a/module/repo/lang/fr.php +++ b/module/repo/lang/fr.php @@ -177,6 +177,7 @@ $lang->repo->placeholder->gitlabHost = 'Input url of gitlab'; $lang->repo->notice = new stdclass(); $lang->repo->notice->syncing = 'Synchronisation en cours. Veuillez patienter ...'; $lang->repo->notice->syncComplete = 'Synchronisé. Vous allez être redirigé ...'; +$lang->repo->notice->syncFailed = 'Synchronized failed.'; $lang->repo->notice->syncedCount = "Le nombre d'enregistrements synchronisés est "; $lang->repo->notice->delete = 'Etes vous certain de vouloir supprimer ce référentiel ?'; $lang->repo->notice->successDelete = 'Le référentiel est supprimé.'; diff --git a/module/repo/lang/vi.php b/module/repo/lang/vi.php index e1c273f751..a221f7c36d 100644 --- a/module/repo/lang/vi.php +++ b/module/repo/lang/vi.php @@ -168,7 +168,8 @@ $lang->repo->placeholder->gitlabHost = 'Input url of gitlab'; $lang->repo->notice = new stdclass(); $lang->repo->notice->syncing = 'Đang đồng bộ. Vui lòng đợi ...'; -$lang->repo->notice->syncComplete = 'Synchronized. Now redirecting ...'; +$lang->repo->notice->syncComplete = 'Đồng bộ hóa hoàn tất, nhảy ...'; +$lang->repo->notice->syncFailed = 'Đồng bộ hóa không thành công.'; $lang->repo->notice->syncedCount = 'The number of records synchronized is '; $lang->repo->notice->delete = 'Bạn có muốn xóa this repo?'; $lang->repo->notice->successDelete = 'Repository is removed.'; diff --git a/module/repo/lang/zh-cn.php b/module/repo/lang/zh-cn.php index 46fccc9209..4e72237835 100644 --- a/module/repo/lang/zh-cn.php +++ b/module/repo/lang/zh-cn.php @@ -177,6 +177,7 @@ $lang->repo->placeholder->gitlabHost = '请填写GitLab访问地址'; $lang->repo->notice = new stdclass(); $lang->repo->notice->syncing = '正在同步中, 请稍等...'; $lang->repo->notice->syncComplete = '同步完成,正在跳转...'; +$lang->repo->notice->syncFailed = '同步失败'; $lang->repo->notice->syncedCount = '已经同步记录条数'; $lang->repo->notice->delete = '是否要删除该代码库?'; $lang->repo->notice->successDelete = '已经成功删除代码库。'; diff --git a/module/repo/lang/zh-tw.php b/module/repo/lang/zh-tw.php index 59e41603da..43a701fba6 100644 --- a/module/repo/lang/zh-tw.php +++ b/module/repo/lang/zh-tw.php @@ -154,6 +154,7 @@ $lang->repo->placeholder->gitlabHost = '請填寫GitLab訪問地址'; $lang->repo->notice = new stdclass(); $lang->repo->notice->syncing = '正在同步中, 請稍等...'; $lang->repo->notice->syncComplete = '同步完成,正在跳轉...'; +$lang->repo->notice->syncFailed = '同步失敗.'; $lang->repo->notice->syncedCount = '已經同步記錄條數'; $lang->repo->notice->delete = '是否要刪除該版本庫?'; $lang->repo->notice->successDelete = '已經成功刪除版本庫。'; diff --git a/module/repo/view/showsynccommit.html.php b/module/repo/view/showsynccommit.html.php index fb206c7758..a4e7eb70ae 100644 --- a/module/repo/view/showsynccommit.html.php +++ b/module/repo/view/showsynccommit.html.php @@ -39,6 +39,11 @@ $(function(){ $('#caption').text('repo->notice->syncComplete?>'); return self.location = ''; } + if(data == 'error') + { + $('#mainContent .content p').text('repo->notice->syncFailed?>'); + return; + } $('#commits').html(parseInt($('#commits').html()) + parseInt(data)); setTimeout(syncComments, 10); });