Skip to content

Commit 375d29c

Browse files
vsklencarwonder-sk
authored andcommitted
Added project cloning
small changes
1 parent 6542334 commit 375d29c

File tree

3 files changed

+29
-26
lines changed

3 files changed

+29
-26
lines changed

mergin/cli.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -372,16 +372,16 @@ def modtime(directory):
372372

373373

374374
@cli.command()
375-
@click.argument('project_fullname', required=True)
376-
@click.argument('project_namespace', required=True)
377-
@click.argument('project_name', required=True)
378-
def clone(project_fullname, project_namespace, project_name):
375+
@click.argument('source_project_path', required=True)
376+
@click.argument('cloned_project_name', required=True)
377+
@click.argument('cloned_project_namespace', required=False)
378+
def clone(source_project_path, cloned_project_name, cloned_project_namespace=None):
379379
"""Clone project from server."""
380380
c = _init_client()
381381
if c is None:
382382
return
383383
try:
384-
c.clone_project(project_fullname, project_namespace, project_name)
384+
c.clone_project(source_project_path, cloned_project_name, cloned_project_namespace)
385385
click.echo('Done')
386386
except Exception as e:
387387
_print_unhandled_exception()

mergin/client.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -399,23 +399,23 @@ def pull_project(self, directory):
399399
pull_project_wait(job)
400400
return pull_project_finalize(job)
401401

402-
def clone_project(self, full_project_name, namespace, name):
402+
def clone_project(self, source_project_path, cloned_project_name, cloned_project_namespace=None):
403403
"""
404404
Clone project on server.
405+
:param source_project_path: Project's full name (<namespace>/<name>)
406+
:type source_project_path: String
407+
:param cloned_project_name: Cloned project's name
408+
:type cloned_project_name: String
409+
:param cloned_project_namespace: Cloned project's namespace, username is used if not defined
410+
:type cloned_project_namespace: String
405411
406-
:param project_path: Project's full name (<namespace>/<name>)
407-
:type project_path: String
408-
:param namespace: Cloned project's namespace
409-
:type namespace: String
410-
:param name: Cloned project's name
411-
:type name: String
412412
"""
413-
path = "/v1/project/clone/%s" % full_project_name
413+
path = "/v1/project/clone/%s" % source_project_path
414414
url = urllib.parse.urljoin(self.url, urllib.parse.quote(path))
415415
json_headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
416416
data = {
417-
'namespace': namespace,
418-
'project': name
417+
'namespace': cloned_project_namespace,
418+
'project': cloned_project_name if cloned_project_name else self.username()
419419
}
420420

421421
request = urllib.request.Request(url, data=json.dumps(data).encode(), headers=json_headers, method="POST")

mergin/test/test_client.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -461,22 +461,25 @@ def test_empty_file_in_subdir(mc):
461461
mc.pull_project(project_dir_2)
462462
assert os.path.exists(os.path.join(project_dir_2, 'subdir2', 'empty2.txt'))
463463

464-
def test_clone_delete_project(mc):
464+
def test_clone_project(mc):
465+
test_project = 'test_clone_project'
466+
test_project_fullname = API_USER + '/' + test_project
467+
468+
# cleanups
469+
project_dir = os.path.join(TMP_DIR, test_project)
470+
cleanup(mc, test_project_fullname, [project_dir])
471+
465472
# create new (empty) project on server
466-
test_project = 'test_clone_delete'
467473
mc.create_project(test_project)
468474
projects = mc.projects_list(flag='created')
469475
assert any(p for p in projects if p['name'] == test_project and p['namespace'] == API_USER)
470476

471-
# clone project
472477
cloned_project_name = test_project + "_cloned"
473-
test_project_fullname = API_USER + '/' + test_project
474-
mc.clone_project(test_project_fullname, API_USER, cloned_project_name)
475-
projects = mc.projects_list(flag='created')
476-
assert any(p for p in projects if p['name'] == cloned_project_name and p['namespace'] == API_USER)
477-
478-
project_dir = os.path.join(TMP_DIR, test_project)
479-
cleanup(mc, test_project_fullname, [project_dir])
480-
478+
# cleanup cloned project
481479
cloned_project_dir = os.path.join(TMP_DIR, cloned_project_name)
482480
cleanup(mc, API_USER + '/' + cloned_project_name, [cloned_project_dir])
481+
482+
# clone project
483+
mc.clone_project(test_project_fullname, cloned_project_name, API_USER)
484+
projects = mc.projects_list(flag='created')
485+
assert any(p for p in projects if p['name'] == cloned_project_name and p['namespace'] == API_USER)

0 commit comments

Comments
 (0)