summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMike Frysinger <vapier@google.com>2020-02-29 02:56:32 -0500
committerMike Frysinger <vapier@google.com>2020-03-24 05:01:23 +0000
commitcfc8111f5e04ece139892bb9af4bd63aac2b75f3 (patch)
tree3bf1cac8e36d3ae01112b3bf481deb350fce1759 /tests
parent587f162033b3d39e394cfb0cd13e5703af913901 (diff)
downloadgit-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.py87
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
21import os 21import os
22import re 22import re
23import shutil
24import tempfile
23import unittest 25import unittest
24 26
25from pyversion import is_python3 27from pyversion import is_python3
@@ -241,5 +243,90 @@ class CheckGitVersion(RepoWrapperTestCase):
241 self.wrapper._CheckGitVersion() 243 self.wrapper._CheckGitVersion()
242 244
243 245
246class 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
244if __name__ == '__main__': 331if __name__ == '__main__':
245 unittest.main() 332 unittest.main()