summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Kratzert <sebastian.kratzert@iav.de>2019-09-04 13:07:35 +0200
committerMax Wittig <max.wittig@siemens.com>2019-10-06 18:10:40 +0200
commit4d1e3774706f336e87ebe70e1b373ddb37f34b45 (patch)
treedae80ead71c38f5316dd4864c69f94a68770c81d
parentfcea41c61f7776cf57ed5001facbc1e77d2834c4 (diff)
downloadgitlab-4d1e3774706f336e87ebe70e1b373ddb37f34b45.tar.gz
feat(project): implement update_submodule
-rw-r--r--gitlab/tests/test_gitlab.py50
-rw-r--r--gitlab/v4/objects.py23
2 files changed, 73 insertions, 0 deletions
diff --git a/gitlab/tests/test_gitlab.py b/gitlab/tests/test_gitlab.py
index ed5556d..b938cef 100644
--- a/gitlab/tests/test_gitlab.py
+++ b/gitlab/tests/test_gitlab.py
@@ -717,6 +717,56 @@ class TestGitlab(unittest.TestCase):
with HTTMock(resp_mark_all_as_done):
self.gl.todos.mark_all_as_done()
+ def test_update_submodule(self):
+ @urlmatch(
+ scheme="http", netloc="localhost", path="/api/v4/projects/1$", method="get"
+ )
+ def resp_get_project(url, request):
+ headers = {"content-type": "application/json"}
+ content = '{"name": "name", "id": 1}'.encode("utf-8")
+ return response(200, content, headers, None, 5, request)
+
+ @urlmatch(
+ scheme="http",
+ netloc="localhost",
+ path="/api/v4/projects/$1/repository/submodules/foo%2Fbar",
+ method="post",
+ )
+ def resp_update_submodule(url, request):
+ headers = {"content-type": "application/json"}
+ content = """{
+ "id": "ed899a2f4b50b4370feeea94676502b42383c746",
+ "short_id": "ed899a2f4b5",
+ "title": "Message",
+ "author_name": "Author",
+ "author_email": "author@example.com",
+ "committer_name": "Author",
+ "committer_email": "author@example.com",
+ "created_at": "2018-09-20T09:26:24.000-07:00",
+ "message": "Message",
+ "parent_ids": [ "ae1d9fb46aa2b07ee9836d49862ec4e2c46fbbba" ],
+ "committed_date": "2018-09-20T09:26:24.000-07:00",
+ "authored_date": "2018-09-20T09:26:24.000-07:00",
+ "status": null}"""
+ content = content.encode("utf-8")
+ return response(200, content, headers, None, 5, request)
+
+ with HTTMock(resp_update_submodule):
+ project = self.gl.projects.get(1)
+ self.assertIsInstance(project, Project)
+ self.assertEqual(project.name, "name")
+ self.assertEqual(project.id, 1)
+
+ ret = project.update_submodule(
+ submodule="foo/bar",
+ branch="master",
+ commit_sha="4c3674f66071e30b3311dac9b9ccc90502a72664",
+ commit_message="Message",
+ )
+ self.assertIsInstance(ret, dict)
+ self.assertEqual(ret["message"], "Message")
+ self.assertEqual(ret["id"], "ed899a2f4b50b4370feeea94676502b42383c746")
+
def _default_config(self):
fd, temp_path = tempfile.mkstemp()
os.write(fd, valid_config)
diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py
index 15aecf5..cdd847f 100644
--- a/gitlab/v4/objects.py
+++ b/gitlab/v4/objects.py
@@ -3885,6 +3885,29 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject):
("wikis", "ProjectWikiManager"),
)
+ @cli.register_custom_action("Project", ("submodule", "branch", "commit_sha"))
+ @exc.on_http_error(exc.GitlabUpdateError)
+ def update_submodule(self, submodule, branch, commit_sha, **kwargs):
+ """Transfer a project to the given namespace ID
+
+ Args:
+ submodule (str): Full path to the submodule
+ branch (str): Name of the branch to commit into
+ commit_sha (str): Full commit SHA to update the submodule to
+ commit_message (str): Commit message. If no message is provided, a default one will be set (optional)
+
+ Raises:
+ GitlabAuthenticationError: If authentication is not correct
+ GitlabPutError: If the submodule could not be updated
+ """
+
+ submodule = submodule.replace("/", "%2F") # .replace('.', '%2E')
+ path = "/projects/%s/repository/submodules/%s" % (self.get_id(), submodule)
+ data = {"branch": branch, "commit_sha": commit_sha}
+ if "commit_message" in kwargs:
+ data["commit_message"] = kwargs["commit_message"]
+ return self.manager.gitlab.http_put(path, post_data=data)
+
@cli.register_custom_action("Project", tuple(), ("path", "ref", "recursive"))
@exc.on_http_error(exc.GitlabGetError)
def repository_tree(self, path="", ref="", recursive=False, **kwargs):