def test_cant_create_repo_if_workdir_is_a_file(self): filename = "test" workdir = pathlib.Path(filename) self.fs.create_file(workdir, contents="test") with self.assertRaises(Exception) as ctx: repo.repo_create(workdir) self.assertEqual(f"{filename} is not a directory", str(ctx.exception))
def test_write_tree_subdirs(self): gitdir = repo_create(".") mode100644 = stat.S_IFREG | stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH quote = pathlib.Path("quote.txt") self.fs.create_file(quote, contents="that's what she said", st_mode=mode100644) letters = pathlib.Path("alphabeta") / "letters.txt" self.fs.create_file(letters, contents="abcdefg", st_mode=mode100644) digits = pathlib.Path("numbers") / "digits.txt" self.fs.create_file(digits, contents="1234567890", st_mode=mode100644) update_index(gitdir, [quote, letters, digits], write=True) entries = read_index(gitdir) sha = write_tree(gitdir, entries) self.assertEqual("a9cde03408c68cbb205b038140b4c3a38aa1d01a", sha) alphabeta_tree_sha = "7926bf494dcdb82261e1ca113116610f8d05470b" alphabeta_tree_obj = gitdir / "objects" / alphabeta_tree_sha[: 2] / alphabeta_tree_sha[ 2:] self.assertTrue(alphabeta_tree_obj.exists()) numbers_tree_sha = "32ad3641a773ce34816dece1ce63cc24c8a514d0" numbers_tree_obj = gitdir / "objects" / numbers_tree_sha[: 2] / numbers_tree_sha[ 2:] self.assertTrue(numbers_tree_obj.exists())
def test_checkout(self): gitdir = repo_create(".") author = "Git User <*****@*****.**>" mode100644 = stat.S_IFREG | stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH quote = pathlib.Path("quote.txt") self.fs.create_file(quote, contents="that's what she said", st_mode=mode100644) letters = pathlib.Path("letters.txt") self.fs.create_file(letters, contents="abcdefg", st_mode=mode100644) digits = pathlib.Path("digits.txt") self.fs.create_file(digits, contents="1234567890", st_mode=mode100644) add(gitdir, [quote]) quote_sha = commit(gitdir, "add quote.txt", author) add(gitdir, [letters]) letters_sha = commit(gitdir, "add letters.txt", author) add(gitdir, [digits]) digits_sha = commit(gitdir, "add digits.txt", author) checkout(gitdir, digits_sha) self.assertTrue(self.fs.exists("quote.txt")) self.assertTrue(self.fs.exists("letters.txt")) self.assertTrue(self.fs.exists("digits.txt")) checkout(gitdir, letters_sha) self.assertTrue(self.fs.exists("quote.txt")) self.assertTrue(self.fs.exists("letters.txt")) self.assertFalse(self.fs.exists("digits.txt")) checkout(gitdir, quote_sha) self.assertTrue(self.fs.exists("quote.txt")) self.assertFalse(self.fs.exists("letters.txt")) self.assertFalse(self.fs.exists("digits.txt"))
def test_cat_tree_file(self): gitdir = repo.repo_create(".") mode100644 = stat.S_IFREG | stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH quote = pathlib.Path("quote.txt") self.fs.create_file(quote, contents="that's what she said", st_mode=mode100644) letters = pathlib.Path("alphabeta") / "letters.txt" self.fs.create_file(letters, contents="abcdefg", st_mode=mode100644) digits = pathlib.Path("numbers") / "digits.txt" self.fs.create_file(digits, contents="1234567890", st_mode=mode100644) index.update_index(gitdir, [quote, letters, digits], write=True) entries = index.read_index(gitdir) sha = tree.write_tree(gitdir, entries) self.assertEqual("a9cde03408c68cbb205b038140b4c3a38aa1d01a", sha) expected_output = "\n".join( [ "040000 tree 7926bf494dcdb82261e1ca113116610f8d05470b\talphabeta", "040000 tree 32ad3641a773ce34816dece1ce63cc24c8a514d0\tnumbers", "100644 blob 7e774cf533c51803125d4659f3488bd9dffc41a6\tquote.txt", ] ) with patch("sys.stdout", new=io.StringIO()) as out: objects.cat_file(sha, pretty=True) self.assertEqual(expected_output, out.getvalue().strip())
def test_created_repo_has_the_correct_structure(self): workdir = pathlib.Path(".") gitdir = repo.repo_create(workdir) expected_gitdir = workdir / ".git" self.assertEqual(expected_gitdir, gitdir) self.assertTrue(gitdir.exists()) self.assertTrue((gitdir / "refs" / "heads").exists()) self.assertTrue((gitdir / "refs" / "tags").exists()) self.assertTrue((gitdir / "objects").exists()) head = gitdir / "HEAD" self.assertTrue(head.exists()) with head.open() as f: self.assertEqual("ref: refs/heads/master\n", f.read()) config = gitdir / "config" self.assertTrue(config.exists()) with config.open() as f: self.assertEqual( "[core]\n\trepositoryformatversion = 0\n\tfilemode = true\n\tbare = false\n\tlogallrefupdates = false\n", f.read(), ) description = gitdir / "description" self.assertTrue(description.exists()) with description.open() as f: self.assertEqual( "Unnamed pyvcs repository.\n", f.read(), )
def test_ls_files(self): gitdir = repo_create(".") raw_index = b"DIRC\x00\x00\x00\x02\x00\x00\x00\x03^\xf9\t\x9c\x0b\xf0\xcf\x05^\xf9\t\x9c\x0b\xf0\xcf\x05\x01\x00\x00\x04\x00\x83b\xcb\x00\x00\x81\xa4\x00\x00\x01\xf5\x00\x00\x00\x14\x00\x00\x00\x04W\x16\xcaY\x87\xcb\xf9}k\xb5I \xbe\xa6\xad\xde$-\x87\xe6\x00\x07bar.txt\x00\x00\x00^\xf9\t\xca\x1f\xf0l^^\xf9\t\xca\x1f\xf0l^\x01\x00\x00\x04\x00\x83b\xf6\x00\x00\x81\xa4\x00\x00\x01\xf5\x00\x00\x00\x14\x00\x00\x00\x07\x9f5\x8aJ\xdd\xef\xca\xb2\x94\xb8>B\x82\xbf\xef\x1f\x96%\xa2I\x00\x0fbaz/numbers.txt\x00\x00\x00^\xf9\t\xa18\xd3\xad\xbb^\xf9\t\xa18\xd3\xad\xbb\x01\x00\x00\x04\x00\x83b\xd3\x00\x00\x81\xa4\x00\x00\x01\xf5\x00\x00\x00\x14\x00\x00\x00\x04%|\xc5d,\xb1\xa0T\xf0\x8c\xc8?-\x94>V\xfd>\xbe\x99\x00\x07foo.txt\x00\x00\x00k\xd6q\xa7d\x10\x8e\x80\x93F]\x0c}+\x82\xfb\xc7:\xa8\x11" self.fs.create_file(gitdir / "index", contents=raw_index) expected_output = "bar.txt\nbaz/numbers.txt\nfoo.txt" with patch("sys.stdout", new=io.StringIO()) as out: ls_files(gitdir, details=False) self.assertEqual(expected_output, out.getvalue().strip())
def test_git_dir(self): dir_name = ".pyvcs" os.environ["GIT_DIR"] = dir_name workdir = pathlib.Path(".") actual_gitdir = repo.repo_create(workdir) expected_gitdir = workdir / dir_name self.assertEqual(expected_gitdir, actual_gitdir) self.assertTrue(expected_gitdir.exists())
def test_write_index(self): gitdir = repo_create(".") entries = [ GitIndexEntry( ctime_s=1593379228, ctime_n=200331013, mtime_s=1593379228, mtime_n=200331013, dev=16777220, ino=8610507, mode=33188, uid=501, gid=20, size=4, sha1= b"W\x16\xcaY\x87\xcb\xf9}k\xb5I \xbe\xa6\xad\xde$-\x87\xe6", flags=7, name="bar.txt", ), GitIndexEntry( ctime_s=1593379274, ctime_n=535850078, mtime_s=1593379274, mtime_n=535850078, dev=16777220, ino=8610550, mode=33188, uid=501, gid=20, size=7, sha1= b"\x9f5\x8aJ\xdd\xef\xca\xb2\x94\xb8>B\x82\xbf\xef\x1f\x96%\xa2I", flags=15, name="baz/numbers.txt", ), GitIndexEntry( ctime_s=1593379233, ctime_n=953396667, mtime_s=1593379233, mtime_n=953396667, dev=16777220, ino=8610515, mode=33188, uid=501, gid=20, size=4, sha1=b"%|\xc5d,\xb1\xa0T\xf0\x8c\xc8?-\x94>V\xfd>\xbe\x99", flags=7, name="foo.txt", ), ] write_index(gitdir, entries) index = gitdir / "index" with index.open(mode="rb") as f: index_data = f.read() expected_index_data = b"DIRC\x00\x00\x00\x02\x00\x00\x00\x03^\xf9\t\x9c\x0b\xf0\xcf\x05^\xf9\t\x9c\x0b\xf0\xcf\x05\x01\x00\x00\x04\x00\x83b\xcb\x00\x00\x81\xa4\x00\x00\x01\xf5\x00\x00\x00\x14\x00\x00\x00\x04W\x16\xcaY\x87\xcb\xf9}k\xb5I \xbe\xa6\xad\xde$-\x87\xe6\x00\x07bar.txt\x00\x00\x00^\xf9\t\xca\x1f\xf0l^^\xf9\t\xca\x1f\xf0l^\x01\x00\x00\x04\x00\x83b\xf6\x00\x00\x81\xa4\x00\x00\x01\xf5\x00\x00\x00\x14\x00\x00\x00\x07\x9f5\x8aJ\xdd\xef\xca\xb2\x94\xb8>B\x82\xbf\xef\x1f\x96%\xa2I\x00\x0fbaz/numbers.txt\x00\x00\x00^\xf9\t\xa18\xd3\xad\xbb^\xf9\t\xa18\xd3\xad\xbb\x01\x00\x00\x04\x00\x83b\xd3\x00\x00\x81\xa4\x00\x00\x01\xf5\x00\x00\x00\x14\x00\x00\x00\x04%|\xc5d,\xb1\xa0T\xf0\x8c\xc8?-\x94>V\xfd>\xbe\x99\x00\x07foo.txt\x00\x00\x00k\xd6q\xa7d\x10\x8e\x80\x93F]\x0c}+\x82\xfb\xc7:\xa8\x11" self.assertEqual(expected_index_data, index_data)
def test_read_index(self): gitdir = repo_create(".") raw_index = b"DIRC\x00\x00\x00\x02\x00\x00\x00\x03^\xf9\t\x9c\x0b\xf0\xcf\x05^\xf9\t\x9c\x0b\xf0\xcf\x05\x01\x00\x00\x04\x00\x83b\xcb\x00\x00\x81\xa4\x00\x00\x01\xf5\x00\x00\x00\x14\x00\x00\x00\x04W\x16\xcaY\x87\xcb\xf9}k\xb5I \xbe\xa6\xad\xde$-\x87\xe6\x00\x07bar.txt\x00\x00\x00^\xf9\t\xca\x1f\xf0l^^\xf9\t\xca\x1f\xf0l^\x01\x00\x00\x04\x00\x83b\xf6\x00\x00\x81\xa4\x00\x00\x01\xf5\x00\x00\x00\x14\x00\x00\x00\x07\x9f5\x8aJ\xdd\xef\xca\xb2\x94\xb8>B\x82\xbf\xef\x1f\x96%\xa2I\x00\x0fbaz/numbers.txt\x00\x00\x00^\xf9\t\xa18\xd3\xad\xbb^\xf9\t\xa18\xd3\xad\xbb\x01\x00\x00\x04\x00\x83b\xd3\x00\x00\x81\xa4\x00\x00\x01\xf5\x00\x00\x00\x14\x00\x00\x00\x04%|\xc5d,\xb1\xa0T\xf0\x8c\xc8?-\x94>V\xfd>\xbe\x99\x00\x07foo.txt\x00\x00\x00k\xd6q\xa7d\x10\x8e\x80\x93F]\x0c}+\x82\xfb\xc7:\xa8\x11" self.fs.create_file(gitdir / "index", contents=raw_index) entries = read_index(gitdir) self.assertEqual(3, len(entries)) # TODO: Add sha self.assertEqual(["bar.txt", "baz/numbers.txt", "foo.txt"], [e.name for e in entries])
def test_resolve_object_that_does_not_exists(self): gitdir = repo.repo_create(".") blob_path = gitdir / "objects" / "7e" / "774cf533c51803125d4659f3488bd9dffc41a1" self.fs.create_file(file_path=blob_path) obj_name = "7e775" with self.assertRaises(Exception) as ctx: objects.resolve_object(obj_name, gitdir) self.assertEqual(f"Not a valid object name {obj_name}", str(ctx.exception))
def test_resolve_object(self): gitdir = repo.repo_create(".") blob_path = gitdir / "objects" / "7e" / "774cf533c51803125d4659f3488bd9dffc41a6" self.fs.create_file(file_path=blob_path) objs = objects.resolve_object("7e774", gitdir) self.assertEqual(1, len(objs)) [sha] = objs self.assertEqual("7e774cf533c51803125d4659f3488bd9dffc41a6", sha)
def test_read_object(self): gitdir = repo.repo_create(".") blob_path = gitdir / "objects" / "7e" / "774cf533c51803125d4659f3488bd9dffc41a6" blob_contents = ( b"x\x9cK\xca\xc9OR02`(\xc9H,Q/V(\x07R\n\xc5\x19\xa9\n\xc5\x89\x99)\x00\x83:\tb" ) self.fs.create_file(file_path=blob_path, contents=blob_contents) fmt, data = objects.read_object("7e774cf533c51803125d4659f3488bd9dffc41a6", gitdir) self.assertEqual("blob", fmt) self.assertEqual(b"that's what she said", data)
def test_hash_object_twice(self): _ = repo.repo_create(".") contents = "that's what she said" data = contents.encode() expected_sha = "7e774cf533c51803125d4659f3488bd9dffc41a6" sha = objects.hash_object(data, fmt="blob", write=True) self.assertEqual(expected_sha, sha) sha = objects.hash_object(data, fmt="blob", write=True) self.assertEqual(expected_sha, sha)
def test_is_detached(self): gitdir = repo_create(".") detached = is_detached(gitdir) self.assertFalse(detached) head = gitdir / "HEAD" with head.open(mode="w") as f: f.write("d6ae59694dfec74d7f5ca87608f31c884dc9b0f9") detached = is_detached(gitdir) self.assertTrue(detached)
def test_resolve_head(self): gitdir = repo_create(".") data = resolve_head(gitdir) self.assertIsNone(data) master_sha = "d6ae59694dfec74d7f5ca87608f31c884dc9b0f9" master = gitdir / "refs" / "heads" / "master" self.fs.create_file(master, contents=master_sha) data = resolve_head(gitdir) self.assertEqual(master_sha, data)
def test_cat_pretty_blob_file(self): gitdir = repo.repo_create(".") blob_path = gitdir / "objects" / "7e" / "774cf533c51803125d4659f3488bd9dffc41a6" blob_contents = ( b"x\x9cK\xca\xc9OR02`(\xc9H,Q/V(\x07R\n\xc5\x19\xa9\n\xc5\x89\x99)\x00\x83:\tb" ) self.fs.create_file(file_path=blob_path, contents=blob_contents) with patch("sys.stdout", new=io.StringIO()) as out: objects.cat_file("7e774cf533c51803125d4659f3488bd9dffc41a6", pretty=True) self.assertEqual("that's what she said", out.getvalue().strip())
def test_update_ref(self): gitdir = repo_create(".") master_sha = "d6ae59694dfec74d7f5ca87608f31c884dc9b0f9" update_ref(gitdir, "refs/heads/master", master_sha) master = gitdir / "refs" / "heads" / "master" with master.open() as f: sha = f.read().strip() self.assertEqual(master_sha, sha)
def test_commit_tree(self, localtime): gitdir = repo_create(".") tree_sha = "dc6b8ea09fb7573a335c5fb953b49b85bb6ca985" author = "Dmitriy Sorokin <*****@*****.**>" message = "initial commit" commit_sha = commit_tree(gitdir, tree_sha, message, parent=None, author=author) self.assertEqual("f60952d53906d8b2e6f8567762f86fbe7ca4ac65", commit_sha)
def test_ref_resolve(self): gitdir = repo_create(".") master_sha = "d6ae59694dfec74d7f5ca87608f31c884dc9b0f9" master = gitdir / "refs" / "heads" / "master" self.fs.create_file(master, contents=master_sha) data = ref_resolve(gitdir, "HEAD") self.assertEqual(master_sha, data) ref = "refs/heads/master" data = ref_resolve(gitdir, ref) self.assertEqual(master_sha, data)
def test_ls_files_with_details(self): gitdir = repo_create(".") raw_index = b"DIRC\x00\x00\x00\x02\x00\x00\x00\x03^\xf9\t\x9c\x0b\xf0\xcf\x05^\xf9\t\x9c\x0b\xf0\xcf\x05\x01\x00\x00\x04\x00\x83b\xcb\x00\x00\x81\xa4\x00\x00\x01\xf5\x00\x00\x00\x14\x00\x00\x00\x04W\x16\xcaY\x87\xcb\xf9}k\xb5I \xbe\xa6\xad\xde$-\x87\xe6\x00\x07bar.txt\x00\x00\x00^\xf9\t\xca\x1f\xf0l^^\xf9\t\xca\x1f\xf0l^\x01\x00\x00\x04\x00\x83b\xf6\x00\x00\x81\xa4\x00\x00\x01\xf5\x00\x00\x00\x14\x00\x00\x00\x07\x9f5\x8aJ\xdd\xef\xca\xb2\x94\xb8>B\x82\xbf\xef\x1f\x96%\xa2I\x00\x0fbaz/numbers.txt\x00\x00\x00^\xf9\t\xa18\xd3\xad\xbb^\xf9\t\xa18\xd3\xad\xbb\x01\x00\x00\x04\x00\x83b\xd3\x00\x00\x81\xa4\x00\x00\x01\xf5\x00\x00\x00\x14\x00\x00\x00\x04%|\xc5d,\xb1\xa0T\xf0\x8c\xc8?-\x94>V\xfd>\xbe\x99\x00\x07foo.txt\x00\x00\x00k\xd6q\xa7d\x10\x8e\x80\x93F]\x0c}+\x82\xfb\xc7:\xa8\x11" self.fs.create_file(gitdir / "index", contents=raw_index) expected_output = "\n".join([ "100644 5716ca5987cbf97d6bb54920bea6adde242d87e6 0 bar.txt", "100644 9f358a4addefcab294b83e4282bfef1f9625a249 0 baz/numbers.txt", "100644 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 0 foo.txt", ]) with patch("sys.stdout", new=io.StringIO()) as out: ls_files(gitdir, details=True) self.assertEqual(expected_output, out.getvalue().strip())
def test_write_tree(self): gitdir = repo_create(".") animals = pathlib.Path("animals.txt") mode100644 = stat.S_IFREG | stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH self.fs.create_file( animals, contents="Big blue basilisks bawl in the basement\n", st_mode=mode100644, ) update_index(gitdir, [animals], write=True) entries = read_index(gitdir) sha = write_tree(gitdir, entries) self.assertEqual("dc6b8ea09fb7573a335c5fb953b49b85bb6ca985", sha)
def test_update_index(self): gitdir = repo_create(".") index = gitdir / "index" quote = pathlib.Path("quote.txt") self.fs.create_file(quote, contents="that's what she said") self.assertFalse(index.exists()) update_index(gitdir, [quote]) self.assertTrue(index.exists()) entries = read_index(gitdir) self.assertEqual(1, len(entries)) expected_sha = "7e774cf533c51803125d4659f3488bd9dffc41a6" obj_path = gitdir / "objects" / expected_sha[:2] / expected_sha[2:] self.assertTrue(obj_path.exists())
def test_compute_object_id_and_create_a_blob(self): gitdir = repo.repo_create(".") contents = "that's what she said" data = contents.encode() sha = objects.hash_object(data, fmt="blob", write=True) expected_sha = "7e774cf533c51803125d4659f3488bd9dffc41a6" self.assertEqual(expected_sha, sha) obj_path = gitdir / "objects" / "7e" / "774cf533c51803125d4659f3488bd9dffc41a6" self.assertTrue(obj_path.exists()) with obj_path.open(mode="rb") as f: content = zlib.decompress(f.read()) self.assertEqual(b"blob 20\x00that's what she said", content)
def test_update_index_many(self): gitdir = repo_create(".") index = gitdir / "index" letters = pathlib.Path("letters.txt") self.fs.create_file(letters, contents="abcdefg") digits = pathlib.Path("digits.txt") self.fs.create_file(digits, contents="1234567890") self.assertFalse(index.exists()) update_index(gitdir, [letters, digits]) self.assertTrue(index.exists()) entries = read_index(gitdir) self.assertEqual(2, len(entries)) names = [e.name for e in entries] self.assertEqual(["digits.txt", "letters.txt"], names)
def test_checkout_dirs_are_deleted(self): gitdir = repo_create(".") author = "Git User <*****@*****.**>" mode100644 = stat.S_IFREG | stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH quote = pathlib.Path("quote.txt") self.fs.create_file(quote, contents="that's what she said", st_mode=mode100644) add(gitdir, [quote]) quote_sha = commit(gitdir, "add quote.txt", author) letters = pathlib.Path("alphabeta") / "letters.txt" self.fs.create_file(letters, contents="abcdefg", st_mode=mode100644) add(gitdir, [letters]) letters_sha = commit(gitdir, "add letters.txt", author) digits = pathlib.Path("numbers") / "digits.txt" self.fs.create_file(digits, contents="1234567890", st_mode=mode100644) add(gitdir, [digits]) digits_sha = commit(gitdir, "add digits.txt", author) checkout(gitdir, digits_sha) self.assertTrue(self.fs.exists("quote.txt")) self.assertTrue(self.fs.exists(letters.absolute())) self.assertTrue(self.fs.exists(digits.absolute())) checkout(gitdir, letters_sha) self.assertTrue(self.fs.exists("quote.txt")) self.assertTrue(self.fs.exists(letters.parent.absolute())) self.assertFalse( self.fs.exists(digits.parent.absolute()), msg=f"Каталога `{digits.parent}` не должно существовать", ) self.assertTrue(self.fs.exists(letters.absolute())) checkout(gitdir, quote_sha) self.assertTrue(self.fs.exists("quote.txt")) self.assertFalse( self.fs.exists(letters.parent.absolute()), msg=f"Каталога `{letters.parent}` не должно существовать", ) self.assertFalse( self.fs.exists(digits.parent.absolute()), msg=f"Каталога `{digits.parent}` не должно существовать", )
def test_cat_commit_file(self): gitdir = repo.repo_create(".") obj = b"x\x9c\x95\x8dA\n\x021\x0c\x00=\xf7\x15\xb9\x0b\x92\x92ljA\xc4\x83\x1fI\xdb,\x16\xec.\x94.\xb8\xbf\x17\x14\x1f\xe0m.3\x93\xd7\xd6\xea\x00\x1f\xe80\xba\x19`&d\x942G5\x9d8\x85\xb9H\xe23\t\xb2\x0f6EMASL\xc9\xe96\x1ek\x87\xbb5[F\xdd\xe1\xf2\xa3\xdb\xaeK\xb1\xd7\xa9oW\xf0\x82\xc4\xc8$\x02G$D\x97?\xbba\x7f\x8b\xae.uT}\xc2\xb7\xe0\xde\xa159\x17" sha = "faa73127e7a7b97faf08c147e69130a424c5ddbb" obj_path = gitdir / "objects" / sha[:2] / sha[2:] self.fs.create_file(obj_path, contents=obj) expected_output = "\n".join([ "tree 0c30406df9aea54b7fd6b48360417e59ab7ab9bb", "author Dementiy <*****@*****.**> 1603404366 +0300", "committer Dementiy <*****@*****.**> 1603404366 +0300", "", "initial commit", ]) with patch("sys.stdout", new=io.StringIO()) as out: objects.cat_file(sha, pretty=True) self.assertEqual(expected_output, out.getvalue().strip())
def test_update_index_subdirs(self): gitdir = repo_create(".") index = gitdir / "index" quote = pathlib.Path("quote.txt") self.fs.create_file(quote, contents="that's what she said") letters = pathlib.Path("alphabeta") / "letters.txt" self.fs.create_file(letters, contents="abcdefg") digits = pathlib.Path("numbers") / "digits.txt" self.fs.create_file(digits, contents="1234567890") self.assertFalse(index.exists()) update_index(gitdir, [quote, letters, digits]) self.assertTrue(index.exists()) entries = read_index(gitdir) self.assertEqual(3, len(entries)) names = [e.name for e in entries] self.assertEqual(["alphabeta/letters.txt", "numbers/digits.txt", "quote.txt"], names)
def test_resolve_many_objects(self): gitdir = repo.repo_create(".") blob_path = gitdir / "objects" / "7e" / "774cf533c51803125d4659f3488bd9dffc41a1" self.fs.create_file(file_path=blob_path) blob_path = gitdir / "objects" / "7e" / "774cf533c51803125d4659f3488bd9dffc41a2" self.fs.create_file(file_path=blob_path) blob_path = gitdir / "objects" / "7e" / "774cf533c51803125d4659f3488bd9dffc41a3" self.fs.create_file(file_path=blob_path) objs = objects.resolve_object("7e774", gitdir) self.assertEqual(3, len(objs)) self.assertEqual( [ "7e774cf533c51803125d4659f3488bd9dffc41a1", "7e774cf533c51803125d4659f3488bd9dffc41a2", "7e774cf533c51803125d4659f3488bd9dffc41a3", ], objs, )
def test_read_index_when_index_doesnt_exist(self): gitdir = repo_create(".") entries = read_index(gitdir) self.assertEqual(0, len(entries)) self.assertEqual([], entries)
def test_get_ref(self): gitdir = repo_create(".") ref = get_ref(gitdir) self.assertEqual("refs/heads/master", ref)