diff options
author | Conley Owens <cco3@android.com> | 2012-08-13 13:11:18 -0700 |
---|---|---|
committer | gerrit code review <noreply-gerritcodereview@google.com> | 2012-09-05 11:46:48 -0700 |
commit | bb1b5f5f863fca0e85764f5b35c117f5724d15c0 (patch) | |
tree | 0b6b8d0d6d027f2d0e0dd6fabdd4eafc6c919026 | |
parent | e2126652a3a1e08724a54091793bb29a79d31014 (diff) | |
download | git-repo-bb1b5f5f863fca0e85764f5b35c117f5724d15c0.tar.gz |
Allow projects to be specified as notdefault
Instead of every group being in the group "default", every project
is now in the group "all". A group that should not be downloaded
by default may be added to the group "notdefault".
This allows all group names to be positive (instead of removing groups
directly in the manifest with -default) and offers a clear way of
selecting every project (--groups all).
Change-Id: I99cd70309adb1f8460db3bbc6eff46bdcd22256f
-rw-r--r-- | command.py | 2 | ||||
-rw-r--r-- | docs/manifest-format.txt | 7 | ||||
-rw-r--r-- | manifest_xml.py | 4 | ||||
-rw-r--r-- | project.py | 15 | ||||
-rw-r--r-- | subcmds/init.py | 6 |
5 files changed, 18 insertions, 16 deletions
@@ -70,7 +70,7 @@ class Command(object): | |||
70 | 70 | ||
71 | groups = mp.config.GetString('manifest.groups') | 71 | groups = mp.config.GetString('manifest.groups') |
72 | if not groups: | 72 | if not groups: |
73 | groups = 'default,platform-' + platform.system().lower() | 73 | groups = 'all,-notdefault,platform-' + platform.system().lower() |
74 | groups = [x for x in re.split('[,\s]+', groups) if x] | 74 | groups = [x for x in re.split('[,\s]+', groups) if x] |
75 | 75 | ||
76 | if not args: | 76 | if not args: |
diff --git a/docs/manifest-format.txt b/docs/manifest-format.txt index 338e0219..f499868c 100644 --- a/docs/manifest-format.txt +++ b/docs/manifest-format.txt | |||
@@ -184,11 +184,12 @@ the default element is used. | |||
184 | 184 | ||
185 | Attribute `groups`: List of groups to which this project belongs, | 185 | Attribute `groups`: List of groups to which this project belongs, |
186 | whitespace or comma separated. All projects belong to the group | 186 | whitespace or comma separated. All projects belong to the group |
187 | "default", and each project automatically belongs to a group of | 187 | "all", and each project automatically belongs to a group of |
188 | it's name:`name` and path:`path`. E.g. for | 188 | its name:`name` and path:`path`. E.g. for |
189 | <project name="monkeys" path="barrel-of"/>, that project | 189 | <project name="monkeys" path="barrel-of"/>, that project |
190 | definition is implicitly in the following manifest groups: | 190 | definition is implicitly in the following manifest groups: |
191 | default, name:monkeys, and path:barrel-of. | 191 | default, name:monkeys, and path:barrel-of. If you place a project in the |
192 | group "notdefault", it will not be automatically downloaded by repo. | ||
192 | 193 | ||
193 | Element annotation | 194 | Element annotation |
194 | ------------------ | 195 | ------------------ |
diff --git a/manifest_xml.py b/manifest_xml.py index 205e4af7..65b76379 100644 --- a/manifest_xml.py +++ b/manifest_xml.py | |||
@@ -130,7 +130,7 @@ class XmlManifest(object): | |||
130 | 130 | ||
131 | groups = mp.config.GetString('manifest.groups') | 131 | groups = mp.config.GetString('manifest.groups') |
132 | if not groups: | 132 | if not groups: |
133 | groups = 'default' | 133 | groups = 'all' |
134 | groups = [x for x in re.split(r'[,\s]+', groups) if x] | 134 | groups = [x for x in re.split(r'[,\s]+', groups) if x] |
135 | 135 | ||
136 | doc = xml.dom.minidom.Document() | 136 | doc = xml.dom.minidom.Document() |
@@ -211,7 +211,7 @@ class XmlManifest(object): | |||
211 | ce.setAttribute('dest', c.dest) | 211 | ce.setAttribute('dest', c.dest) |
212 | e.appendChild(ce) | 212 | e.appendChild(ce) |
213 | 213 | ||
214 | default_groups = ['default', 'name:%s' % p.name, 'path:%s' % p.relpath] | 214 | default_groups = ['all', 'name:%s' % p.name, 'path:%s' % p.relpath] |
215 | egroups = [g for g in p.groups if g not in default_groups] | 215 | egroups = [g for g in p.groups if g not in default_groups] |
216 | if egroups: | 216 | if egroups: |
217 | e.setAttribute('groups', ','.join(egroups)) | 217 | e.setAttribute('groups', ','.join(egroups)) |
@@ -632,20 +632,21 @@ class Project(object): | |||
632 | """Returns true if the manifest groups specified at init should cause | 632 | """Returns true if the manifest groups specified at init should cause |
633 | this project to be synced. | 633 | this project to be synced. |
634 | Prefixing a manifest group with "-" inverts the meaning of a group. | 634 | Prefixing a manifest group with "-" inverts the meaning of a group. |
635 | All projects are implicitly labelled with "default". | 635 | All projects are implicitly labelled with "all". |
636 | 636 | ||
637 | labels are resolved in order. In the example case of | 637 | labels are resolved in order. In the example case of |
638 | project_groups: "default,group1,group2" | 638 | project_groups: "all,group1,group2" |
639 | manifest_groups: "-group1,group2" | 639 | manifest_groups: "-group1,group2" |
640 | the project will be matched. | 640 | the project will be matched. |
641 | """ | 641 | """ |
642 | if self.groups is None: | 642 | expanded_manifest_groups = manifest_groups or ['all', '-notdefault'] |
643 | return True | 643 | expanded_project_groups = ['all'] + (self.groups or []) |
644 | |||
644 | matched = False | 645 | matched = False |
645 | for group in manifest_groups: | 646 | for group in expanded_manifest_groups: |
646 | if group.startswith('-') and group[1:] in self.groups: | 647 | if group.startswith('-') and group[1:] in expanded_project_groups: |
647 | matched = False | 648 | matched = False |
648 | elif group in self.groups: | 649 | elif group in expanded_project_groups: |
649 | matched = True | 650 | matched = True |
650 | 651 | ||
651 | return matched | 652 | return matched |
diff --git a/subcmds/init.py b/subcmds/init.py index b16f57c4..9a4f7118 100644 --- a/subcmds/init.py +++ b/subcmds/init.py | |||
@@ -90,12 +90,12 @@ to update the working directory files. | |||
90 | dest='depth', | 90 | dest='depth', |
91 | help='create a shallow clone with given depth; see git clone') | 91 | help='create a shallow clone with given depth; see git clone') |
92 | g.add_option('-g', '--groups', | 92 | g.add_option('-g', '--groups', |
93 | dest='groups', default='default', | 93 | dest='groups', default='all,-notdefault', |
94 | help='restrict manifest projects to ones with a specified group', | 94 | help='restrict manifest projects to ones with a specified group', |
95 | metavar='GROUP') | 95 | metavar='GROUP') |
96 | g.add_option('-p', '--platform', | 96 | g.add_option('-p', '--platform', |
97 | dest='platform', default='auto', | 97 | dest='platform', default='auto', |
98 | help='restrict manifest projects to ones with a specified' | 98 | help='restrict manifest projects to ones with a specified ' |
99 | 'platform group [auto|all|none|linux|darwin|...]', | 99 | 'platform group [auto|all|none|linux|darwin|...]', |
100 | metavar='PLATFORM') | 100 | metavar='PLATFORM') |
101 | 101 | ||
@@ -164,7 +164,7 @@ to update the working directory files. | |||
164 | 164 | ||
165 | groups = [x for x in groups if x] | 165 | groups = [x for x in groups if x] |
166 | groupstr = ','.join(groups) | 166 | groupstr = ','.join(groups) |
167 | if opt.platform == 'auto' and groupstr == 'default,platform-' + platform.system().lower(): | 167 | if opt.platform == 'auto' and groupstr == 'all,-notdefault,platform-' + platform.system().lower(): |
168 | groupstr = None | 168 | groupstr = None |
169 | m.config.SetString('manifest.groups', groupstr) | 169 | m.config.SetString('manifest.groups', groupstr) |
170 | 170 | ||