Skip to content

Commit ac1349a

Browse files
authored
Merge pull request #41 from hejieehe/bug_40
bug: 修复创建TGIT 创建MR失败 #40
2 parents 7ef449e + 9a95625 commit ac1349a

File tree

10 files changed

+164
-11
lines changed

10 files changed

+164
-11
lines changed

buildSrc/src/main/kotlin/Versions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
object Release {
22
const val Group = "com.tencent.bk.devops.scm"
3-
const val Version = "1.1.3"
3+
const val Version = "1.1.4"
44
}
55

66
object Versions {

devops-scm-provider/devops-scm-provider-git/devops-scm-provider-tgit/src/main/kotlin/com/tencent/devops/scm/provider/git/tgit/TGitObjectConverter.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,12 @@ object TGitObjectConverter {
197197
): PullRequest {
198198
val base = Reference(
199199
name = from.targetBranch,
200-
sha = from.targetCommit
200+
sha = from.targetCommit ?: ""
201201
)
202202

203203
val head = Reference(
204204
name = from.sourceBranch,
205-
sha = from.sourceCommit
205+
sha = from.sourceCommit ?: ""
206206
)
207207

208208
val targetRepositoryUrl = GitRepositoryUrl(targetProject.httpsUrlToRepo)
@@ -257,9 +257,9 @@ object TGitObjectConverter {
257257
closed = from.state != "opened",
258258
merged = from.state == "merged",
259259
author = convertUser(from.author),
260-
created = DateUtils.convertDateToLocalDateTime(from.createdAt),
261-
updated = DateUtils.convertDateToLocalDateTime(from.updatedAt),
262-
milestone = convertMilestone(from.milestone),
260+
created = from.createdAt?.let { DateUtils.convertDateToLocalDateTime(it) },
261+
updated = from.updatedAt?.let { DateUtils.convertDateToLocalDateTime(it) },
262+
milestone = from.milestone?.let { convertMilestone(it) },
263263
baseCommit = from.baseCommit,
264264
labels = from.labels,
265265
assignee = assignees,

devops-scm-provider/devops-scm-provider-git/devops-scm-provider-tgit/src/main/kotlin/com/tencent/devops/scm/provider/git/tgit/TGitObjectToMapConverter.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,9 +270,11 @@ object TGitObjectToMapConverter {
270270
params[BK_REPO_GIT_MANUAL_UNLOCK] = false
271271
params[PIPELINE_GIT_BEFORE_SHA] = "----------"
272272
params[PIPELINE_GIT_BEFORE_SHA_SHORT] = "----------"
273-
params[PIPELINE_GIT_MR_ACTION] = action
274273
params[BK_REPO_GIT_WEBHOOK_NOTE_CREATED_AT] = simpleDateFormat.format(createdAt)
275274
params[BK_REPO_GIT_WEBHOOK_NOTE_UPDATED_AT] = simpleDateFormat.format(updatedAt)
275+
src.mergeRequest?.let {
276+
params[PIPELINE_GIT_MR_ACTION] = it.action ?: ""
277+
}
276278
return params
277279
}
278280
}

devops-scm-provider/devops-scm-provider-git/devops-scm-provider-tgit/src/main/kotlin/com/tencent/devops/scm/provider/git/tgit/TGitWebhookEnricher.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class TGitWebhookEnricher(private val apiFactory: TGitApiFactory) : WebhookEnric
8484
)
8585

8686
mergeRequest?.let {
87-
pullRequestHook.changes = it.files.map(TGitObjectConverter::convertChange)
87+
pullRequestHook.changes = it.files?.map(TGitObjectConverter::convertChange) ?: listOf()
8888
}
8989
// 根据完整的MR/Review信息填充变量
9090
pullRequestHook.extras.putAll(
@@ -317,7 +317,7 @@ class TGitWebhookEnricher(private val apiFactory: TGitApiFactory) : WebhookEnric
317317
tagName
318318
)
319319
tag?.let {
320-
extra[PIPELINE_GIT_TAG_DESC] = it.description
320+
extra[PIPELINE_GIT_TAG_DESC] = it.description ?: ""
321321
}
322322
}
323323
return extra

devops-scm-provider/devops-scm-provider-git/devops-scm-provider-tgit/src/main/kotlin/com/tencent/devops/scm/provider/git/tgit/TGitWebhookParser.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ class TGitWebhookParser : WebhookParser {
476476
}
477477
params[PIPELINE_GIT_BEFORE_SHA] = src.before
478478
params[PIPELINE_GIT_BEFORE_SHA_SHORT] = GitUtils.getShortSha(src.before)
479-
params[PIPELINE_GIT_TAG_MESSAGE] = src.message
479+
params[PIPELINE_GIT_TAG_MESSAGE] = src.message ?: ""
480480
src.commits.firstOrNull()?.let { lastCommit ->
481481
params[PIPELINE_GIT_COMMIT_AUTHOR] = lastCommit.author.name
482482
params[PIPELINE_GIT_COMMIT_MESSAGE] = lastCommit.message
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.tencent.devops.scm.provider.git.tgit
2+
3+
import com.tencent.devops.scm.api.pojo.PullRequestInput
4+
import com.tencent.devops.scm.sdk.tgit.TGitApi
5+
import com.tencent.devops.scm.sdk.tgit.TGitMergeRequestApi
6+
import com.tencent.devops.scm.sdk.tgit.TGitProjectApi
7+
import com.tencent.devops.scm.sdk.tgit.pojo.TGitMergeRequest
8+
import com.tencent.devops.scm.sdk.tgit.pojo.TGitMergeRequestParams
9+
import com.tencent.devops.scm.sdk.tgit.pojo.TGitProject
10+
import org.junit.jupiter.api.Assertions
11+
import org.junit.jupiter.api.Test
12+
import org.mockito.Mockito.any
13+
import org.mockito.Mockito.anyString
14+
import org.mockito.Mockito.mock
15+
import org.mockito.Mockito.`when`
16+
17+
class TGitPullRequestServiceTest : AbstractTGitServiceTest() {
18+
19+
private lateinit var pullRequestService: TGitPullRequestService
20+
21+
init {
22+
`when`(tGitApi.mergeRequestApi).thenReturn(mock(TGitMergeRequestApi::class.java))
23+
`when`(tGitApi.projectApi).thenReturn(mock(TGitProjectApi::class.java))
24+
val projectApi = tGitApi.projectApi
25+
val mergeRequestApi = tGitApi.mergeRequestApi
26+
`when`(mergeRequestApi.createMergeRequest(anyString(), any(TGitMergeRequestParams::class.java)))
27+
.thenReturn(read("create_merge_request.json", TGitMergeRequest::class.java))
28+
`when`(projectApi.getProject(any()))
29+
.thenReturn(read("get_project.json", TGitProject::class.java))
30+
pullRequestService = TGitPullRequestService(apiFactory)
31+
}
32+
33+
@Test
34+
fun createMergeRequest() {
35+
val requestInput = PullRequestInput(
36+
title = "devops触发调试",
37+
body = null,
38+
sourceBranch = "feat_101",
39+
targetBranch = "master"
40+
)
41+
val create = pullRequestService.create(
42+
providerRepository,
43+
requestInput
44+
)
45+
Assertions.assertEquals(requestInput.title, create.title)
46+
Assertions.assertEquals(requestInput.sourceBranch, create.sourceRef.name)
47+
Assertions.assertEquals(requestInput.targetBranch, create.targetRef.name)
48+
}
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"labels": [],
3+
"id": 21078734,
4+
"title": "devops触发调试",
5+
"target_project_id": 1079856,
6+
"target_branch": "master",
7+
"source_project_id": 1079856,
8+
"source_branch": "feat_101",
9+
"state": "opened",
10+
"merge_status": "can_be_merged",
11+
"commit_check_state": "success",
12+
"commit_check_block": false,
13+
"iid": 7,
14+
"description": "description",
15+
"created_at": "2025-08-19T07:32:52+0000",
16+
"updated_at": "2025-08-19T07:32:53+0000",
17+
"resolved_at": null,
18+
"merge_type": null,
19+
"assignee": null,
20+
"author": {
21+
"id": 429330,
22+
"username": "devops_repo_debugger",
23+
"web_url": "http://git.code.tencent.com/u/devops_repo_debugger",
24+
"name": "devops_repo_debugger",
25+
"state": "active",
26+
"avatar_url": "http://git.code.tencent.com/uploads/user/avatar/429330/thumb_0-0-43-43_570c4d944759468e8f16a523f7aa81e5.png"
27+
},
28+
"merge_commit_sha": null,
29+
"milestone": null,
30+
"necessary_reviewers": [],
31+
"suggestion_reviewers": [],
32+
"revert_commit_id": null,
33+
"project_id": 1079856,
34+
"work_in_progress": false,
35+
"upvotes": 0,
36+
"downvotes": 0
37+
}

devops-scm-sdk/devops-scm-sdk-tgit/src/main/java/com/tencent/devops/scm/sdk/tgit/auth/TGitUserPassAuthProvider.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.tencent.devops.scm.sdk.tgit.TGitApi;
66
import com.tencent.devops.scm.sdk.tgit.TGitConstants;
77
import com.tencent.devops.scm.sdk.tgit.pojo.TGitSession;
8+
import java.util.Optional;
89

910
/**
1011
* 通过用户名密码授权
@@ -29,6 +30,8 @@ public void bind(TGitApi tGitApi) {
2930
public void authorization(ScmRequest.Builder<?> builder) {
3031
TGitSessionApi sessionApi = new TGitSessionApi(tGitApi);
3132
TGitSession session = sessionApi.getSession(username, password);
32-
builder.setHeader(TGitConstants.PRIVATE_TOKEN_HEADER, session.getPrivateToken());
33+
builder.setHeader(TGitConstants.PRIVATE_TOKEN_HEADER, Optional.ofNullable(session)
34+
.map(TGitSession::getPrivateToken)
35+
.orElse(""));
3336
}
3437
}

devops-scm-sdk/devops-scm-sdk-tgit/src/test/java/com/tencent/devops/scm/sdk/tgit/TGitMergeRequestApiTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.tencent.devops.scm.sdk.tgit;
22

3+
import static org.mockito.ArgumentMatchers.any;
4+
import static org.mockito.ArgumentMatchers.anyString;
35
import static org.mockito.Mockito.when;
46

57
import com.fasterxml.jackson.core.type.TypeReference;
@@ -8,6 +10,7 @@
810
import com.tencent.devops.scm.sdk.tgit.pojo.TGitDiff;
911
import com.tencent.devops.scm.sdk.tgit.pojo.TGitMergeRequest;
1012
import com.tencent.devops.scm.sdk.tgit.pojo.TGitMergeRequestFilter;
13+
import com.tencent.devops.scm.sdk.tgit.pojo.TGitMergeRequestParams;
1114
import com.tencent.devops.scm.sdk.tgit.pojo.TGitMilestone;
1215
import java.util.List;
1316
import org.junit.jupiter.api.Assertions;
@@ -47,6 +50,10 @@ public static void testSetup() {
4750
.thenReturn(
4851
read("list_merge_request_opened.json", new TypeReference<List<TGitMergeRequest>>() {
4952
}));
53+
when(mergeRequestApi.createMergeRequest(anyString(), any()))
54+
.thenReturn(
55+
read("create_merge_request.json", new TypeReference<TGitMergeRequest>() {
56+
}));
5057
}
5158

5259
@Test
@@ -101,6 +108,24 @@ public void testGetMergeRequestChanges() {
101108
Assertions.assertEquals(1, diff1.getDeletions());
102109
}
103110

111+
@Test
112+
public void createMergeRequest() {
113+
TGitMergeRequestParams requestParams = TGitMergeRequestParams.builder()
114+
.sourceBranch("feat_101")
115+
.targetBranch("master")
116+
.title("devops触发调试")
117+
.description("description")
118+
.build();
119+
TGitMergeRequest mergeRequest = mergeRequestApi.createMergeRequest(
120+
TEST_PROJECT_NAME,
121+
requestParams
122+
);
123+
Assertions.assertEquals(requestParams.getTitle(), mergeRequest.getTitle());
124+
Assertions.assertEquals(requestParams.getSourceBranch(), mergeRequest.getSourceBranch());
125+
Assertions.assertEquals(requestParams.getTargetBranch(), mergeRequest.getTargetBranch());
126+
Assertions.assertEquals(requestParams.getDescription(), mergeRequest.getDescription());
127+
}
128+
104129
private static void assertMergeRequest(TGitMergeRequest mergeRequest) {
105130
Assertions.assertEquals(290966, mergeRequest.getId());
106131
Assertions.assertEquals(9, mergeRequest.getIid());
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"labels": [],
3+
"id": 21078734,
4+
"title": "devops触发调试",
5+
"target_project_id": 1079856,
6+
"target_branch": "master",
7+
"source_project_id": 1079856,
8+
"source_branch": "feat_101",
9+
"state": "opened",
10+
"merge_status": "can_be_merged",
11+
"commit_check_state": "success",
12+
"commit_check_block": false,
13+
"iid": 7,
14+
"description": "description",
15+
"created_at": "2025-08-19T07:32:52+0000",
16+
"updated_at": "2025-08-19T07:32:53+0000",
17+
"resolved_at": null,
18+
"merge_type": null,
19+
"assignee": null,
20+
"author": {
21+
"id": 429330,
22+
"username": "devops_repo_debugger",
23+
"web_url": "http://git.code.tencent.com/u/devops_repo_debugger",
24+
"name": "devops_repo_debugger",
25+
"state": "active",
26+
"avatar_url": "http://git.code.tencent.com/uploads/user/avatar/429330/thumb_0-0-43-43_570c4d944759468e8f16a523f7aa81e5.png"
27+
},
28+
"merge_commit_sha": null,
29+
"milestone": null,
30+
"necessary_reviewers": [],
31+
"suggestion_reviewers": [],
32+
"revert_commit_id": null,
33+
"project_id": 1079856,
34+
"work_in_progress": false,
35+
"upvotes": 0,
36+
"downvotes": 0
37+
}

0 commit comments

Comments
 (0)