diff options
| author | Mike Frysinger <vapier@google.com> | 2020-02-29 02:56:32 -0500 |
|---|---|---|
| committer | Mike Frysinger <vapier@google.com> | 2020-03-24 05:01:23 +0000 |
| commit | cfc8111f5e04ece139892bb9af4bd63aac2b75f3 (patch) | |
| tree | 3bf1cac8e36d3ae01112b3bf481deb350fce1759 /tests/test_wrapper.py | |
| parent | 587f162033b3d39e394cfb0cd13e5703af913901 (diff) | |
| download | git-repo-cfc8111f5e04ece139892bb9af4bd63aac2b75f3.tar.gz | |
init: allow REPO_REV/--repo-rev to specify commits/tags
While the help/usage suggested that revisions would work, they never
actually did, and just throw confusing errors. Now that we warn if
the checkout isn't tracking a branch, allow people to specify commits
or tags explicitly. Hopefully our nags will be sufficient to keep
most people on the right path.
Bug: https://crbug.com/gerrit/11045
Change-Id: I6ea32c677912185f55ab20faaa23c6c0a4c483b3
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/259492
Tested-by: Mike Frysinger <vapier@google.com>
Reviewed-by: Jonathan Nieder <jrn@google.com>
Diffstat (limited to 'tests/test_wrapper.py')
| -rw-r--r-- | tests/test_wrapper.py | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/tests/test_wrapper.py b/tests/test_wrapper.py index c105a3ce..73c62cc1 100644 --- a/tests/test_wrapper.py +++ b/tests/test_wrapper.py | |||
| @@ -20,6 +20,8 @@ from __future__ import print_function | |||
| 20 | 20 | ||
| 21 | import os | 21 | import os |
| 22 | import re | 22 | import re |
| 23 | import shutil | ||
| 24 | import tempfile | ||
| 23 | import unittest | 25 | import unittest |
| 24 | 26 | ||
| 25 | from pyversion import is_python3 | 27 | from pyversion import is_python3 |
| @@ -241,5 +243,90 @@ class CheckGitVersion(RepoWrapperTestCase): | |||
| 241 | self.wrapper._CheckGitVersion() | 243 | self.wrapper._CheckGitVersion() |
| 242 | 244 | ||
| 243 | 245 | ||
| 246 | class ResolveRepoRev(RepoWrapperTestCase): | ||
| 247 | """Check resolve_repo_rev behavior.""" | ||
| 248 | |||
| 249 | GIT_DIR = None | ||
| 250 | REV_LIST = None | ||
| 251 | |||
| 252 | @classmethod | ||
| 253 | def setUpClass(cls): | ||
| 254 | # Create a repo to operate on, but do it once per-class. | ||
| 255 | cls.GIT_DIR = tempfile.mkdtemp(prefix='repo-rev-tests') | ||
| 256 | run_git = wrapper.Wrapper().run_git | ||
| 257 | |||
| 258 | remote = os.path.join(cls.GIT_DIR, 'remote') | ||
| 259 | os.mkdir(remote) | ||
| 260 | run_git('init', cwd=remote) | ||
| 261 | run_git('commit', '--allow-empty', '-minit', cwd=remote) | ||
| 262 | run_git('branch', 'stable', cwd=remote) | ||
| 263 | run_git('tag', 'v1.0', cwd=remote) | ||
| 264 | run_git('commit', '--allow-empty', '-m2nd commit', cwd=remote) | ||
| 265 | cls.REV_LIST = run_git('rev-list', 'HEAD', cwd=remote).stdout.splitlines() | ||
| 266 | |||
| 267 | run_git('init', cwd=cls.GIT_DIR) | ||
| 268 | run_git('fetch', remote, '+refs/heads/*:refs/remotes/origin/*', cwd=cls.GIT_DIR) | ||
| 269 | |||
| 270 | @classmethod | ||
| 271 | def tearDownClass(cls): | ||
| 272 | if not cls.GIT_DIR: | ||
| 273 | return | ||
| 274 | |||
| 275 | shutil.rmtree(cls.GIT_DIR) | ||
| 276 | |||
| 277 | def test_explicit_branch(self): | ||
| 278 | """Check refs/heads/branch argument.""" | ||
| 279 | rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, 'refs/heads/stable') | ||
| 280 | self.assertEqual('refs/heads/stable', rrev) | ||
| 281 | self.assertEqual(self.REV_LIST[1], lrev) | ||
| 282 | |||
| 283 | with self.assertRaises(wrapper.CloneFailure): | ||
| 284 | self.wrapper.resolve_repo_rev(self.GIT_DIR, 'refs/heads/unknown') | ||
| 285 | |||
| 286 | def test_explicit_tag(self): | ||
| 287 | """Check refs/tags/tag argument.""" | ||
| 288 | rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, 'refs/tags/v1.0') | ||
| 289 | self.assertEqual('refs/tags/v1.0', rrev) | ||
| 290 | self.assertEqual(self.REV_LIST[1], lrev) | ||
| 291 | |||
| 292 | with self.assertRaises(wrapper.CloneFailure): | ||
| 293 | self.wrapper.resolve_repo_rev(self.GIT_DIR, 'refs/tags/unknown') | ||
| 294 | |||
| 295 | def test_branch_name(self): | ||
| 296 | """Check branch argument.""" | ||
| 297 | rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, 'stable') | ||
| 298 | self.assertEqual('refs/heads/stable', rrev) | ||
| 299 | self.assertEqual(self.REV_LIST[1], lrev) | ||
| 300 | |||
| 301 | rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, 'master') | ||
| 302 | self.assertEqual('refs/heads/master', rrev) | ||
| 303 | self.assertEqual(self.REV_LIST[0], lrev) | ||
| 304 | |||
| 305 | def test_tag_name(self): | ||
| 306 | """Check tag argument.""" | ||
| 307 | rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, 'v1.0') | ||
| 308 | self.assertEqual('refs/tags/v1.0', rrev) | ||
| 309 | self.assertEqual(self.REV_LIST[1], lrev) | ||
| 310 | |||
| 311 | def test_full_commit(self): | ||
| 312 | """Check specific commit argument.""" | ||
| 313 | commit = self.REV_LIST[0] | ||
| 314 | rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, commit) | ||
| 315 | self.assertEqual(commit, rrev) | ||
| 316 | self.assertEqual(commit, lrev) | ||
| 317 | |||
| 318 | def test_partial_commit(self): | ||
| 319 | """Check specific (partial) commit argument.""" | ||
| 320 | commit = self.REV_LIST[0][0:20] | ||
| 321 | rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, commit) | ||
| 322 | self.assertEqual(self.REV_LIST[0], rrev) | ||
| 323 | self.assertEqual(self.REV_LIST[0], lrev) | ||
| 324 | |||
| 325 | def test_unknown(self): | ||
| 326 | """Check unknown ref/commit argument.""" | ||
| 327 | with self.assertRaises(wrapper.CloneFailure): | ||
| 328 | self.wrapper.resolve_repo_rev(self.GIT_DIR, 'boooooooya') | ||
| 329 | |||
| 330 | |||
| 244 | if __name__ == '__main__': | 331 | if __name__ == '__main__': |
| 245 | unittest.main() | 332 | unittest.main() |
