From df7e1ec8dbd2accbf98f324ba1159ced38adbd2a Mon Sep 17 00:00:00 2001 From: Greg Messner <greg@messners.com> Date: Wed, 28 Nov 2018 14:19:03 -0800 Subject: [PATCH] Added support for transfer project (#276). --- example-test-gitlab4j.properties | 3 ++ .../java/org/gitlab4j/api/ProjectApi.java | 16 +++++++++++ .../java/org/gitlab4j/api/TestProjectApi.java | 28 +++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/example-test-gitlab4j.properties b/example-test-gitlab4j.properties index 4c1586b6..b25c2f56 100644 --- a/example-test-gitlab4j.properties +++ b/example-test-gitlab4j.properties @@ -20,6 +20,9 @@ TEST_GROUP= TEST_GROUP_PROJECT= TEST_GROUP_MEMBER_USERNAME= +# OPTIONAL: Used to test transfer project +TEST_XFER_NAMESPACE= + # OPTIONAL: To test oauth2Login, set these properties TEST_LOGIN_USERNAME= TEST_LOGIN_PASSWORD= diff --git a/src/main/java/org/gitlab4j/api/ProjectApi.java b/src/main/java/org/gitlab4j/api/ProjectApi.java index 3cfea245..41bedd2a 100644 --- a/src/main/java/org/gitlab4j/api/ProjectApi.java +++ b/src/main/java/org/gitlab4j/api/ProjectApi.java @@ -2165,4 +2165,20 @@ public class ProjectApi extends AbstractApi implements Constants { Response response = get(Response.Status.OK, null, "projects", getProjectIdOrPath(projectIdOrPath), "languages"); return (response.readEntity(new GenericType<Map<String, Float>>() {})); } + + /** + * Transfer a project to a new namespace. This was added in GitLab 11.1 + * + * PUT /projects/:id/transfer. + * + * @param projectIdOrPath projectIdOrPath the project in the form of an Integer(ID), String(path), or Project instance, required + * @param namespace the namespace to transfer the project to + * @return the updated Project + * @throws GitLabApiException if any exception occurs + */ + public Project transferProject(Object projectIdOrPath, String namespace) throws GitLabApiException { + GitLabApiForm formData = new GitLabApiForm().withParam("namespace", namespace, true); + Response response = put(Response.Status.OK, formData.asMap(), "projects", getProjectIdOrPath(projectIdOrPath), "transfer"); + return (response.readEntity(Project.class)); + } } \ No newline at end of file diff --git a/src/test/java/org/gitlab4j/api/TestProjectApi.java b/src/test/java/org/gitlab4j/api/TestProjectApi.java index 21e7502d..367134ad 100644 --- a/src/test/java/org/gitlab4j/api/TestProjectApi.java +++ b/src/test/java/org/gitlab4j/api/TestProjectApi.java @@ -71,6 +71,7 @@ public class TestProjectApi { private static final String TEST_PRIVATE_TOKEN; private static final String TEST_GROUP; private static final String TEST_GROUP_PROJECT; + private static final String TEST_XFER_NAMESPACE; static { TEST_NAMESPACE = TestUtils.getProperty("TEST_NAMESPACE"); @@ -79,11 +80,13 @@ public class TestProjectApi { TEST_PRIVATE_TOKEN = TestUtils.getProperty("TEST_PRIVATE_TOKEN"); TEST_GROUP = TestUtils.getProperty("TEST_GROUP"); TEST_GROUP_PROJECT = TestUtils.getProperty("TEST_GROUP_PROJECT"); + TEST_XFER_NAMESPACE = TestUtils.getProperty("TEST_XFER_NAMESPACE"); } private static final String TEST_PROJECT_NAME_1 = "test-gitlab4j-create-project"; private static final String TEST_PROJECT_NAME_2 = "test-gitlab4j-create-project-2"; private static final String TEST_PROJECT_NAME_UPDATE = "test-gitlab4j-create-project-update"; + private static final String TEST_XFER_PROJECT_NAME = "test-gitlab4j-xfer-project"; private static GitLabApi gitLabApi; public TestProjectApi() { @@ -153,6 +156,14 @@ public class TestProjectApi { } catch (GitLabApiException ignore) { } } + + if (TEST_XFER_NAMESPACE != null) { + try { + Project project = gitLabApi.getProjectApi().getProject(TEST_XFER_NAMESPACE, TEST_XFER_PROJECT_NAME); + gitLabApi.getProjectApi().deleteProject(project); + } catch (GitLabApiException ignore) { + } + } } } @@ -556,4 +567,21 @@ public class TestProjectApi { assertNotNull(unstarredProject); assertEquals(0, (int)unstarredProject.getStarCount()); } + + @Test + public void testTransferProject() throws GitLabApiException { + + assumeTrue(TEST_XFER_NAMESPACE != null && TEST_XFER_NAMESPACE.trim().length() > 0); + + Project project = new Project() + .withName(TEST_XFER_PROJECT_NAME) + .withDescription("GitLab4J test project - transfer.") + .withVisibility(Visibility.PUBLIC); + + Project newProject = gitLabApi.getProjectApi().createProject(project); + assertNotNull(newProject); + + Project transferedProject = gitLabApi.getProjectApi().transferProject(newProject, TEST_XFER_NAMESPACE); + assertNotNull(transferedProject); + } } -- GitLab