diff options
Diffstat (limited to 'command.py')
| -rw-r--r-- | command.py | 38 |
1 files changed, 19 insertions, 19 deletions
| @@ -15,17 +15,19 @@ | |||
| 15 | 15 | ||
| 16 | import os | 16 | import os |
| 17 | import optparse | 17 | import optparse |
| 18 | import platform | ||
| 19 | import re | ||
| 18 | import sys | 20 | import sys |
| 19 | 21 | ||
| 20 | import manifest_loader | ||
| 21 | |||
| 22 | from error import NoSuchProjectError | 22 | from error import NoSuchProjectError |
| 23 | from error import InvalidProjectGroupsError | ||
| 23 | 24 | ||
| 24 | class Command(object): | 25 | class Command(object): |
| 25 | """Base class for any command line action in repo. | 26 | """Base class for any command line action in repo. |
| 26 | """ | 27 | """ |
| 27 | 28 | ||
| 28 | common = False | 29 | common = False |
| 30 | manifest = None | ||
| 29 | _optparse = None | 31 | _optparse = None |
| 30 | 32 | ||
| 31 | def WantPager(self, opt): | 33 | def WantPager(self, opt): |
| @@ -57,31 +59,24 @@ class Command(object): | |||
| 57 | """Perform the action, after option parsing is complete. | 59 | """Perform the action, after option parsing is complete. |
| 58 | """ | 60 | """ |
| 59 | raise NotImplementedError | 61 | raise NotImplementedError |
| 60 | |||
| 61 | @property | ||
| 62 | def manifest(self): | ||
| 63 | return self.GetManifest() | ||
| 64 | |||
| 65 | def GetManifest(self, reparse=False, type=None): | ||
| 66 | return manifest_loader.GetManifest(self.repodir, | ||
| 67 | reparse=reparse, | ||
| 68 | type=type) | ||
| 69 | 62 | ||
| 70 | def GetProjects(self, args, missing_ok=False): | 63 | def GetProjects(self, args, missing_ok=False): |
| 71 | """A list of projects that match the arguments. | 64 | """A list of projects that match the arguments. |
| 72 | """ | 65 | """ |
| 73 | all = self.manifest.projects | 66 | all = self.manifest.projects |
| 67 | result = [] | ||
| 74 | 68 | ||
| 75 | mp = self.manifest.manifestProject | 69 | mp = self.manifest.manifestProject |
| 76 | if mp.relpath == '.': | ||
| 77 | all = dict(all) | ||
| 78 | all[mp.name] = mp | ||
| 79 | 70 | ||
| 80 | result = [] | 71 | groups = mp.config.GetString('manifest.groups') |
| 72 | if not groups: | ||
| 73 | groups = 'default,platform-' + platform.system().lower() | ||
| 74 | groups = [x for x in re.split('[,\s]+', groups) if x] | ||
| 81 | 75 | ||
| 82 | if not args: | 76 | if not args: |
| 83 | for project in all.values(): | 77 | for project in all.values(): |
| 84 | if missing_ok or project.Exists: | 78 | if ((missing_ok or project.Exists) and |
| 79 | project.MatchesGroups(groups)): | ||
| 85 | result.append(project) | 80 | result.append(project) |
| 86 | else: | 81 | else: |
| 87 | by_path = None | 82 | by_path = None |
| @@ -97,9 +92,7 @@ class Command(object): | |||
| 97 | for p in all.values(): | 92 | for p in all.values(): |
| 98 | by_path[p.worktree] = p | 93 | by_path[p.worktree] = p |
| 99 | 94 | ||
| 100 | try: | 95 | if os.path.exists(path): |
| 101 | project = by_path[path] | ||
| 102 | except KeyError: | ||
| 103 | oldpath = None | 96 | oldpath = None |
| 104 | while path \ | 97 | while path \ |
| 105 | and path != oldpath \ | 98 | and path != oldpath \ |
| @@ -110,11 +103,18 @@ class Command(object): | |||
| 110 | except KeyError: | 103 | except KeyError: |
| 111 | oldpath = path | 104 | oldpath = path |
| 112 | path = os.path.dirname(path) | 105 | path = os.path.dirname(path) |
| 106 | else: | ||
| 107 | try: | ||
| 108 | project = by_path[path] | ||
| 109 | except KeyError: | ||
| 110 | pass | ||
| 113 | 111 | ||
| 114 | if not project: | 112 | if not project: |
| 115 | raise NoSuchProjectError(arg) | 113 | raise NoSuchProjectError(arg) |
| 116 | if not missing_ok and not project.Exists: | 114 | if not missing_ok and not project.Exists: |
| 117 | raise NoSuchProjectError(arg) | 115 | raise NoSuchProjectError(arg) |
| 116 | if not project.MatchesGroups(groups): | ||
| 117 | raise InvalidProjectGroupsError(arg) | ||
| 118 | 118 | ||
| 119 | result.append(project) | 119 | result.append(project) |
| 120 | 120 | ||
