Skip to content

Commit

Permalink
osc/core: parseRevisionOption(): cleanup and make logic consistent.
Browse files Browse the repository at this point in the history
Handle multiple revisions the same as a single revision in terms of what
is allowed (digit, or 32 character string [md5]). Additionally, support
either blank or "latest" to mean latest revision (None).

This allows for new revision to be specified without old revision like the
following example:

osc rdiff ... -r :17
  • Loading branch information
jberry-suse committed Aug 26, 2019
1 parent dbed74a commit 6a3976d
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 20 deletions.
2 changes: 1 addition & 1 deletion osc/commandline.py
Original file line number Diff line number Diff line change
Expand Up @@ -6841,7 +6841,7 @@ def do_log(self, subcmd, opts, *args):
project = args[0]
package = args[1]

rev, rev_upper = parseRevisionOption(opts.revision)
rev, rev_upper = parseRevisionOption(opts.revision, allow_md5=False)
if rev and not checkRevision(project, package, rev, apiurl, opts.meta):
print('Revision \'%s\' does not exist' % rev, file=sys.stderr)
sys.exit(1)
Expand Down
28 changes: 9 additions & 19 deletions osc/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -6603,32 +6603,22 @@ def cmdbuild(apiurl, cmd, project, package=None, arch=None, repo=None, code=None
return root.get('code')


def parseRevisionOption(string):
def parseRevisionOption(string, allow_md5=True):
"""
returns a tuple which contains the revisions
"""

revisions = [None, None]
if string:
if ':' in string:
splitted_rev = string.split(':')
try:
for i in splitted_rev:
int(i)
return splitted_rev
except ValueError:
parts = string.split(':')
for i, revision in enumerate(parts[0:2], 0):
if revision.isdigit() or (allow_md5 and revision.isalnum() and len(revision) == 32):
revisions[i] = revision
elif revision != '' and revision != 'latest':
print('your revision \'%s\' will be ignored' % string, file=sys.stderr)
return None, None
else:
if string.isdigit():
return string, None
elif string.isalnum() and len(string) == 32:
# could be an md5sum
return string, None
else:
print('your revision \'%s\' will be ignored' % string, file=sys.stderr)
return None, None
else:
return None, None

return tuple(revisions)

def checkRevision(prj, pac, revision, apiurl=None, meta=False):
"""
Expand Down

0 comments on commit 6a3976d

Please sign in to comment.