Skip to content

Commit 53a1c3a

Browse files
committed
Refactor parsing revision arguments
1 parent 0da73ab commit 53a1c3a

File tree

2 files changed

+42
-18
lines changed

2 files changed

+42
-18
lines changed

glv/__init__.py

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444

4545
import glv.vcs as vcs
4646
from glv.actors import ProviderActor
47+
from glv.cli import parse_revisions
4748
from glv.providers import Cache, Provider
4849

4950
LOG = logging.getLogger('glv')
@@ -274,31 +275,32 @@ def __init__(self,
274275
self.has_modules = False
275276
if vcs.modules(self._repo):
276277
self.has_modules = True
278+
# {str:pygit2.Object }
277279
self._branches = {
278280
r.shorthand: r.peel()
279281
for r in self._repo.references.objects
280282
if not r.shorthand.endswith('/HEAD')
281283
}
282-
revision = revision or ['HEAD']
283-
if revision and isinstance(revision[0], str):
284-
if revision == '*':
285-
raise NotImplementedError('--all switch NYI')
286-
self.revision = revision[0]
287-
self.__end = None
288-
try:
289-
if '..' in self.revision:
290-
tmp = self.revision.split('..')
291-
self.__end: GitCommit = self._repo.revparse_single(tmp[0])
292-
self.__start: GitCommit = self._repo.revparse_single(
293-
tmp[1])
294-
else:
295-
self.__start: GitCommit = self._repo.revparse_single(
296-
self.revision)
297-
except KeyError:
298-
raise NoRevisionMatches
299-
else:
284+
parsed_results = parse_revisions(revision)
285+
if len(parsed_results) == 0:
286+
raise NoRevisionMatches
287+
if len(parsed_results) > 1:
300288
raise NotImplementedError('Multi branch support NYI')
301289

290+
first_revision_result = parsed_results[0]
291+
self.revision = first_revision_result.input
292+
try:
293+
self.__start: GitCommit = self._repo.revparse_single(
294+
first_revision_result.start)
295+
296+
if first_revision_result.end:
297+
self.__end: GitCommit = self._repo.revparse_single(
298+
first_revision_result.end)
299+
else:
300+
self.__end = None
301+
except KeyError as exc:
302+
raise NoRevisionMatches from exc
303+
302304
for provider in providers().values():
303305
if provider.enabled(self._repo):
304306
cache_dir = self._repo.path + __name__ + '/remotes/origin'

glv/cli.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
''' Utilities for parsing data on the command line '''
2+
3+
4+
class RevisionRange: # pylint: disable=too-few-public-methods
5+
''' Parsed revision range. '''
6+
def __init__(self, string: str):
7+
self.input = string
8+
self.end = None
9+
if '..' in string:
10+
self.end, self.start = string.split('..')
11+
if not self.start:
12+
self.start = "HEAD"
13+
else:
14+
self.start = string
15+
16+
17+
def parse_revisions(revisions: list[str] = None) -> list[RevisionRange]:
18+
''' Parses revision strings specified on the command line to RevisionRange
19+
objects .
20+
'''
21+
revisions = revisions or ['HEAD']
22+
return [RevisionRange(rev) for rev in revisions]

0 commit comments

Comments
 (0)