summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoanna Wang <jojwang@google.com>2022-12-02 09:47:29 -0500
committerJoanna Wang <jojwang@google.com>2022-12-02 14:57:56 +0000
commitea5239ddd930624532cd1d0edccc0f3e74bec73f (patch)
treee0883d5a6e8986ee712c4440c5ed238e00ba652f
parent1b8714937c20d43f98bd9ffe498a49fcfb086141 (diff)
downloadgit-repo-ea5239ddd930624532cd1d0edccc0f3e74bec73f.tar.gz
Fix ManifestProject.partial_clone_exclude property.
Bug: b/256358360 Change-Id: Ic6e3a049aa38827123d0324c8b14157562c5986e Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/353574 Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Joanna Wang <jojwang@google.com> Reviewed-by: Josip Sokcevic <sokcevic@google.com>
-rw-r--r--git_config.py14
-rw-r--r--project.py2
-rw-r--r--tests/test_project.py79
3 files changed, 90 insertions, 5 deletions
diff --git a/git_config.py b/git_config.py
index 94378e9a..af1a1015 100644
--- a/git_config.py
+++ b/git_config.py
@@ -22,6 +22,7 @@ import re
22import ssl 22import ssl
23import subprocess 23import subprocess
24import sys 24import sys
25from typing import Union
25import urllib.error 26import urllib.error
26import urllib.request 27import urllib.request
27 28
@@ -117,7 +118,7 @@ class GitConfig(object):
117 return self.defaults.Has(name, include_defaults=True) 118 return self.defaults.Has(name, include_defaults=True)
118 return False 119 return False
119 120
120 def GetInt(self, name): 121 def GetInt(self, name: str) -> Union[int, None]:
121 """Returns an integer from the configuration file. 122 """Returns an integer from the configuration file.
122 123
123 This follows the git config syntax. 124 This follows the git config syntax.
@@ -126,7 +127,7 @@ class GitConfig(object):
126 name: The key to lookup. 127 name: The key to lookup.
127 128
128 Returns: 129 Returns:
129 None if the value was not defined, or is not a boolean. 130 None if the value was not defined, or is not an int.
130 Otherwise, the number itself. 131 Otherwise, the number itself.
131 """ 132 """
132 v = self.GetString(name) 133 v = self.GetString(name)
@@ -152,6 +153,9 @@ class GitConfig(object):
152 try: 153 try:
153 return int(v, base=base) * mult 154 return int(v, base=base) * mult
154 except ValueError: 155 except ValueError:
156 print(
157 f"warning: expected {name} to represent an integer, got {v} instead",
158 file=sys.stderr)
155 return None 159 return None
156 160
157 def DumpConfigDict(self): 161 def DumpConfigDict(self):
@@ -169,7 +173,7 @@ class GitConfig(object):
169 config_dict[key] = self.GetString(key) 173 config_dict[key] = self.GetString(key)
170 return config_dict 174 return config_dict
171 175
172 def GetBoolean(self, name): 176 def GetBoolean(self, name: str) -> Union[str, None]:
173 """Returns a boolean from the configuration file. 177 """Returns a boolean from the configuration file.
174 None : The value was not defined, or is not a boolean. 178 None : The value was not defined, or is not a boolean.
175 True : The value was set to true or yes. 179 True : The value was set to true or yes.
@@ -183,6 +187,8 @@ class GitConfig(object):
183 return True 187 return True
184 if v in ('false', 'no'): 188 if v in ('false', 'no'):
185 return False 189 return False
190 print(f"warning: expected {name} to represent a boolean, got {v} instead",
191 file=sys.stderr)
186 return None 192 return None
187 193
188 def SetBoolean(self, name, value): 194 def SetBoolean(self, name, value):
@@ -191,7 +197,7 @@ class GitConfig(object):
191 value = 'true' if value else 'false' 197 value = 'true' if value else 'false'
192 self.SetString(name, value) 198 self.SetString(name, value)
193 199
194 def GetString(self, name, all_keys=False): 200 def GetString(self, name: str, all_keys: bool = False) -> Union[str, None]:
195 """Get the first value for a key, or None if it is not defined. 201 """Get the first value for a key, or None if it is not defined.
196 202
197 This configuration file is used first, if the key is not 203 This configuration file is used first, if the key is not
diff --git a/project.py b/project.py
index 9d7476b4..619cdfd1 100644
--- a/project.py
+++ b/project.py
@@ -3505,7 +3505,7 @@ class ManifestProject(MetaProject):
3505 @property 3505 @property
3506 def partial_clone_exclude(self): 3506 def partial_clone_exclude(self):
3507 """Partial clone exclude string""" 3507 """Partial clone exclude string"""
3508 return self.config.GetBoolean('repo.partialcloneexclude') 3508 return self.config.GetString('repo.partialcloneexclude')
3509 3509
3510 @property 3510 @property
3511 def manifest_platform(self): 3511 def manifest_platform(self):
diff --git a/tests/test_project.py b/tests/test_project.py
index 47018d1c..7d07b705 100644
--- a/tests/test_project.py
+++ b/tests/test_project.py
@@ -22,6 +22,7 @@ import tempfile
22import unittest 22import unittest
23 23
24import error 24import error
25import manifest_xml
25import git_command 26import git_command
26import git_config 27import git_config
27import platform_utils 28import platform_utils
@@ -411,3 +412,81 @@ class MigrateWorkTreeTests(unittest.TestCase):
411 self.assertTrue((dotgit / name).is_file()) 412 self.assertTrue((dotgit / name).is_file())
412 for name in self._SYMLINKS: 413 for name in self._SYMLINKS:
413 self.assertTrue((dotgit / name).is_symlink()) 414 self.assertTrue((dotgit / name).is_symlink())
415
416
417class ManifestPropertiesFetchedCorrectly(unittest.TestCase):
418 """Ensure properties are fetched properly."""
419
420 def setUpManifest(self, tempdir):
421 repo_trace._TRACE_FILE = os.path.join(tempdir, 'TRACE_FILE_from_test')
422
423 repodir = os.path.join(tempdir, '.repo')
424 manifest_dir = os.path.join(repodir, 'manifests')
425 manifest_file = os.path.join(
426 repodir, manifest_xml.MANIFEST_FILE_NAME)
427 local_manifest_dir = os.path.join(
428 repodir, manifest_xml.LOCAL_MANIFESTS_DIR_NAME)
429 os.mkdir(repodir)
430 os.mkdir(manifest_dir)
431 manifest = manifest_xml.XmlManifest(repodir, manifest_file)
432
433 return project.ManifestProject(
434 manifest, 'test/manifest', os.path.join(tempdir, '.git'), tempdir)
435
436 def test_manifest_config_properties(self):
437 """Test we are fetching the manifest config properties correctly."""
438
439 with TempGitTree() as tempdir:
440 fakeproj = self.setUpManifest(tempdir)
441
442 # Set property using the expected Set method, then ensure
443 # the porperty functions are using the correct Get methods.
444 fakeproj.config.SetString(
445 'manifest.standalone', 'https://chicken/manifest.git')
446 self.assertEqual(
447 fakeproj.standalone_manifest_url, 'https://chicken/manifest.git')
448
449 fakeproj.config.SetString('manifest.groups', 'test-group, admin-group')
450 self.assertEqual(fakeproj.manifest_groups, 'test-group, admin-group')
451
452 fakeproj.config.SetString('repo.reference', 'mirror/ref')
453 self.assertEqual(fakeproj.reference, 'mirror/ref')
454
455 fakeproj.config.SetBoolean('repo.dissociate', False)
456 self.assertFalse(fakeproj.dissociate)
457
458 fakeproj.config.SetBoolean('repo.archive', False)
459 self.assertFalse(fakeproj.archive)
460
461 fakeproj.config.SetBoolean('repo.mirror', False)
462 self.assertFalse(fakeproj.mirror)
463
464 fakeproj.config.SetBoolean('repo.worktree', False)
465 self.assertFalse(fakeproj.use_worktree)
466
467 fakeproj.config.SetBoolean('repo.clonebundle', False)
468 self.assertFalse(fakeproj.clone_bundle)
469
470 fakeproj.config.SetBoolean('repo.submodules', False)
471 self.assertFalse(fakeproj.submodules)
472
473 fakeproj.config.SetBoolean('repo.git-lfs', False)
474 self.assertFalse(fakeproj.git_lfs)
475
476 fakeproj.config.SetBoolean('repo.superproject', False)
477 self.assertFalse(fakeproj.use_superproject)
478
479 fakeproj.config.SetBoolean('repo.partialclone', False)
480 self.assertFalse(fakeproj.partial_clone)
481
482 fakeproj.config.SetString('repo.depth', '48')
483 self.assertEquals(fakeproj.depth, '48')
484
485 fakeproj.config.SetString('repo.clonefilter', 'blob:limit=10M')
486 self.assertEquals(fakeproj.clone_filter, 'blob:limit=10M')
487
488 fakeproj.config.SetString('repo.partialcloneexclude', 'third_party/big_repo')
489 self.assertEquals(fakeproj.partial_clone_exclude, 'third_party/big_repo')
490
491 fakeproj.config.SetString('manifest.platform', 'auto')
492 self.assertEquals(fakeproj.manifest_platform, 'auto')