Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb67692f

Browse files
author
Dan Fuchs
committed
feat: import from bitbucket server
I'd like to use this libary to automate importing Bitbucket Serverrepositories into GitLab. There is a [GitLab APIendpoint](https://docs.gitlab.com/ee/api/import.html#import-repository-from-bitbucket-server)to do this, but it is not exposed through this library.* Add an `import_bitbucket_server` method to the `ProjectManager`. This method calls this GitLab API endpoint:https://docs.gitlab.com/ee/api/import.html#import-repository-from-bitbucket-server* Add a basic unit test for the existing `import_github` method
1 parent643454c commitb67692f

File tree

2 files changed

+151
-0
lines changed

2 files changed

+151
-0
lines changed

‎gitlab/tests/objects/test_projects.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@
99

1010

1111
project_content= {"name":"name","id":1}
12+
import_content= {
13+
"id":1,
14+
"name":"project",
15+
"import_status":"scheduled",
16+
}
1217

1318

1419
@pytest.fixture
@@ -37,6 +42,32 @@ def resp_list_projects():
3742
yieldrsps
3843

3944

45+
@pytest.fixture
46+
defresp_import_bitbucket_server():
47+
withresponses.RequestsMock()asrsps:
48+
rsps.add(
49+
method=responses.POST,
50+
url="http://localhost/api/v4/import/bitbucket_server",
51+
json=import_content,
52+
content_type="application/json",
53+
status=200,
54+
)
55+
yieldrsps
56+
57+
58+
@pytest.fixture
59+
defresp_import_github():
60+
withresponses.RequestsMock()asrsps:
61+
rsps.add(
62+
method=responses.POST,
63+
url="http://localhost/api/v4/import/github",
64+
json=import_content,
65+
content_type="application/json",
66+
status=200,
67+
)
68+
yieldrsps
69+
70+
4071
deftest_get_project(gl,resp_get_project):
4172
data=gl.projects.get(1)
4273
assertisinstance(data,Project)
@@ -50,6 +81,33 @@ def test_list_projects(gl, resp_list_projects):
5081
assertprojects[0].name=="name"
5182

5283

84+
deftest_import_bitbucket_server(gl,resp_import_bitbucket_server):
85+
res=gl.projects.import_bitbucket_server(
86+
bitbucket_server_project="project",
87+
bitbucket_server_repo="repo",
88+
bitbucket_server_url="url",
89+
bitbucket_server_username="username",
90+
personal_access_token="token",
91+
new_name="new_name",
92+
target_namespace="namespace",
93+
)
94+
assertres["id"]==1
95+
assertres["name"]=="project"
96+
assertres["import_status"]=="scheduled"
97+
98+
99+
deftest_import_github(gl,resp_import_github):
100+
res=gl.projects.import_github(
101+
repo_id=12345,
102+
personal_access_token="token",
103+
new_name="new_name",
104+
target_namespace="namespace",
105+
)
106+
assertres["id"]==1
107+
assertres["name"]=="project"
108+
assertres["import_status"]=="scheduled"
109+
110+
53111
@pytest.mark.skip(reason="missing test")
54112
deftest_list_user_projects(gl):
55113
pass
@@ -223,3 +281,8 @@ def test_project_pull_mirror(gl):
223281
@pytest.mark.skip(reason="missing test")
224282
deftest_project_snapshot(gl):
225283
pass
284+
285+
286+
@pytest.mark.skip(reason="missing test")
287+
deftest_import_github(gl):
288+
pass

‎gitlab/v4/objects/__init__.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5501,6 +5501,94 @@ def import_project(
55015501
"/projects/import",post_data=data,files=files,**kwargs
55025502
)
55035503

5504+
defimport_bitbucket_server(
5505+
self,
5506+
bitbucket_server_url,
5507+
bitbucket_server_username,
5508+
personal_access_token,
5509+
bitbucket_server_project,
5510+
bitbucket_server_repo,
5511+
new_name=None,
5512+
target_namespace=None,
5513+
**kwargs
5514+
):
5515+
"""Import a project from BitBucket Server to Gitlab (schedule the import)
5516+
5517+
This method will return when an import operation has been safely queued,
5518+
or an error has occurred. After triggering an import, check the
5519+
`import_status` of the newly created project to detect when the import
5520+
operation has completed.
5521+
5522+
NOTE: this request may take longer than most other API requests.
5523+
So this method will specify a 60 second default timeout if none is specified.
5524+
A timeout can be specified via kwargs to override this functionality.
5525+
5526+
Args:
5527+
bitbucket_server_url (str): Bitbucket Server URL
5528+
bitbucket_server_username (str): Bitbucket Server Username
5529+
personal_access_token (str): Bitbucket Server personal access
5530+
token/password
5531+
bitbucket_server_project (str): Bitbucket Project Key
5532+
bitbucket_server_repo (str): Bitbucket Repository Name
5533+
new_name (str): New repository name (Optional)
5534+
target_namespace (str): Namespace to import repository into.
5535+
Supports subgroups like /namespace/subgroup (Optional)
5536+
**kwargs: Extra options to send to the server (e.g. sudo)
5537+
5538+
Raises:
5539+
GitlabAuthenticationError: If authentication is not correct
5540+
GitlabListError: If the server failed to perform the request
5541+
5542+
Returns:
5543+
dict: A representation of the import status.
5544+
5545+
Example:
5546+
```
5547+
gl = gitlab.Gitlab_from_config()
5548+
print "Triggering import"
5549+
result = gl.projects.import_gitlab(
5550+
bitbucket_server_url="https://some.server.url",
5551+
bitbucket_server_username="some_bitbucket_user",
5552+
personal_access_token="my_password_or_access_token",
5553+
bitbucket_server_project="my_project",
5554+
bitbucket_server_repo="my_repo",
5555+
new_name="gl_project_name",
5556+
target_namespace="gl_project_path"
5557+
)
5558+
project = gl.projects.get(ret['id'])
5559+
print "Waiting for import to complete"
5560+
while project.import_status == u'started':
5561+
time.sleep(1.0)
5562+
project = gl.projects.get(project.id)
5563+
print "BitBucket import complete"
5564+
```
5565+
"""
5566+
data= {
5567+
"bitbucket_server_url":bitbucket_server_url,
5568+
"bitbucket_server_username":bitbucket_server_username,
5569+
"personal_access_token":personal_access_token,
5570+
"bitbucket_server_project":bitbucket_server_project,
5571+
"bitbucket_server_repo":bitbucket_server_repo,
5572+
}
5573+
ifnew_name:
5574+
data["new_name"]=new_name
5575+
iftarget_namespace:
5576+
data["target_namespace"]=target_namespace
5577+
if (
5578+
"timeout"notinkwargs
5579+
orself.gitlab.timeoutisNone
5580+
orself.gitlab.timeout<60.0
5581+
):
5582+
# Ensure that this HTTP request has a longer-than-usual default timeout
5583+
# The base gitlab object tends to have a default that is <10 seconds,
5584+
# and this is too short for this API command, typically.
5585+
# On the order of 24 seconds has been measured on a typical gitlab instance.
5586+
kwargs["timeout"]=60.0
5587+
result=self.gitlab.http_post(
5588+
"/import/bitbucket_server",post_data=data,**kwargs
5589+
)
5590+
returnresult
5591+
55045592
defimport_github(
55055593
self,personal_access_token,repo_id,target_namespace,new_name=None,**kwargs
55065594
):

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp