From 48524627ee8cb0c90c6bc17a9641bcbb5364313e Mon Sep 17 00:00:00 2001 From: Armin Weihbold Date: Sat, 10 Sep 2016 06:39:31 +0200 Subject: [PATCH 01/20] Add the ability to fork to a specific namespace --- gitlab/objects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitlab/objects.py b/gitlab/objects.py index 5a23dbf83..4107d6bf3 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -1169,7 +1169,7 @@ class ProjectFork(GitlabObject): canList = False canGet = False requiredUrlAttrs = ['project_id'] - + optionalCreateAttrs = ['namespace'] class ProjectForkManager(BaseManager): obj_cls = ProjectFork From a692d59a1bb2a3438c115ada768471fc7a3f9e4b Mon Sep 17 00:00:00 2001 From: Armin Weihbold Date: Sat, 10 Sep 2016 06:58:19 +0200 Subject: [PATCH 02/20] fix pep8 --- gitlab/objects.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gitlab/objects.py b/gitlab/objects.py index 4107d6bf3..be0dbef3b 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -1171,6 +1171,7 @@ class ProjectFork(GitlabObject): requiredUrlAttrs = ['project_id'] optionalCreateAttrs = ['namespace'] + class ProjectForkManager(BaseManager): obj_cls = ProjectFork From 648dc86dcc0fdb81dcbfa8f02c6011895ced7fc5 Mon Sep 17 00:00:00 2001 From: Armin Weihbold Date: Sat, 10 Sep 2016 07:07:29 +0200 Subject: [PATCH 03/20] add doc --- docs/gl_objects/projects.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/gl_objects/projects.py b/docs/gl_objects/projects.py index 269574720..1bc4fac14 100644 --- a/docs/gl_objects/projects.py +++ b/docs/gl_objects/projects.py @@ -51,6 +51,9 @@ fork = gl.project_forks.create({}, project_id=1) # or fork = project.forks.create({}) + +# fork to a specific namespace +fork gl.project_forks.create({'namespace': 'myteam'}, project_id=1) # end fork # forkrelation From 0c1c8944ea100220d35afbf9e5eea40d360ca454 Mon Sep 17 00:00:00 2001 From: Armin Weihbold Date: Sat, 10 Sep 2016 15:06:44 +0200 Subject: [PATCH 04/20] fix doc --- docs/gl_objects/projects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/gl_objects/projects.py b/docs/gl_objects/projects.py index 1bc4fac14..7c845d8cc 100644 --- a/docs/gl_objects/projects.py +++ b/docs/gl_objects/projects.py @@ -53,7 +53,7 @@ fork = project.forks.create({}) # fork to a specific namespace -fork gl.project_forks.create({'namespace': 'myteam'}, project_id=1) +fork = gl.project_forks.create({'namespace': 'myteam'}, project_id=1) # end fork # forkrelation From c8c43ee74fa58c1011a404c2a0f296a0042451e9 Mon Sep 17 00:00:00 2001 From: Michal Galet Date: Tue, 13 Sep 2016 09:30:56 +0200 Subject: [PATCH 05/20] JIRA service - add api_url to optional attributes The api_url attribute is mandatory at least since GitLab 8.11. Otherwise server returns gitlab.exceptions.GitlabUpdateError: 400: 400 (Bad request) "api_url" not given. Keep it as optional to maintain backward compatibility with older GitLab versions. --- gitlab/objects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitlab/objects.py b/gitlab/objects.py index be0dbef3b..bafd0e5bb 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -1788,7 +1788,7 @@ class ProjectService(GitlabObject): 'irker': (('recipients', ), ('default_irc_uri', 'server_port', 'server_host', 'colorize_messages')), 'jira': (('new_issue_url', 'project_url', 'issues_url'), - ('description', 'username', 'password')), + ('api_url', 'description', 'username', 'password')), 'pivotaltracker': (('token', ), tuple()), 'pushover': (('api_key', 'user_key', 'priority'), ('device', 'sound')), 'redmine': (('new_issue_url', 'project_url', 'issues_url'), From 02a8bf4a6fd3daceac60a869a66a014824bcad43 Mon Sep 17 00:00:00 2001 From: derek-austin Date: Tue, 13 Sep 2016 12:55:14 +0200 Subject: [PATCH 06/20] Missing coma concatenates array values 'enabled_git_access_protocolgravatar_enabled' were two distinct values in ApplicationSettings.optionalUpdateAttrs. --- gitlab/objects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitlab/objects.py b/gitlab/objects.py index bafd0e5bb..660641634 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -689,7 +689,7 @@ class ApplicationSettings(GitlabObject): 'domain_blacklist', 'domain_blacklist_enabled', 'domain_whitelist', - 'enabled_git_access_protocol' + 'enabled_git_access_protocol', 'gravatar_enabled', 'home_page_url', 'max_attachment_size', From 8a560c6ada94ec715e36b47ba722d5a128a4e154 Mon Sep 17 00:00:00 2001 From: Will Starms Date: Wed, 14 Sep 2016 19:03:29 -0500 Subject: [PATCH 07/20] Brief branch protection notes You can pass developers_can_push and developers_can_merge to the protect function. Handy! --- docs/gl_objects/branches.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/gl_objects/branches.rst b/docs/gl_objects/branches.rst index 1b61af34c..50b97a799 100644 --- a/docs/gl_objects/branches.rst +++ b/docs/gl_objects/branches.rst @@ -41,3 +41,10 @@ Protect/unprotect a repository branch: .. literalinclude:: branches.py :start-after: # protect :end-before: # end protect + +.. note:: + + By default, developers will not be able to push or merge into + protected branches. This can be changed by passing ``developers_can_push`` + or ``developers_can_merge`` like so: + ``branch.protect(developers_can_push=False, developers_can_merge=True)`` From b057a94e70f485b0e9d2a22572d87b975ae44002 Mon Sep 17 00:00:00 2001 From: derek-austin Date: Wed, 21 Sep 2016 10:59:51 +0200 Subject: [PATCH 08/20] Create a project in a group Just a sketch, feel free to toss it and do it in the right way. --- docs/gl_objects/projects.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/gl_objects/projects.rst b/docs/gl_objects/projects.rst index 37f04cf6e..afc0d3a88 100644 --- a/docs/gl_objects/projects.rst +++ b/docs/gl_objects/projects.rst @@ -46,6 +46,16 @@ Create a project for a user (admin only): :start-after: # user create :end-before: # end user create +Create a project in a group: + +You need to get the id of the group, then use the namespace_id attribute to create the group: + +.. code:: python + + group_id = gl.groups.search('my-group')[0].id + project = gl.projects.create({'name': 'myrepo', 'namespace_id': group_id}) + + Update a project: .. literalinclude:: projects.py From 94932a038bc6a862ecaaa1da87141b832b10ceda Mon Sep 17 00:00:00 2001 From: Rafael Eyng Date: Thu, 22 Sep 2016 16:44:32 -0300 Subject: [PATCH 09/20] add only_allow_merge_if_build_succeeds option to project objects --- gitlab/objects.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gitlab/objects.py b/gitlab/objects.py index 660641634..162d59171 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -1883,14 +1883,14 @@ class Project(GitlabObject): 'snippets_enabled', 'container_registry_enabled', 'public', 'visibility_level', 'namespace_id', 'description', 'path', 'import_url', - 'builds_enabled', 'public_builds'] + 'builds_enabled', 'public_builds', 'only_allow_merge_if_build_succeeds'] optionalUpdateAttrs = ['name', 'default_branch', 'issues_enabled', 'wall_enabled', 'merge_requests_enabled', 'wiki_enabled', 'snippets_enabled', 'container_registry_enabled', 'public', 'visibility_level', 'namespace_id', 'description', 'path', 'import_url', 'builds_enabled', - 'public_builds'] + 'public_builds', 'only_allow_merge_if_build_succeeds'] shortPrintAttr = 'path' managers = [ ('accessrequests', ProjectAccessRequestManager, @@ -2305,7 +2305,7 @@ class UserProject(GitlabObject): 'merge_requests_enabled', 'wiki_enabled', 'snippets_enabled', 'public', 'visibility_level', 'description', 'builds_enabled', 'public_builds', - 'import_url'] + 'import_url', 'only_allow_merge_if_build_succeeds'] class ProjectManager(BaseManager): From 608ebbd0f50e3f526f8110d2596e1c9cae5f252b Mon Sep 17 00:00:00 2001 From: Rafael Eyng Date: Thu, 22 Sep 2016 17:30:19 -0300 Subject: [PATCH 10/20] break lines too long --- gitlab/objects.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gitlab/objects.py b/gitlab/objects.py index 162d59171..577cd8a21 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -1883,14 +1883,16 @@ class Project(GitlabObject): 'snippets_enabled', 'container_registry_enabled', 'public', 'visibility_level', 'namespace_id', 'description', 'path', 'import_url', - 'builds_enabled', 'public_builds', 'only_allow_merge_if_build_succeeds'] + 'builds_enabled', 'public_builds', + 'only_allow_merge_if_build_succeeds'] optionalUpdateAttrs = ['name', 'default_branch', 'issues_enabled', 'wall_enabled', 'merge_requests_enabled', 'wiki_enabled', 'snippets_enabled', 'container_registry_enabled', 'public', 'visibility_level', 'namespace_id', 'description', 'path', 'import_url', 'builds_enabled', - 'public_builds', 'only_allow_merge_if_build_succeeds'] + 'public_builds', + 'only_allow_merge_if_build_succeeds'] shortPrintAttr = 'path' managers = [ ('accessrequests', ProjectAccessRequestManager, From 58604213efbe4d275be8da6615ed77d6f3510cbe Mon Sep 17 00:00:00 2001 From: Gauvain Pocentek Date: Fri, 23 Sep 2016 07:15:41 +0200 Subject: [PATCH 11/20] Add support for --all in CLI Fixes #153 --- docs/cli.rst | 8 +++++++- gitlab/cli.py | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/cli.rst b/docs/cli.rst index 7721f54d5..8b79d78fb 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -136,12 +136,18 @@ Example: Examples ======== -List all the projects: +List the projects (paginated): .. code-block:: console $ gitlab project list +List all the projects: + +.. code-block:: console + + $ gitlab project list --all + Limit to 5 items per request, display the 1st page only .. code-block:: console diff --git a/gitlab/cli.py b/gitlab/cli.py index 9f7f4143d..1826a7b72 100644 --- a/gitlab/cli.py +++ b/gitlab/cli.py @@ -379,6 +379,8 @@ def _populate_sub_parser_by_class(cls, sub_parser): for x in cls.requiredListAttrs] sub_parser_action.add_argument("--page", required=False) sub_parser_action.add_argument("--per-page", required=False) + sub_parser_action.add_argument("--all", required=False, + action='store_true') if action_name in ["get", "delete"]: if cls not in [gitlab.CurrentUser]: From d09eaa09a106c6fbdb32a48cec01557023874ef6 Mon Sep 17 00:00:00 2001 From: Gauvain Pocentek Date: Sun, 25 Sep 2016 09:54:41 +0200 Subject: [PATCH 12/20] Fix examples for file modification Fixes #156 --- docs/gl_objects/projects.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/gl_objects/projects.py b/docs/gl_objects/projects.py index 7c845d8cc..7623c15cc 100644 --- a/docs/gl_objects/projects.py +++ b/docs/gl_objects/projects.py @@ -226,11 +226,11 @@ # files update f.content = 'new content' -f.save(branch='master', commit_message='Update testfile') +f.save(branch_name='master', commit_message='Update testfile') # or for binary data f.content = base64.b64encode(open('image.png').read()) -f.save(branch='master', commit_message='Update testfile', encoding='base64') +f.save(branch_name='master', commit_message='Update testfile', encoding='base64') # end files update # files delete From cb30dd1d4caaba03f464cdf5751ef0336f8a6c33 Mon Sep 17 00:00:00 2001 From: Gauvain Pocentek Date: Thu, 29 Sep 2016 21:07:10 +0200 Subject: [PATCH 13/20] Use the plural merge_requests URL everywhere This breaks compatibility with older gitlab versions but maintaining support for changed APIs is just too complex and time consuming. See issue #139 if you need a workaround. Fixes #157 --- gitlab/objects.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gitlab/objects.py b/gitlab/objects.py index 577cd8a21..882163350 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -1379,8 +1379,7 @@ class ProjectMergeRequestNoteManager(BaseManager): class ProjectMergeRequest(GitlabObject): - _url = '/projects/%(project_id)s/merge_request' - _urlPlural = '/projects/%(project_id)s/merge_requests' + _url = '/projects/%(project_id)s/merge_requests' _constructorTypes = {'author': 'User', 'assignee': 'User'} requiredUrlAttrs = ['project_id'] requiredCreateAttrs = ['source_branch', 'target_branch', 'title'] From 3371e0e1281a8d6dfa22e921bee98214b60c1ff1 Mon Sep 17 00:00:00 2001 From: Gauvain Pocentek Date: Thu, 29 Sep 2016 21:34:20 +0200 Subject: [PATCH 14/20] rework travis and tox setup --- .travis.yml | 14 +++++++++----- tox.ini | 12 ++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5bce766d4..dd405f523 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,19 +1,23 @@ sudo: required services: - docker - +addons: + apt: + sources: + - deadsnakes + packages: + - python3.5 language: python python: 2.7 env: + - TOX_ENV=py35 - TOX_ENV=py34 - TOX_ENV=py27 - TOX_ENV=pep8 - TOX_ENV=docs - - TOX_ENV=noop_py - - TOX_ENV=noop_cli + - TOX_ENV=py_func + - TOX_ENV=cli_func install: - pip install tox script: - tox -e $TOX_ENV -after_success: - if [ "$TOX_ENV" = "noop_py" ]; then ./tools/py_functional_tests.sh; elif [ "$TOX_ENV" = "noop_cli" ]; then ./tools/functional_tests.sh; fi diff --git a/tox.ini b/tox.ini index 89b4f9b35..ef3e68a9c 100644 --- a/tox.ini +++ b/tox.ini @@ -32,12 +32,8 @@ commands = python setup.py build_sphinx commands = python setup.py testr --slowest --coverage --testr-args="{posargs}" -[testenv:noop_cli] -usedevelop = True -install_command = true {opts} {packages} -commands = true +[testenv:cli_func] +commands = {toxinidir}/tools/functional_tests.sh -[testenv:noop_py] -usedevelop = True -install_command = true {opts} {packages} -commands = true +[testenv:py_func] +commands = {toxinidir}/tools/py_functional_tests.sh From 7d424ae5a4dad41533af7add24d728c315563022 Mon Sep 17 00:00:00 2001 From: Gauvain Pocentek Date: Fri, 30 Sep 2016 07:00:07 +0200 Subject: [PATCH 15/20] Workaround gitlab setup failure in tests While running the functional tests in a venv, the token download somtimes fail. Try to get it multiple times before failing. --- tools/build_test_env.sh | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/tools/build_test_env.sh b/tools/build_test_env.sh index 7881c1826..3f6191a2a 100755 --- a/tools/build_test_env.sh +++ b/tools/build_test_env.sh @@ -102,20 +102,25 @@ while :; do I=$((I+5)) [ "$I" -lt 120 ] || fatal "timed out" done -sleep 5 # Get the token log "Getting GitLab token..." -TOKEN_JSON=$( - try curl -s http://localhost:8080/api/v3/session \ - -X POST \ - --data "login=$LOGIN&password=$PASSWORD" -) || exit 1 -TOKEN=$( - pecho "${TOKEN_JSON}" | - try python -c \ - 'import sys, json; print(json.load(sys.stdin)["private_token"])' -) || exit 1 +I=0 +while :; do + sleep 1 + TOKEN_JSON=$( + try curl -s http://localhost:8080/api/v3/session \ + -X POST \ + --data "login=$LOGIN&password=$PASSWORD" + ) >/dev/null 2>&1 || true + TOKEN=$( + pecho "${TOKEN_JSON}" | + try python -c \ + 'import sys, json; print(json.load(sys.stdin)["private_token"])' + ) >/dev/null 2>&1 && break + I=$((I+1)) + [ "$I" -lt 20 ] || fatal "timed out" +done cat > $CONFIG << EOF [global] From c2f45e90a52cb418665c65258628d382e0725401 Mon Sep 17 00:00:00 2001 From: Jonathon Reinhart Date: Sun, 2 Oct 2016 10:30:39 -0400 Subject: [PATCH 16/20] Add ProjectBuild.erase() We can't use the existing delete() functionality, because GitLab uses `POST /projects/:id/builds/:build_id/erase` to erase a build. Instead of overriding delete(), we add a separate erase() method to keep the naming consistent, and allow potentially more fine-grained operations in the future. - https://docs.gitlab.com/ce/api/builds.html#erase-a-build --- gitlab/exceptions.py | 4 ++++ gitlab/objects.py | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/gitlab/exceptions.py b/gitlab/exceptions.py index 7b0f7f006..0fc8617e5 100644 --- a/gitlab/exceptions.py +++ b/gitlab/exceptions.py @@ -95,6 +95,10 @@ class GitlabBuildRetryError(GitlabRetryError): pass +class GitlabBuildEraseError(GitlabRetryError): + pass + + class GitlabPipelineRetryError(GitlabRetryError): pass diff --git a/gitlab/objects.py b/gitlab/objects.py index 882163350..2609e1b7d 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -961,6 +961,12 @@ def retry(self, **kwargs): r = self.gitlab._raw_post(url) raise_error_from_response(r, GitlabBuildRetryError, 201) + def erase(self, **kwargs): + """Erase the build (remove build artifacts and trace).""" + url = '/projects/%s/builds/%s/erase' % (self.project_id, self.id) + r = self.gitlab._raw_post(url) + raise_error_from_response(r, GitlabBuildEraseError, 201) + def keep_artifacts(self, **kwargs): """Prevent artifacts from being delete when expiration is set. From 3b3930b5525e7ea46afc271949f52d02adc6b5ce Mon Sep 17 00:00:00 2001 From: Jonathon Reinhart Date: Sun, 2 Oct 2016 10:50:41 -0400 Subject: [PATCH 17/20] Update docs to use ProjectBuild.erase() --- docs/gl_objects/builds.py | 10 +++------- docs/gl_objects/builds.rst | 6 +++--- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/docs/gl_objects/builds.py b/docs/gl_objects/builds.py index b0d7ea2c7..d73ddd566 100644 --- a/docs/gl_objects/builds.py +++ b/docs/gl_objects/builds.py @@ -103,10 +103,6 @@ def __call__(self, chunk): build.retry() # end retry -# delete -gl.project_builds.delete(build_id, project_id=1) -# or -project.builds.delete(build_id) -# or -build.delete() -# end delete +# erase +build.erase() +# end erase diff --git a/docs/gl_objects/builds.rst b/docs/gl_objects/builds.rst index 1c4c525ad..e4c12583d 100644 --- a/docs/gl_objects/builds.rst +++ b/docs/gl_objects/builds.rst @@ -150,8 +150,8 @@ Cancel/retry a build: :start-after: # retry :end-before: # end retry -Erase a build: +Erase a build (artifacts and trace): .. literalinclude:: builds.py - :start-after: # delete - :end-before: # end delete + :start-after: # erase + :end-before: # end erase From 673dc3636e5ab6846c88cb4dac71f0690b02494d Mon Sep 17 00:00:00 2001 From: Gauvain Pocentek Date: Mon, 3 Oct 2016 06:39:44 +0200 Subject: [PATCH 18/20] Implement ProjectBuild.play() --- docs/gl_objects/builds.py | 4 ++++ docs/gl_objects/builds.rst | 6 ++++++ gitlab/exceptions.py | 4 ++++ gitlab/objects.py | 6 ++++++ 4 files changed, 20 insertions(+) diff --git a/docs/gl_objects/builds.py b/docs/gl_objects/builds.py index d73ddd566..9f5ef12c1 100644 --- a/docs/gl_objects/builds.py +++ b/docs/gl_objects/builds.py @@ -106,3 +106,7 @@ def __call__(self, chunk): # erase build.erase() # end erase + +# play +build.play() +# end play diff --git a/docs/gl_objects/builds.rst b/docs/gl_objects/builds.rst index e4c12583d..78412b48a 100644 --- a/docs/gl_objects/builds.rst +++ b/docs/gl_objects/builds.rst @@ -150,6 +150,12 @@ Cancel/retry a build: :start-after: # retry :end-before: # end retry +Play (trigger) a build: + +.. literalinclude:: builds.py + :start-after: # play + :end-before: # end play + Erase a build (artifacts and trace): .. literalinclude:: builds.py diff --git a/gitlab/exceptions.py b/gitlab/exceptions.py index 0fc8617e5..733551fab 100644 --- a/gitlab/exceptions.py +++ b/gitlab/exceptions.py @@ -95,6 +95,10 @@ class GitlabBuildRetryError(GitlabRetryError): pass +class GitlabBuildPlayError(GitlabRetryError): + pass + + class GitlabBuildEraseError(GitlabRetryError): pass diff --git a/gitlab/objects.py b/gitlab/objects.py index 2609e1b7d..e61483a93 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -961,6 +961,12 @@ def retry(self, **kwargs): r = self.gitlab._raw_post(url) raise_error_from_response(r, GitlabBuildRetryError, 201) + def play(self, **kwargs): + """Trigger a build explicitly.""" + url = '/projects/%s/builds/%s/play' % (self.project_id, self.id) + r = self.gitlab._raw_post(url) + raise_error_from_response(r, GitlabBuildPlayError, 201) + def erase(self, **kwargs): """Erase the build (remove build artifacts and trace).""" url = '/projects/%s/builds/%s/erase' % (self.project_id, self.id) From 117f7f584ed58f0f36b3cf6cb3a8d2a256c4aae4 Mon Sep 17 00:00:00 2001 From: Gauvain Pocentek Date: Sun, 16 Oct 2016 08:34:33 +0200 Subject: [PATCH 19/20] prepare the 0.16 release --- AUTHORS | 5 +++++ ChangeLog | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/AUTHORS b/AUTHORS index cf419ddff..f3290a7a8 100644 --- a/AUTHORS +++ b/AUTHORS @@ -36,3 +36,8 @@ Peter Mosmans Stefan K. Dunkler Missionrulz Rafael Eyng +Armin Weihbold +derek-austin +Jonathon Reinhart +Michal Galet +Will Starms diff --git a/ChangeLog b/ChangeLog index b6d8efa7e..94d6b18d1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +Version 0.16 + + * Add the ability to fork to a specific namespace + * JIRA service - add api_url to optional attributes + * Fix bug: Missing coma concatenates array values + * docs: branch protection notes + * Create a project in a group + * Add only_allow_merge_if_build_succeeds option to project objects + * Add support for --all in CLI + * Fix examples for file modification + * Use the plural merge_requests URL everywhere + * Rework travis and tox setup + * Workaround gitlab setup failure in tests + * Add ProjectBuild.erase() + * Implement ProjectBuild.play() + Version 0.15.1 * docs: improve the pagination section From 46ea44acea4cbac5037cc91141aa205326448801 Mon Sep 17 00:00:00 2001 From: Gauvain Pocentek Date: Sun, 16 Oct 2016 08:47:06 +0200 Subject: [PATCH 20/20] Set version to 0.16 --- gitlab/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitlab/__init__.py b/gitlab/__init__.py index fa1927d80..2699328b8 100644 --- a/gitlab/__init__.py +++ b/gitlab/__init__.py @@ -33,7 +33,7 @@ from gitlab.objects import * # noqa __title__ = 'python-gitlab' -__version__ = '0.15.1' +__version__ = '0.16' __author__ = 'Gauvain Pocentek' __email__ = 'gauvain@pocentek.net' __license__ = 'LGPL3'