Пример #1
0
 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))
Пример #2
0
    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())
Пример #3
0
    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"))
Пример #4
0
    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())
Пример #5
0
    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(),
            )
Пример #6
0
 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())
Пример #7
0
 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())
Пример #8
0
    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)
Пример #9
0
    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])
Пример #10
0
    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))
Пример #11
0
    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)
Пример #12
0
 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)
Пример #13
0
    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)
Пример #14
0
    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)
Пример #15
0
    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)
Пример #16
0
    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())
Пример #17
0
    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)
Пример #18
0
 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)
Пример #19
0
    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)
Пример #20
0
 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())
Пример #21
0
 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)
Пример #22
0
    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())
Пример #23
0
    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)
Пример #24
0
    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)
Пример #25
0
    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}` не должно существовать",
        )
Пример #26
0
    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())
Пример #27
0
    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)
Пример #28
0
    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,
        )
Пример #29
0
 def test_read_index_when_index_doesnt_exist(self):
     gitdir = repo_create(".")
     entries = read_index(gitdir)
     self.assertEqual(0, len(entries))
     self.assertEqual([], entries)
Пример #30
0
 def test_get_ref(self):
     gitdir = repo_create(".")
     ref = get_ref(gitdir)
     self.assertEqual("refs/heads/master", ref)