Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita00d612

Browse files
committed
fix:#51 endless loop
1 parent8bb7e94 commita00d612

File tree

4 files changed

+46
-29
lines changed

4 files changed

+46
-29
lines changed

‎app/Coding/Wiki.php‎

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public function createWikiByZip(string $token, string $projectName, array $uploa
8383
* @param string $jobId
8484
* @return mixed
8585
* @throws \GuzzleHttp\Exception\GuzzleException
86+
* @throws Exception
8687
*/
8788
publicfunctiongetImportJobStatus(string$token,string$projectName,string$jobId)
8889
{
@@ -99,9 +100,35 @@ public function getImportJobStatus(string $token, string $projectName, string $j
99100
],
100101
]);
101102
$result =json_decode($response->getBody(),true);
103+
if (isset($result['Response']['Error']['Message'])) {
104+
thrownewException($result['Response']['Error']['Message']);
105+
}
102106
return$result['Response']['Data'];
103107
}
104108

109+
publicfunctiongetImportJobStatusWithRetry(string$token,string$projectName,string$jobId,int$retry =10)
110+
{
111+
$waitingTimes =0;
112+
while (true) {
113+
// HACK 如果上传成功立即查询,会报错:invoke function
114+
sleep(1);
115+
try {
116+
$jobStatus =$this->getImportJobStatus($token,$projectName,$jobId);
117+
if (in_array($jobStatus['Status'], ['wait_process','processing']) &&$waitingTimes <$retry) {
118+
$waitingTimes++;
119+
continue;
120+
}
121+
return$jobStatus;
122+
}catch (Exception$e) {
123+
if ($waitingTimes <10) {
124+
$waitingTimes++;
125+
continue;
126+
}
127+
throw$e;
128+
}
129+
break;
130+
}
131+
}
105132
publicfunctioncreateWikiByUploadZip(string$token,string$projectName,string$zipFileFullPath,int$parentId)
106133
{
107134
$zipFilename =basename($zipFileFullPath);
@@ -136,7 +163,7 @@ public function getWiki(string $token, string $projectName, int $id, int $versio
136163
return$result['Response']['Data'];
137164
}
138165

139-
publicfunctionupdateWikiTitle(string$token,string$projectName,int$id,string$title):bool
166+
publicfunctionupdateTitle(string$token,string$projectName,int$id,string$title):bool
140167
{
141168
$response =$this->client->request('POST','https://e.coding.net/open-api', [
142169
'headers' => [

‎app/Commands/WikiImportCommand.php‎

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -197,34 +197,24 @@ private function uploadConfluencePages(string $dataPath, array $tree, array $tit
197197
);
198198
$this->info('上传成功,正在处理,任务 ID:' .$result['JobId']);
199199
$wikiId =null;
200-
$waitingTimes =0;
201-
while (true) {
202-
// HACK 如果上传成功立即查询,会报错:invoke function
203-
sleep(1);
204-
try {
205-
$jobStatus =$this->codingWiki->getImportJobStatus(
206-
$this->codingToken,
207-
$this->codingProjectUri,
208-
$result['JobId']
209-
);
210-
}catch (Exception$e) {
211-
$waitingTimes++;
212-
continue;
213-
}
214-
if (in_array($jobStatus['Status'], ['wait_process','processing']) &&$waitingTimes <10) {
215-
$waitingTimes++;
216-
continue;
217-
}
218-
if ($jobStatus['Status'] =='success') {
219-
$wikiId =intval($jobStatus['Iids'][0]);
220-
$this->codingWiki->updateWikiTitle($this->codingToken,$this->codingProjectUri,$wikiId,$title);
221-
}
222-
break;
200+
try {
201+
$jobStatus =$this->codingWiki->getImportJobStatusWithRetry(
202+
$this->codingToken,
203+
$this->codingProjectUri,
204+
$result['JobId']
205+
);
206+
}catch (Exception$e) {
207+
$this->error('错误:导入失败,跳过');
208+
continue;
209+
}
210+
if ($jobStatus['Status'] =='success') {
211+
$wikiId =intval($jobStatus['Iids'][0]);
223212
}
224213
if (empty($wikiId)) {
225-
$this->warn('导入失败,跳过');
214+
$this->error('错误:导入失败,跳过');
226215
continue;
227216
}
217+
$this->codingWiki->updateTitle($this->codingToken,$this->codingProjectUri,$wikiId,$title);
228218
if (!empty($subPages)) {
229219
$this->info('发现' .count($subPages) .' 个子页面');
230220
// TODO tests

‎tests/Feature/WikiImportCommandTest.php‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ public function testHandleConfluenceHtmlSuccess()
167167
file_get_contents($this->dataDir .'coding/' .'DescribeImportJobStatusResponse.json'),
168168
true
169169
)['Response']['Data']);
170-
$mock->shouldReceive('updateWikiTitle')->times(4)->andReturn(true);
170+
$mock->shouldReceive('updateTitle')->times(4)->andReturn(true);
171171

172172

173173
$mockDisk = \Mockery::mock(Disk::class, [])->makePartial();
@@ -233,7 +233,7 @@ public function testHandleConfluenceHtmlZipSuccess()
233233
file_get_contents($this->dataDir .'coding/' .'DescribeImportJobStatusResponse.json'),
234234
true
235235
)['Response']['Data']);
236-
$mock->shouldReceive('updateWikiTitle')->times(5)->andReturn(true);
236+
$mock->shouldReceive('updateTitle')->times(5)->andReturn(true);
237237

238238

239239
$mockDisk = \Mockery::mock(Disk::class, [])->makePartial();

‎tests/Unit/CodingWikiTest.php‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ public function testGetWiki()
243243
$this->assertEquals(json_decode($responseBody,true)['Response']['Data'],$result);
244244
}
245245

246-
publicfunctiontestUpdateWikiTitle()
246+
publicfunctiontestupdateTitle()
247247
{
248248
$responseBody =file_get_contents($this->dataDir .'coding/ModifyWikiTitleResponse.json');
249249
$codingToken =$this->faker->md5;
@@ -273,7 +273,7 @@ public function testUpdateWikiTitle()
273273
)
274274
->willReturn(newResponse(200, [],$responseBody));
275275
$coding =newWiki($clientMock);
276-
$result =$coding->updateWikiTitle($codingToken,$codingProjectUri,$id,$title);
276+
$result =$coding->updateTitle($codingToken,$codingProjectUri,$id,$title);
277277
$this->assertTrue($result);
278278
}
279279
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp