Skip to content

Commit 7196c97

Browse files
committed
Merge pull request #428 from jmchilton/fix_shed_update_skip_upload
A bunch of fixes for shed_update.
2 parents c41198c + 424fbe5 commit 7196c97

3 files changed

Lines changed: 65 additions & 43 deletions

File tree

planemo/commands/cmd_shed_update.py

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -69,76 +69,76 @@ def cli(ctx, paths, **kwds):
6969

7070
def update(realized_repository):
7171
collected_data['results']['total'] += 1
72+
skip_upload = kwds["skip_upload"]
73+
skip_metadata = kwds["skip_metadata"]
7274
upload_ret_code = 0
7375
upload_ok = True
7476

7577
captured_io = {}
76-
if not kwds["skip_upload"]:
78+
if not skip_upload:
7779
with captured_io_for_xunit(kwds, captured_io):
7880
upload_ret_code = shed.upload_repository(
7981
ctx, realized_repository, **kwds
8082
)
8183
upload_ok = not upload_ret_code
8284

85+
repo_result = {
86+
'classname': realized_repository.name,
87+
'time': captured_io.get("time", None),
88+
'name': 'shed-update',
89+
'stdout': captured_io.get("stdout", None),
90+
'stderr': captured_io.get("stderr", None),
91+
}
92+
8393
# Now that we've uploaded (or skipped appropriately), collect results.
8494
if upload_ret_code == 2:
8595
collected_data['results']['failures'] += 1
86-
collected_data['tests'].append({
87-
'classname': realized_repository.name,
96+
repo_result.update({
8897
'errorType': 'FailedUpdate',
8998
'errorMessage': 'Failed to update repository as it does not exist in target ToolShed',
90-
'time': captured_io["time"],
91-
'name': 'shed-update',
92-
'stdout': captured_io["stdout"],
93-
'stderr': captured_io["stderr"],
9499
})
100+
collected_data['tests'].append(repo_result)
95101
error("Failed to update repository it does not exist "
96102
"in target ToolShed.")
97103
return upload_ret_code
98-
repo_id = realized_repository.find_repository_id(ctx, shed_context)
104+
105+
exit = 0
99106
metadata_ok = True
100-
if not kwds["skip_metadata"]:
101-
metadata_ok = realized_repository.update(ctx, shed_context, repo_id)
102-
if metadata_ok:
103-
info("Repository metadata updated.")
107+
if not skip_metadata:
108+
repo_id = shed.handle_force_create(realized_repository, ctx, shed_context, **kwds)
109+
# failing to create the repo, give up
110+
if repo_id is None:
111+
exit = shed.report_non_existent_repository(realized_repository)
112+
metadata_ok = False
113+
else:
114+
metadata_ok = realized_repository.update(ctx, shed_context, repo_id)
104115
else:
116+
info("Skipping repository metadata update.")
117+
118+
if not metadata_ok:
105119
error("Failed to update repository metadata.")
106120

107121
if metadata_ok and upload_ok:
108-
collected_data['tests'].append({
109-
'classname': realized_repository.name,
110-
'time': captured_io["time"],
111-
'name': 'shed-update',
112-
'stdout': captured_io["stdout"],
113-
'stderr': captured_io["stderr"],
114-
})
115-
return 0
122+
pass
116123
elif upload_ok:
117124
collected_data['results']['skips'] += 1
118-
collected_data['tests'].append({
119-
'classname': realized_repository.name,
125+
repo_result.update({
120126
'errorType': 'FailedMetadata',
121127
'errorMessage': 'Failed to update repository metadata',
122-
'time': captured_io["time"],
123-
'name': 'shed-update',
124-
'stdout': captured_io["stdout"],
125-
'stderr': captured_io["stderr"],
126128
})
127-
error("Repo updated but metadata was not.")
128-
return 1
129+
if not skip_upload:
130+
error("Repo updated but metadata was not.")
131+
exit = exit or 1
129132
else:
130133
collected_data['results']['failures'] += 1
131-
collected_data['tests'].append({
132-
'classname': realized_repository.name,
134+
repo_result.update({
133135
'errorType': 'FailedUpdate',
134136
'errorMessage': 'Failed to update repository',
135-
'time': captured_io["time"],
136-
'name': 'shed-update',
137-
'stdout': captured_io["stdout"],
138-
'stderr': captured_io["stderr"],
139137
})
140138
error("Failed to update a repository.")
141-
return 1
139+
exit = exit or 1
140+
collected_data['tests'].append(repo_result)
141+
return exit
142142

143143
exit_code = shed.for_each_repository(ctx, update, paths, **kwds)
144144

planemo/shed/__init__.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,20 @@ def find_urls_for_xml(root):
226226
return urls
227227

228228

229+
def handle_force_create(realized_repository, ctx, shed_context, **kwds):
230+
repo_id = realized_repository.find_repository_id(ctx, shed_context)
231+
if repo_id is None and kwds.get("force_repository_creation", None):
232+
repo_id = realized_repository.create(ctx, shed_context)
233+
# failing to create the repo, give up
234+
return repo_id
235+
236+
237+
def report_non_existent_repository(realized_repository):
238+
name = realized_repository.name
239+
error("Repository [%s] does not exist in the targeted Tool Shed." % name)
240+
return 2
241+
242+
229243
def upload_repository(ctx, realized_repository, **kwds):
230244
"""Upload a tool directory as a tarball to a tool shed.
231245
"""
@@ -241,14 +255,10 @@ def upload_repository(ctx, realized_repository, **kwds):
241255
update_kwds = {}
242256
_update_commit_message(ctx, realized_repository, update_kwds, **kwds)
243257

244-
repo_id = realized_repository.find_repository_id(ctx, shed_context)
245-
if repo_id is None and kwds.get("force_repository_creation", None):
246-
repo_id = realized_repository.create(ctx, shed_context)
258+
repo_id = handle_force_create(realized_repository, ctx, shed_context, **kwds)
247259
# failing to create the repo, give up
248260
if repo_id is None:
249-
name = realized_repository.name
250-
error("Repository [%s] does not exist in the targeted Tool Shed." % name)
251-
return 2
261+
return report_non_existent_repository(realized_repository)
252262

253263
if kwds.get("check_diff", False):
254264
is_diff = diff_repo(ctx, realized_repository, **kwds)

tests/test_shed_upload.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,13 @@ def test_update_not_exists(self):
3232
upload_command.extend(self._shed_args())
3333
self._check_exit_code(upload_command, exit_code=2)
3434

35-
def test_upload_with_check_diff(self):
35+
def test_update_not_exists_update_only(self):
36+
with self._isolate_repo("single_tool"):
37+
upload_command = ["shed_update", "--skip_upload"]
38+
upload_command.extend(self._shed_args())
39+
self._check_exit_code(upload_command, exit_code=2)
40+
41+
def test_update_with_check_diff(self):
3642
with self._isolate_repo("single_tool") as f:
3743
upload_command = [
3844
"shed_update", "--force_repository_creation", "--check_diff"
@@ -53,7 +59,13 @@ def test_upload_with_check_diff(self):
5359
r = self._check_exit_code(upload_command)
5460
assert "not different, skipping upload." not in r.output
5561

56-
def test_upload_with_force_create(self):
62+
def test_update_metadata_only(self):
63+
with self._isolate_repo("single_tool"):
64+
upload_command = ["shed_update", "--force_repository_creation", "--skip_upload"]
65+
upload_command.extend(self._shed_args())
66+
self._check_exit_code(upload_command)
67+
68+
def test_update_with_force_create(self):
5769
with self._isolate_repo("single_tool") as f:
5870
upload_command = ["shed_update", "--force_repository_creation"]
5971
upload_command.extend(self._shed_args())

0 commit comments

Comments
 (0)