def test_module_version(self): module = one( Git.iter('ls-tree', 'HEAD', 'cinnabar', cwd=os.path.join(os.path.dirname(__file__), '..'))) self.assertEqual(CmdVersion.module_version(), split_ls_tree(module)[2])
def test_helper_version(self): helper = one( Git.iter('ls-tree', 'HEAD', 'helper', cwd=os.path.join(os.path.dirname(__file__), '..'))) self.assertEqual(CmdVersion.helper_version()[1], split_ls_tree(helper)[2])
def test_cinnabar_version(self): desc = one(Git.iter('describe', '--tags', 'HEAD')) version = Version(CmdVersion.cinnabar_version()) if '-' in desc: last_tag, n, sha1 = desc.rsplit('-', 2) self.assertGreater(version, Version(last_tag)) else: self.assertEqual(version, Version(desc))
def old_helper_hash(head): from cinnabar.git import Git, split_ls_tree from cinnabar.util import one return split_ls_tree( one( Git.iter('ls-tree', head, 'helper', cwd=os.path.join(os.path.dirname(__file__), '..'))))[2]
def close(self, rollback=False): if rollback: self._closed = True if self._closed: return for manifest in self._push_manifests.itervalues(): self.store_manifest(manifest) ls = one(Git.ls_tree(self.manifest_ref(manifest.node), 'git')) if self._manifest_git_tree[manifest.node] == EMPTY_TREE and not ls: pass else: mode, typ, sha1, path = ls assert sha1 == self._manifest_git_tree[manifest.node] for file in self._push_files.itervalues(): if isinstance(self._files[file.node], Mark): mark = self._fast_import.new_mark() self._fast_import.put_blob(data=file.data, mark=mark) self._files[file.node] = Mark(mark) super(PushStore, self).close()
def git_rev_parse(committish): from cinnabar.git import Git from cinnabar.util import one return one( Git.iter('rev-parse', committish, cwd=os.path.join(BASE_DIR, '..'))).decode()
def helper_hash(head='HEAD'): from cinnabar.git import Git, split_ls_tree from cinnabar.util import one return split_ls_tree(one(Git.iter( 'ls-tree', head, 'helper', cwd=os.path.join(os.path.dirname(__file__), '..'))))[2].decode()
def test_store_changeset(self): files = {} f = File() f.content = b'foo\n' f.node = f.sha1 chunk = f.to_chunk(self.RevChunk) GitHgHelper.store(b'file', chunk) files[f.node] = GitHgHelper.hg2git(chunk.node) f2 = File() f2.content = b'bar\n' f2.node = f2.sha1 chunk = f2.to_chunk(self.RevChunk) GitHgHelper.store(b'file', chunk) files[f2.node] = GitHgHelper.hg2git(chunk.node) m = Manifest() m.add(b'bar', f.node) m.add(b'foo/.bar', f.node) m.add(b'foo/.foo', f.node) m.add(b'foo/bar/baz', f.node) m.add(b'foo/bar/foo', f.node) m.add(b'foo/bar/qux', f.node) m.add(b'foo/foo', f.node) m.add(b'foo/hoge', f.node) m.add(b'foo/qux', f.node) m.add(b'qux', f.node) m.node = m.sha1 chunk = m.to_chunk(self.RevChunk) GitHgHelper.store(b'manifest', chunk) store = GitHgStore() c = Changeset() c.manifest = m.node c.author = b'Cinnabar test <cinnabar@test>' c.timestamp = b'0' c.utcoffset = b'0' c.files = [i.path for i in m] c.body = b'Test commit' c.node = c.sha1 store.store_changeset(c) c_gen = store.changeset(c.node) self.assertEqual(c.raw_data, c_gen.raw_data) commit = GitCommit(GitHgHelper.hg2git(c.node)) self.assertEqual(commit.body, c.body) ct = self.commit_tree(m, files) self.assertEqual(commit.tree, ct) # Weird case as seen in the GNU octave repo. # The bar subdirectory is supposed to be transposed to the same # content as the git tree for the manifest above. m2 = Manifest() m2.add(b'bar/bar', f.node) m2.add(b'bar/foo/.foo', f.node) m2.add(b'bar/foo//.bar', f.node) m2.add(b'bar/foo//.foo', f2.node) m2.add(b'bar/foo//bar/baz', f2.node) m2.add(b'bar/foo//bar/foo', f.node) m2.add(b'bar/foo//hoge', f.node) m2.add(b'bar/foo/bar/baz', f.node) m2.add(b'bar/foo/bar/qux', f.node) m2.add(b'bar/foo/foo', f.node) m2.add(b'bar/foo/qux', f.node) m2.add(b'bar/qux', f.node) m2.node = m2.sha1 chunk = m2.to_chunk(self.RevChunk, m) GitHgHelper.store(b'manifest', chunk) c2 = Changeset() c2.parent1 = c.node c2.manifest = m2.node c2.author = b'Cinnabar test <cinnabar@test>' c2.timestamp = b'0' c2.utcoffset = b'0' c2.files = [i.path for i in m2] c2.body = b'Test commit' c2.node = c2.sha1 store.store_changeset(c2) c2_gen = store.changeset(c2.node) self.assertEqual(c2.raw_data, c2_gen.raw_data) commit = GitCommit(GitHgHelper.hg2git(c2.node)) self.assertEqual(commit.body, c2.body) self.assertEqual(ct, one(Git.ls_tree(commit.tree, b'bar'))[2]) # Corner case: empty manifest m3 = Manifest() m3.node = m3.sha1 self.assertEqual(b'b80de5d138758541c5f05265ad144ab9fa86d1db', m3.node) chunk = m3.to_chunk(self.RevChunk, m2) GitHgHelper.store(b'manifest', chunk) commit = GitCommit(GitHgHelper.hg2git(m3.node)) self.assertEqual(EMPTY_TREE, commit.tree) c3 = Changeset() c3.parent1 = c2.node c3.manifest = m3.node c3.author = b'Cinnabar test <cinnabar@test>' c3.timestamp = b'0' c3.utcoffset = b'0' c3.body = b'Test commit' c3.node = c3.sha1 store.store_changeset(c3) c3_gen = store.changeset(c3.node) self.assertEqual(c3.raw_data, c3_gen.raw_data) commit = GitCommit(GitHgHelper.hg2git(c3.node)) self.assertEqual(commit.body, c3.body) self.assertEqual(EMPTY_TREE, commit.tree) # Corner case: null manifest c4 = Changeset() c4.parent1 = c3.node c4.manifest = NULL_NODE_ID c4.author = b'Cinnabar test <cinnabar@test>' c4.timestamp = b'0' c4.utcoffset = b'0' c4.body = b'Test commit' c4.node = c4.sha1 store.store_changeset(c4) c4_gen = store.changeset(c4.node) self.assertEqual(c4.raw_data, c4_gen.raw_data) commit = GitCommit(GitHgHelper.hg2git(c4.node)) self.assertEqual(commit.body, c4.body) self.assertEqual(EMPTY_TREE, commit.tree) # Corner case: identical changeset with a difference that wouldn't # appear in the git commit without adjustment (which is: cinnabar adds # a nul character to the commit message.. chunk = c2.to_chunk(RawRevChunk02) c5 = Changeset.from_chunk(chunk) c5.branch = b'branched' c5.node = c5.sha1 store.store_changeset(c5) c5_gen = store.changeset(c5.node) self.assertEqual(c5.raw_data, c5_gen.raw_data) commit = GitCommit(GitHgHelper.hg2git(c5.node)) self.assertEqual(commit.body, c5.body + b'\0') self.assertEqual(ct, one(Git.ls_tree(commit.tree, b'bar'))[2])
def test_store_changeset(self): files = {} f = File() f.content = b'foo\n' f.node = f.sha1 chunk = f.to_chunk(self.RevChunk) GitHgHelper.store(b'file', chunk) files[f.node] = GitHgHelper.hg2git(chunk.node) f2 = File() f2.content = b'bar\n' f2.node = f2.sha1 chunk = f2.to_chunk(self.RevChunk) GitHgHelper.store(b'file', chunk) files[f2.node] = GitHgHelper.hg2git(chunk.node) m = Manifest() m.add(b'bar', f.node) m.add(b'foo/.bar', f.node) m.add(b'foo/.foo', f.node) m.add(b'foo/bar/baz', f.node) m.add(b'foo/bar/foo', f.node) m.add(b'foo/bar/qux', f.node) m.add(b'foo/foo', f.node) m.add(b'foo/hoge', f.node) m.add(b'foo/qux', f.node) m.add(b'qux', f.node) m.node = m.sha1 chunk = m.to_chunk(self.RevChunk) GitHgHelper.store(b'manifest', chunk) store = GitHgStore() c = Changeset() c.manifest = m.node c.author = b'Cinnabar test <cinnabar@test>' c.timestamp = b'0' c.utcoffset = b'0000' c.files = [i.path for i in m] c.body = b'Test commit' c.node = c.sha1 store.store_changeset(c) c_gen = store.changeset(c.node) self.assertEqual(c.raw_data, c_gen.raw_data) commit = GitCommit(GitHgHelper.hg2git(c.node)) self.assertEqual(commit.body, c.body) ct = self.commit_tree(m, files) self.assertEqual(commit.tree, ct) # Weird case as seen in the GNU octave repo. # The bar subdirectory is supposed to be transposed to the same # content as the git tree for the manifest above. m2 = Manifest() m2.add(b'bar/bar', f.node) m2.add(b'bar/foo/.foo', f.node) m2.add(b'bar/foo//.bar', f.node) m2.add(b'bar/foo//.foo', f2.node) m2.add(b'bar/foo//bar/baz', f2.node) m2.add(b'bar/foo//bar/foo', f.node) m2.add(b'bar/foo//hoge', f.node) m2.add(b'bar/foo/bar/baz', f.node) m2.add(b'bar/foo/bar/qux', f.node) m2.add(b'bar/foo/foo', f.node) m2.add(b'bar/foo/qux', f.node) m2.add(b'bar/qux', f.node) m2.node = m2.sha1 chunk = m2.to_chunk(self.RevChunk, m) GitHgHelper.store(b'manifest', chunk) c2 = Changeset() c2.parent1 = c.node c2.manifest = m2.node c2.author = b'Cinnabar test <cinnabar@test>' c2.timestamp = b'0' c2.utcoffset = b'0000' c2.files = [i.path for i in m2] c2.body = b'Test commit' c2.node = c2.sha1 store.store_changeset(c2) c2_gen = store.changeset(c2.node) self.assertEqual(c2.raw_data, c2_gen.raw_data) commit = GitCommit(GitHgHelper.hg2git(c2.node)) self.assertEqual(commit.body, c2.body) self.assertEqual(ct, one(Git.ls_tree(commit.tree, b'bar'))[2])
def git_rev_parse(committish): from cinnabar.git import Git from cinnabar.util import one return one(Git.iter('rev-parse', committish, cwd=os.path.join(BASE_DIR, '..'))).decode()
def test_helper_version(self): helper = one(Git.iter( 'ls-tree', 'HEAD', 'helper', cwd=os.path.join(os.path.dirname(__file__), '..'))) self.assertEqual(CmdVersion.helper_version()[1], split_ls_tree(helper)[2])
def test_module_version(self): module = one(Git.iter( 'ls-tree', 'HEAD', 'cinnabar', cwd=os.path.join(os.path.dirname(__file__), '..'))) self.assertEqual(CmdVersion.module_version(), split_ls_tree(module)[2])