コード例 #1
0
ファイル: porcelain.py プロジェクト: ksenia312/PyVCS
def checkout(gitdir: pathlib.Path, obj_name: str) -> None:
    # PUT YOUR CODE HERE
    update_ref(gitdir, "HEAD", obj_name)

    hash = commit_parse(read_object(obj_name, gitdir)[1])
    files = find_tree_files(hash, gitdir)

    index = read_index(gitdir)
    names = []
    for i in index:
        names.append(i.name)

    update_index(gitdir, [pathlib.Path(i[1]) for i in files], write=True)

    for i in names:
        first = i.split("/")[0]
        if pathlib.Path(first).is_dir():
            shutil.rmtree(first)
        else:
            if pathlib.Path(first).exists():
                os.remove(first)

    for i in files:
        isFound = i[1].find("/")
        if isFound != -1:
            elem1 = os.path.split(i[1])[0]
            if pathlib.Path(elem1).exists() == False:
                os.makedirs(elem1)
        with open(i[1], "wb") as f:
            f.write(read_object(i[0], gitdir)[1])
コード例 #2
0
ファイル: test_tree.py プロジェクト: ssonyab/cs102
    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_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())
コード例 #4
0
ファイル: porcelain.py プロジェクト: Val-Potitova/pybook2
def add(gitdir: pathlib.Path, paths: tp.List[pathlib.Path]) -> None:
    # PUT YOUR CODE HERE
    update_index(gitdir,
                 list(filter(lambda x: x.is_file(), paths)),
                 write=True)
    for path in filter(lambda x: x.is_dir(), paths):
        add(gitdir, list(path.glob("*")))
コード例 #5
0
def add(gitdir: pathlib.Path, paths: tp.List[pathlib.Path]) -> None:
    # PUT YOUR CODE HERE
    for path in paths:
        if path.is_file():
            update_index(gitdir, [path], write=True)
        if path.is_dir():
            add(gitdir, list(path.glob("*")))
コード例 #6
0
ファイル: test_tree.py プロジェクト: ssonyab/cs102
 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)
コード例 #7
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())
コード例 #8
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)
コード例 #9
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)
コード例 #10
0
ファイル: porcelain.py プロジェクト: AsonovNikolay/pythonitmo
def checkout(gitdir: pathlib.Path, obj_name: str) -> None:
    update_ref(gitdir, "HEAD", obj_name)
    index_names = [entry.name for entry in read_index(gitdir)]
    _, commit_data = read_object(obj_name, gitdir)
    tree_hash = commit_parse(commit_data)
    files = find_tree_files(tree_hash, gitdir)
    to_be_updated = [pathlib.Path(i[1]) for i in files]
    update_index(gitdir, to_be_updated, write=True)
    for name in index_names:
        nodes = name.split("\\")
        if pathlib.Path(nodes[0]).is_dir():
            shutil.rmtree(nodes[0])
        else:
            if pathlib.Path(nodes[0]).exists():
                os.remove(nodes[0])
    for sha, name in files:
        if name.find("\\") != -1:
            prefix, _ = os.path.split(name)
            if not pathlib.Path(prefix).exists():
                os.makedirs(prefix)
        _, content = read_object(sha, gitdir)
        with open(name, "wb") as file_obj:
            file_obj.write(content)
コード例 #11
0
def add(gitdir: pathlib.Path, paths: tp.List[pathlib.Path]) -> None:
    for path in paths:
        if path.is_dir():
            add(gitdir, list(path.glob("*")))
        else:
            update_index(gitdir, [path], write=True)
コード例 #12
0
ファイル: porcelain.py プロジェクト: AsonovNikolay/pythonitmo
def add(gitdir: pathlib.Path, paths: tp.List[pathlib.Path]) -> None:
    update_index(gitdir, paths, write=True)
コード例 #13
0
def add(gitdir: pathlib.Path, paths: tp.List[pathlib.Path]) -> None:
    # PUT YOUR CODE HERE
    update_index(gitdir, path)
コード例 #14
0
def add(gitdir: pathlib.Path, paths: tp.List[pathlib.Path]) -> None:
    for path in paths:
        if os.path.isfile(path):
            update_index(gitdir, [path], write=True)
        if os.path.isdir(path):
            add(gitdir, list(path.glob("*")))
コード例 #15
0
def cmd_update_index(args: argparse.Namespace) -> None:
    gitdir = repo_find()
    update_index(gitdir, args.paths, write=args.add)