def test_write(self): a = self.repo.get_root()['a.txt'] a.inode['mode'] = 0100755 a.inode['uid'] = 1000 repo2 = GitStorage(self.repo_path) a_2 = repo2.get_root()['a.txt'] self.assertEqual(a_2.inode['mode'], 0100755) self.assertEqual(a_2.inode['uid'], 1000)
def test_make_directory(self): c = self.repo.get_root()['b']['c'] x = c.create_directory('x') self.assertEqual(set(c.keys()), set(['d.txt', 'e.txt', 'x'])) repo2 = GitStorage(self.repo_path) c_2 = repo2.get_root()['b']['c'] self.assertEqual(set(c_2.keys()), set(['d.txt', 'e.txt', 'x'])) y = x.create_file('y') y.write_data('ydata', 0) self.assertEqual(set(x.keys()), set(['y'])) self.assertEqual(y._read_all_data(), 'ydata') repo3 = GitStorage(self.repo_path) c_3 = repo3.get_root()['b']['c'] self.assertEqual(set(c_3.keys()), set(['d.txt', 'e.txt', 'x'])) x_3 = c_3['x'] self.assertEqual(set(x_3.keys()), set(['y'])) y_3 = x_3['y'] self.assertEqual(y_3._read_all_data(), 'ydata') x.unlink() repo4 = GitStorage(self.repo_path) c_4 = repo4.get_root()['b']['c'] self.assertEqual(set(c_4.keys()), set(['d.txt', 'e.txt']))
def test_remove_file(self): c = self.repo.get_root()['b']['c'] self.assertEqual(set(c.keys()), set(['d.txt', 'e.txt'])) d_txt = c['d.txt'] d_txt.unlink() self.assertEqual(set(c.keys()), set(['e.txt'])) repo2 = GitStorage(self.repo_path) c_2 = repo2.get_root()['b']['c'] self.assertEqual(set(c_2.keys()), set(['e.txt']))
def test_30_files(self): b = self.repo.get_root()['b'] g = b.create_directory('g') for c in xrange(30): f = g.create_file('f_%d' % c) f.write_data('file contents %d' % c, 0) repo2 = GitStorage(self.repo_path) g2 = repo2.get_root()['b']['g'] for c in xrange(30): f2 = g2['f_%d' % c] self.assertEqual(f2._read_all_data(), 'file contents %d' % c)
def test_create_file(self): b = self.repo.get_root()['b'] g_txt = b.create_file('g.txt') self.assertFalse(g_txt.is_dir) self.assertEqual(g_txt.size, 0) self.assertEqual(g_txt._read_all_data(), '') self.assertEqual(g_txt.name, 'g.txt') repo2 = GitStorage(self.repo_path) g_txt_2 = repo2.get_root()['b']['g.txt'] self.assertFalse(g_txt_2.is_dir) self.assertEqual(g_txt_2.size, 0) self.assertEqual(g_txt_2._read_all_data(), '') self.assertEqual(g_txt_2.name, 'g.txt')
def test_create_first_objects(self): repo = GitStorage.create(self.repo_path) root = repo.get_root() root.create_directory('some_folder') repo.commit('created "some folder"') repo2 = GitStorage(self.repo_path) self.assertEqual(set(repo2.get_root().keys()), set(['some_folder'])) self.assertEqual(set(repo2.get_root()['some_folder'].keys()), set()) f = root.create_file('some_file') self.assertEqual(f.inode.name, 'i1') f.write_data('xy', 0) repo.commit('created "some file"') repo2 = GitStorage(self.repo_path) self.assertEqual(set(repo2.get_root().keys()), set(['some_folder', 'some_file'])) self.assertEqual(repo2.get_root()['some_file']._read_all_data(), 'xy')
def test_hardlink(self): root = self.repo.get_root() a = root['a.txt'] self.assertEqual(a.inode['nlink'], 1) linked_a = root['b'].link_file('linked_a.txt', a) self.assertTrue( id(a.inode) == id(linked_a.inode), "different inodes for `a` and `linked_a`") self.assertEqual(a.inode['nlink'], 2) a.write_data('new data for text file "a"', 0) self.assertEqual(linked_a._read_all_data(), 'new data for text file "a"') repo2 = GitStorage(self.repo_path) a_2 = repo2.get_root()['a.txt'] linked_a_2 = repo2.get_root()['b']['linked_a.txt'] self.assertTrue(id(a_2.inode) == id(linked_a_2.inode)) self.assertEqual(a_2.inode['nlink'], 2) self.assertEqual(linked_a_2._read_all_data(), 'new data for text file "a"') a.unlink() self.assertEqual(linked_a.inode['nlink'], 1) inode_name = linked_a.inode.name inodes_tt = treetree.TreeTree(self.repo.eg.root['inodes'], prefix='it') self.assertTrue(inode_name[1:] in inodes_tt) try: self.repo.get_inode(inode_name) except KeyError: self.fail() linked_a.unlink() self.assertFalse(inode_name in self.repo.eg.root['inodes']) self.assertRaises(KeyError, self.repo.get_inode, inode_name)
def test_hardlink(self): root = self.repo.get_root() a = root['a.txt'] self.assertEqual(a.inode['nlink'], 1) linked_a = root['b'].link_file('linked_a.txt', a) self.assertTrue(id(a.inode) == id(linked_a.inode), "different inodes for `a` and `linked_a`") self.assertEqual(a.inode['nlink'], 2) a.write_data('new data for text file "a"', 0) self.assertEqual(linked_a._read_all_data(), 'new data for text file "a"') repo2 = GitStorage(self.repo_path) a_2 = repo2.get_root()['a.txt'] linked_a_2 = repo2.get_root()['b']['linked_a.txt'] self.assertTrue(id(a_2.inode) == id(linked_a_2.inode)) self.assertEqual(a_2.inode['nlink'], 2) self.assertEqual(linked_a_2._read_all_data(), 'new data for text file "a"') a.unlink() self.assertEqual(linked_a.inode['nlink'], 1) inode_name = linked_a.inode.name inodes_tt = treetree.TreeTree(self.repo.eg.root['inodes'], prefix='it') self.assertTrue(inode_name[1:] in inodes_tt) try: self.repo.get_inode(inode_name) except KeyError: self.fail() linked_a.unlink() self.assertFalse(inode_name in self.repo.eg.root['inodes']) self.assertRaises(KeyError, self.repo.get_inode, inode_name)
def test_create_repo(self): repo = GitStorage.create(self.repo_path) git = dulwich.repo.Repo(self.repo_path) commit_tree = git.tree(git.commit(git.head()).tree) self.assertEqual(len(commit_tree.entries()), 4) inodes_tree = git.tree(commit_tree['inodes'][1]) self.assertEqual(len(inodes_tree), 0) root_ls_blob = git.get_blob(commit_tree['root.ls'][1]) self.assertEqual(root_ls_blob.data, '') root_sub_tree = git.tree(commit_tree['root.sub'][1]) self.assertEqual(len(root_sub_tree.entries()), 0) features_blob = git.get_blob(commit_tree['features'][1]) features_dict = json.loads(features_blob.data) self.assertEqual(features_dict['next_inode_number'], 1)
def assert_git_contents(data): repo2 = GitStorage(self.repo_path) h_txt_2 = repo2.get_root()['b']['h.txt'] self.assertEqual(h_txt_2.size, len(data)) self.assertEqual(h_txt_2._read_all_data(), data)
def assert_file_contents(self, reference): repo2 = GitStorage(self.repo_path) f = repo2.get_root()['b']['f'] self.assertEqual(f._read_all_data(), reference, '`f._read_all_data()` and `reference` do not match')