Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion src/main/java/org/gitlab4j/api/CommitsApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.gitlab4j.api.models.Comment;
import org.gitlab4j.api.models.Commit;
import org.gitlab4j.api.models.CommitAction;
import org.gitlab4j.api.models.CommitAction.Action;
import org.gitlab4j.api.models.CommitPayload;
import org.gitlab4j.api.models.CommitRef;
import org.gitlab4j.api.models.CommitRef.RefType;
Expand All @@ -23,6 +24,7 @@

/**
* This class implements the client side API for the GitLab commits calls.
* See <a href="https://docs.gitlab.com/ce/api/commits.html">Commits API at GitLab</a> for more information.
*/
public class CommitsApi extends AbstractApi {

Expand Down Expand Up @@ -566,6 +568,23 @@ public Comment addComment(Object projectIdOrPath, String sha, String note) throw
public Commit createCommit(Object projectIdOrPath, String branch, String commitMessage, String startBranch,
String authorEmail, String authorName, List<CommitAction> actions) throws GitLabApiException {

// Validate the actions
if (actions == null || actions.isEmpty()) {
throw new GitLabApiException("actions cannot be null or empty.");
}

for (CommitAction action : actions) {

// File content is required for create and update
Action actionType = action.getAction();
if (actionType == Action.CREATE || actionType == Action.UPDATE) {
String content = action.getContent();
if (content == null) {
throw new GitLabApiException("Content cannot be null for create or update actions.");
}
}
}

CommitPayload payload = new CommitPayload();
payload.setBranch(branch);
payload.setCommitMessage(commitMessage);
Expand All @@ -574,7 +593,8 @@ public Commit createCommit(Object projectIdOrPath, String branch, String commitM
payload.setAuthorName(authorName);
payload.setActions(actions);

Response response = post(Response.Status.CREATED, payload, "projects", getProjectIdOrPath(projectIdOrPath), "repository", "commits");
Response response = post(Response.Status.CREATED, payload,
"projects", getProjectIdOrPath(projectIdOrPath), "repository", "commits");
return (response.readEntity(Commit.class));
}
}
22 changes: 22 additions & 0 deletions src/main/java/org/gitlab4j/api/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,28 @@ public enum TokenType {
ACCESS, OAUTH2_ACCESS, PRIVATE;
}

/** Enum to specify encoding of file contents. */
public enum Encoding {
TEXT, BASE64;

private static JacksonJsonEnumHelper<Encoding> enumHelper = new JacksonJsonEnumHelper<>(Encoding.class);

@JsonCreator
public static Encoding forValue(String value) {
return enumHelper.forValue((value != null ? value.toLowerCase() : value));
}

@JsonValue
public String toValue() {
return (enumHelper.toString(this));
}

@Override
public String toString() {
return (enumHelper.toString(this));
}
}

/** Enum to use for ordering the results of various API calls. */
public enum SortOrder {

Expand Down
6 changes: 5 additions & 1 deletion src/main/java/org/gitlab4j/api/RepositoryFileApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

/**
* This class provides an entry point to all the GitLab API repository files calls.
* See <a href="https://docs.gitlab.com/ce/api/repository_files.html">Repository Files API at GitLab</a> for more information.
*/
public class RepositoryFileApi extends AbstractApi {

Expand Down Expand Up @@ -67,7 +68,10 @@ public RepositoryFile getFileInfo(Object projectIdOrPath, String filePath, Strin
RepositoryFile file = new RepositoryFile();
file.setBlobId(response.getHeaderString("X-Gitlab-Blob-Id"));
file.setCommitId(response.getHeaderString("X-Gitlab-Commit-Id"));
file.setEncoding(response.getHeaderString("X-Gitlab-Encoding"));

String encoding = response.getHeaderString("X-Gitlab-Encoding");
file.setEncoding(Constants.Encoding.forValue(encoding));

file.setFileName(response.getHeaderString("X-Gitlab-File-Name"));
file.setFilePath(response.getHeaderString("X-Gitlab-File-Path"));
file.setLastCommitId(response.getHeaderString("X-Gitlab-Last-Commit-Id"));
Expand Down
47 changes: 25 additions & 22 deletions src/main/java/org/gitlab4j/api/models/CommitAction.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
package org.gitlab4j.api.models;

import java.io.File;
import java.io.IOException;

import org.gitlab4j.api.Constants.Encoding;
import org.gitlab4j.api.GitLabApiException;
import org.gitlab4j.api.utils.FileUtils;
import org.gitlab4j.api.utils.JacksonJson;
import org.gitlab4j.api.utils.JacksonJsonEnumHelper;

Expand Down Expand Up @@ -30,28 +36,6 @@ public String toString() {
}
}

public enum Encoding {

BASE64, TEXT;

private static JacksonJsonEnumHelper<Encoding> enumHelper = new JacksonJsonEnumHelper<>(Encoding.class);

@JsonCreator
public static Encoding forValue(String value) {
return enumHelper.forValue(value);
}

@JsonValue
public String toValue() {
return (enumHelper.toString(this));
}

@Override
public String toString() {
return (enumHelper.toString(this));
}
}

private Action action;
private String filePath;
private String previousPath;
Expand Down Expand Up @@ -151,6 +135,25 @@ public CommitAction withExecuteFilemode(Boolean executeFilemode) {
return this;
}

public CommitAction withFileContent(String filePath, Encoding encoding) throws GitLabApiException {
File file = new File(filePath);
return (withFileContent(file, filePath, encoding));
}

public CommitAction withFileContent(File file, String filePath, Encoding encoding) throws GitLabApiException {

this.encoding = (encoding != null ? encoding : Encoding.TEXT);
this.filePath = filePath;

try {
content = FileUtils.getFileContentAsString(file, this.encoding);
} catch (IOException e) {
throw new GitLabApiException(e);
}

return (this);
}

@Override
public String toString() {
return (JacksonJson.toJsonString(this));
Expand Down
13 changes: 7 additions & 6 deletions src/main/java/org/gitlab4j/api/models/RepositoryFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import java.util.Base64;

import org.gitlab4j.api.Constants.Encoding;
import org.gitlab4j.api.utils.JacksonJson;

import com.fasterxml.jackson.annotation.JsonIgnore;
Expand All @@ -12,7 +13,7 @@ public class RepositoryFile {
private String fileName; // file name only, Ex. class.rb
private String filePath; // full path to file. Ex. lib/class.rb
private Integer size;
private String encoding;
private Encoding encoding;
private String content;
private String ref;
private String blobId;
Expand Down Expand Up @@ -43,11 +44,11 @@ public void setSize(Integer size) {
this.size = size;
}

public String getEncoding() {
public Encoding getEncoding() {
return encoding;
}

public void setEncoding(String encoding) {
public void setEncoding(Encoding encoding) {
this.encoding = encoding;
}

Expand Down Expand Up @@ -104,7 +105,7 @@ public String getDecodedContentAsString() {
return (null);
}

if ("base64".equalsIgnoreCase(encoding)) {
if (Encoding.BASE64.equals(encoding)) {
return (new String(Base64.getDecoder().decode(content)));
}

Expand All @@ -124,7 +125,7 @@ public byte[] getDecodedContentAsBytes() {
return (null);
}

if ("base64".equalsIgnoreCase(encoding)) {
if (encoding == Encoding.BASE64) {
return (Base64.getDecoder().decode(content));
}

Expand Down Expand Up @@ -157,7 +158,7 @@ public void encodeAndSetContent(byte[] byteContent) {
}

this.content = Base64.getEncoder().encodeToString(byteContent);
encoding = "base64";
encoding = Encoding.BASE64;
}

@Override
Expand Down
30 changes: 29 additions & 1 deletion src/main/java/org/gitlab4j/api/utils/FileUtils.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package org.gitlab4j.api.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Reader;
import java.nio.file.Files;
import java.util.Base64;
import java.util.Scanner;

import javax.ws.rs.core.Response;

import org.gitlab4j.api.Constants.Encoding;

/**
* This class provides static utility methods used throughout GitLab4J.
*/
Expand Down Expand Up @@ -79,7 +84,7 @@ public static String readFileContents(File file) throws IOException {

/**
* Reads the content of a Reader instance and returns it as a String.
*
*
* @param reader the Reader instance to read the content from
* @return the content of a Reader instance as a String
* @throws IOException if any error occurs
Expand All @@ -95,4 +100,27 @@ public static String getReaderContentAsString(Reader reader) throws IOException

return (out.toString());
}

/**
* Reads the content of a File instance and returns it as a String of either text or base64 encoded text.
*
* @param file the File instance to read from
* @param encoding whether to encode as Base64 or as Text, defaults to Text if null
* @return the content of the File as a String
* @throws IOException if any error occurs
*/
public static String getFileContentAsString(File file, Encoding encoding) throws IOException {

if (encoding == Encoding.BASE64) {

try (FileInputStream stream = new FileInputStream(file)) {
byte data[] = new byte[(int) file.length()];
stream.read(data);
return (Base64.getEncoder().encodeToString(data));
}

} else {
return(new String (Files.readAllBytes(file.toPath())));
}
}
}
Loading