def copytree(src, dst, ignore=(), root_dst=None): if root_dst is None: root_dst = dst for item in os.listdir(src): s = os.path.join(src, item) d = os.path.join(dst, item) if os.path.relpath(d, root_dst) in ignore: continue elif os.path.isdir(s): if not os.path.exists(d): os.makedirs(d) copytree(s, d, ignore, root_dst=root_dst) else: copy_file(s, d)
def copytree(src, dst, ignore=(), root_dst=None): """This emulates shutil.copytree, but does so with our git file tracking, so that the new files are added to the repo""" if root_dst is None: root_dst = dst for item in os.listdir(src): s = os.path.join(src, item) d = os.path.join(dst, item) if os.path.relpath(d, root_dst) in ignore: continue elif os.path.isdir(s): if not os.path.exists(d): os.makedirs(d) copytree(s, d, ignore, root_dst=root_dst) else: copy_file(s, d)
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 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") 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)