def test_remove_file(self): for tmp_dir, repo, pathfunc in parameterize(): for filename in ["test.txt", "dir1/dir2/test.txt"]: dirname = os.path.dirname(filename) if dirname and not os.path.exists(dirname): os.makedirs(dirname) filename = os.path.join(tmp_dir, filename) with io.open( filename, "w", encoding="utf-8", newline="\n" ) as fh: fh.write("") if repo is not None: repo.index.add([filename]) self.assertTrue(os.path.exists(filename)) if dirname: self.assertTrue(os.path.exists(dirname)) self.assertTrue(os.path.exists(os.path.dirname(dirname))) if repo is not None: self.assertTrue( list(repo.index.iter_blobs(BlobFilter(filename))) ) fio.remove_file(pathfunc(filename)) self.assertFalse(os.path.exists(filename)) if dirname: self.assertFalse(os.path.exists(dirname)) self.assertFalse(os.path.exists(os.path.dirname(dirname))) if repo is not None: self.assertFalse( list(repo.index.iter_blobs(BlobFilter(filename))) )
def test_set_exe_file(self): perms = [stat.S_IXUSR, stat.S_IXGRP, stat.S_IXOTH] set_mode = functools.reduce(op.or_, perms) for set_exe in [True, False]: for tmp_dir, repo, pathfunc in parameterize(): filename = "test.txt" filename = os.path.join(tmp_dir, filename) with io.open( filename, "w", encoding="utf-8", newline="\n" ) as fh: fh.write("") if repo is not None: repo.index.add([filename]) fio.set_exe_file(pathfunc(filename), set_exe) file_mode = os.stat(filename).st_mode self.assertEqual(file_mode & set_mode, int(set_exe) * set_mode) if repo is not None: blob = next(repo.index.iter_blobs(BlobFilter(filename)))[1] self.assertEqual( blob.mode & set_mode, int(set_exe) * set_mode )
def test_copy_file(self): for tmp_dir, repo, pathfunc in parameterize(): filename1 = "test1.txt" filename2 = "test2.txt" filename1 = os.path.join(tmp_dir, filename1) filename2 = os.path.join(tmp_dir, filename2) write_text = "text" with io.open(filename1, "w", encoding="utf-8", newline="\n") as fh: fh.write(write_text) self.assertTrue(os.path.exists(filename1)) self.assertFalse(os.path.exists(filename2)) if repo is not None: self.assertFalse( list(repo.index.iter_blobs(BlobFilter(filename2))) ) fio.copy_file(pathfunc(filename1), pathfunc(filename2)) self.assertTrue(os.path.exists(filename1)) self.assertTrue(os.path.exists(filename2)) if repo is not None: self.assertTrue( list(repo.index.iter_blobs(BlobFilter(filename2))) ) read_text = "" with io.open(filename2, "r", encoding="utf-8") as fh: read_text = fh.read() self.assertEqual(write_text, read_text) if repo is not None: blob = next(repo.index.iter_blobs(BlobFilter(filename2)))[1] read_text = blob.data_stream[3].read().decode("utf-8") self.assertEqual(write_text, read_text)
def get_file_blob(repo, filename): from git.index.typ import BlobFilter idx = repo.index repo_dir = os.path.abspath(repo.working_dir) filename = os.path.abspath(filename) filename = os.path.relpath(filename, repo_dir) filename = os.path.normpath(filename) blob = next(idx.iter_blobs(BlobFilter(filename)))[1] return blob
def test_touch_file(self): for tmp_dir, repo, pathfunc in parameterize(): for filename in ["test.txt", "dir1/dir2/test.txt"]: filename = os.path.join(tmp_dir, filename) fio.touch_file(pathfunc(filename)) read_text = "" with io.open(filename, "r", encoding="utf-8") as fh: read_text = fh.read() self.assertEqual("", read_text) if repo is not None: blob = next(repo.index.iter_blobs(BlobFilter(filename)))[1] read_text = blob.data_stream[3].read().decode("utf-8") self.assertEqual("", read_text)