diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-09-20 00:05:59 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-09-20 00:05:59 +0000 |
commit | fc8c74fd0cbe7384038ead2dd2493f5c63d2b98d (patch) | |
tree | 6fe0229558adf41fd48c1e9f6bc5e367011d4976 | |
parent | b35b9ac7e2fd4a707ea9291eb57769c690403b4c (diff) | |
download | gitlab-ce-fc8c74fd0cbe7384038ead2dd2493f5c63d2b98d.tar.gz |
Add latest changes from gitlab-org/gitlab@master
-rw-r--r-- | changelogs/unreleased/expose-name-property-in-import-api.yml | 5 | ||||
-rw-r--r-- | doc/api/project_import_export.md | 9 | ||||
-rw-r--r-- | doc/user/permissions.md | 7 | ||||
-rw-r--r-- | lib/api/project_import.rb | 2 | ||||
-rw-r--r-- | spec/requests/api/project_import_spec.rb | 47 |
5 files changed, 62 insertions, 8 deletions
diff --git a/changelogs/unreleased/expose-name-property-in-import-api.yml b/changelogs/unreleased/expose-name-property-in-import-api.yml new file mode 100644 index 00000000000..9a0fb581321 --- /dev/null +++ b/changelogs/unreleased/expose-name-property-in-import-api.yml @@ -0,0 +1,5 @@ +--- +title: Expose name property in imports API +merge_request: 16848 +author: +type: added diff --git a/doc/api/project_import_export.md b/doc/api/project_import_export.md index e285c721d11..7040646641b 100644 --- a/doc/api/project_import_export.md +++ b/doc/api/project_import_export.md @@ -111,6 +111,7 @@ POST /projects/import | Attribute | Type | Required | Description | | --------- | -------------- | -------- | ---------------------------------------- | | `namespace` | integer/string | no | The ID or path of the namespace that the project will be imported to. Defaults to the current user's namespace | +| `name` | string | no | The name of the project to be imported. Defaults to the path of the project if not provided | | `file` | string | yes | The file to be uploaded | | `path` | string | yes | Name and path for new project | | `overwrite` | boolean | no | If there is a project with the same path the import will overwrite it. Default to false | @@ -131,14 +132,12 @@ cURL doesn't support posting a file from a remote server. Importing a project fr ```python import requests -import urllib -import json -import sys +from io import BytesIO -s3_file = urllib.urlopen(presigned_url) +s3_file = requests.get(presigned_url) url = 'https://gitlab.example.com/api/v4/projects/import' -files = {'file': s3_file} +files = {'file': BytesIO(s3_file.content)} data = { "path": "example-project", "namespace": "example-group" diff --git a/doc/user/permissions.md b/doc/user/permissions.md index 4f660d07071..2025832a714 100644 --- a/doc/user/permissions.md +++ b/doc/user/permissions.md @@ -236,7 +236,7 @@ nested groups if you have membership in one of its parents. To learn more, read through the documentation on [subgroups memberships](group/subgroups/index.md#membership). -## Guest User +## Free Guest users **(ULTIMATE)** When a user is given `Guest` permissions on a project and/or group, and holds no higher permission level on any other project or group on the instance, the user @@ -245,8 +245,9 @@ There is no other specific "guest" designation for newly created users. If the user is assigned a higher role on any projects or groups, the user will take a license seat. If a user creates a project, the user becomes a `Maintainer` -on the project, resulting in the use of a license seat. To prevent a guest user -from creating projects, you can edit the user profile to mark the user as +on the project, resulting in the use of a license seat. + +To prevent a guest user from creating projects, you can edit the user profile to mark the user as [External](#external-users-permissions). ## External users permissions diff --git a/lib/api/project_import.rb b/lib/api/project_import.rb index 7f1ae5ffbe6..b3f17447ea0 100644 --- a/lib/api/project_import.rb +++ b/lib/api/project_import.rb @@ -29,6 +29,7 @@ module API requires :path, type: String, desc: 'The new project path and name' # TODO: remove rubocop disable - https://gitlab.com/gitlab-org/gitlab/issues/14960 requires :file, type: File, desc: 'The project export file to be imported' # rubocop:disable Scalability/FileUploads + optional :name, type: String, desc: 'The name of the project to be imported. Defaults to the path of the project if not provided.' optional :namespace, type: String, desc: "The ID or name of the namespace that the project will be imported into. Defaults to the current user's namespace." optional :overwrite, type: Boolean, default: false, desc: 'If there is a project in the same namespace and with the same name overwrite it' optional :override_params, @@ -55,6 +56,7 @@ module API project_params = { path: import_params[:path], namespace_id: namespace.id, + name: import_params[:name], file: import_params[:file]['tempfile'], overwrite: import_params[:overwrite] } diff --git a/spec/requests/api/project_import_spec.rb b/spec/requests/api/project_import_spec.rb index 594b42bb6c0..d2b1fb063b8 100644 --- a/spec/requests/api/project_import_spec.rb +++ b/spec/requests/api/project_import_spec.rb @@ -33,6 +33,53 @@ describe API::ProjectImport do expect(response).to have_gitlab_http_status(201) end + context 'when a name is explicitly set' do + let(:expected_name) { 'test project import' } + + it 'schedules an import using a namespace and a different name' do + stub_import(namespace) + + post api('/projects/import', user), params: { path: 'test-import', file: fixture_file_upload(file), namespace: namespace.id, name: expected_name } + + expect(response).to have_gitlab_http_status(201) + end + + it 'schedules an import using the namespace path and a different name' do + stub_import(namespace) + + post api('/projects/import', user), params: { path: 'test-import', file: fixture_file_upload(file), namespace: namespace.full_path, name: expected_name } + + expect(response).to have_gitlab_http_status(201) + end + + it 'sets name correctly' do + stub_import(namespace) + + post api('/projects/import', user), params: { path: 'test-import', file: fixture_file_upload(file), namespace: namespace.full_path, name: expected_name } + + project = Project.find(json_response['id']) + expect(project.name).to eq(expected_name) + end + + it 'sets name correctly with an overwrite' do + stub_import(namespace) + + post api('/projects/import', user), params: { path: 'test-import', file: fixture_file_upload(file), namespace: namespace.full_path, name: 'new project name', overwrite: true } + + project = Project.find(json_response['id']) + expect(project.name).to eq('new project name') + end + + it 'schedules an import using the path and name explicitly set to nil' do + stub_import(namespace) + + post api('/projects/import', user), params: { path: 'test-import', file: fixture_file_upload(file), namespace: namespace.full_path, name: nil } + + project = Project.find(json_response['id']) + expect(project.name).to eq('test-import') + end + end + it 'schedules an import at the user namespace level' do stub_import(user.namespace) |