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 | |
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')
-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() |