This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 4de4d591b0 NIFI-14886 GitLab Registry Client - switch from Repository
File API to Commit API (#10230)
4de4d591b0 is described below
commit 4de4d591b08a2852394c8a63f0b3d4d447a0dbb4
Author: Pierre Villard <[email protected]>
AuthorDate: Mon Sep 1 17:37:11 2025 +0200
NIFI-14886 GitLab Registry Client - switch from Repository File API to
Commit API (#10230)
Signed-off-by: David Handermann <[email protected]>
---
.../apache/nifi/gitlab/GitLabRepositoryClient.java | 42 +++++++++++++++-------
1 file changed, 29 insertions(+), 13 deletions(-)
diff --git
a/nifi-extension-bundles/nifi-gitlab-bundle/nifi-gitlab-extensions/src/main/java/org/apache/nifi/gitlab/GitLabRepositoryClient.java
b/nifi-extension-bundles/nifi-gitlab-bundle/nifi-gitlab-extensions/src/main/java/org/apache/nifi/gitlab/GitLabRepositoryClient.java
index b9903257e8..e397fbced0 100644
---
a/nifi-extension-bundles/nifi-gitlab-bundle/nifi-gitlab-extensions/src/main/java/org/apache/nifi/gitlab/GitLabRepositoryClient.java
+++
b/nifi-extension-bundles/nifi-gitlab-bundle/nifi-gitlab-extensions/src/main/java/org/apache/nifi/gitlab/GitLabRepositoryClient.java
@@ -34,12 +34,14 @@ import org.gitlab4j.api.RepositoryApi;
import org.gitlab4j.api.models.AccessLevel;
import org.gitlab4j.api.models.Branch;
import org.gitlab4j.api.models.Commit;
+import org.gitlab4j.api.models.CommitAction;
import org.gitlab4j.api.models.Permissions;
import org.gitlab4j.api.models.Project;
import org.gitlab4j.api.models.ProjectAccess;
import org.gitlab4j.api.models.RepositoryFile;
import org.gitlab4j.api.models.TreeItem;
import org.gitlab4j.models.Constants;
+import org.gitlab4j.models.Constants.Encoding;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,6 +52,7 @@ import java.net.URI;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
+import java.util.Base64;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
@@ -226,19 +229,32 @@ public class GitLabRepositoryClient implements
GitRepositoryClient {
return execute(() -> {
final Optional<RepositoryFile> existingFileInfo =
gitLab.getRepositoryFileApi().getOptionalFileInfo(projectPath, resolvedPath,
branch);
- if (existingFileInfo.isPresent()) {
- LOGGER.debug("Updating existing file [{}]", resolvedPath);
- final RepositoryFile existingFile = existingFileInfo.get();
- existingFile.encodeAndSetContent(request.getContent());
- gitLab.getRepositoryFileApi().updateFile(projectPath,
existingFile, branch, request.getMessage());
- } else {
- LOGGER.debug("Creating new file [{}]", resolvedPath);
- final RepositoryFile newFile = new RepositoryFile();
- newFile.setFilePath(resolvedPath);
- newFile.encodeAndSetContent(request.getContent());
- gitLab.getRepositoryFileApi().createFile(projectPath, newFile,
branch, request.getMessage());
- }
- return gitLab.getRepositoryFileApi().getFileInfo(projectPath,
resolvedPath, branch).getCommitId();
+
+ // Create commit action
+ final CommitAction commitAction = new CommitAction();
+ commitAction.setAction(existingFileInfo.isPresent() ?
CommitAction.Action.UPDATE : CommitAction.Action.CREATE);
+ commitAction.setFilePath(resolvedPath);
+ commitAction.setEncoding(Encoding.BASE64);
+
+ // Encode content to Base64
+ final String encodedContent =
Base64.getEncoder().encodeToString(request.getContent().getBytes(StandardCharsets.UTF_8));
+ commitAction.setContent(encodedContent);
+
+ // Create the commit
+ final Commit commit = gitLab.getCommitsApi()
+ .createCommit(
+ projectPath,
+ branch,
+ request.getMessage(),
+ null, // start_branch - null means use the branch
parameter
+ null, // author_email - null means use the
authenticated user
+ null, // author_name - null means use the
authenticated user
+ List.of(commitAction));
+
+ final String commitId = commit.getId();
+ LOGGER.debug("Successfully committed file [{}] with commit ID:
{}", resolvedPath, commit.getId());
+
+ return commitId;
});
}