def general_load_test(self): block_name = BlockName("user/block") version = BlockVersion(block_name.default_block(), 0) config = BiiConfig(general) self.assertEqual(config.parent, version) v1 = BlockVersion.loads("user2/depblock2(track): 3 @tag") v2 = BlockVersion.loads("user/depblock1(master): 3") self.assertEqual(config.requirements, BlockVersionTable([v1, v2])) self.assert_bii_equal(config.mains, [EntryPointConfiguration("main.cpp", False), EntryPointConfiguration("main2.cpp", True), ]) self.assert_bii_equal(config.tests, ["test.cpp", "test1.cpp"]) self.assertEqual(config.paths, ["/", "include"])
def general_load_test(self): block_name = BlockName("user/block") version = BlockVersion(block_name.default_block(), 0) config = BiiConfig(general) self.assertEqual(config.parent, version) v1 = BlockVersion.loads("user2/depblock2(track): 3 @tag") v2 = BlockVersion.loads("user/depblock1(master): 3") self.assertEqual(config.requirements, BlockVersionTable([v1, v2])) self.assert_bii_equal(config.mains, [ EntryPointConfiguration("main.cpp", False), EntryPointConfiguration("main2.cpp", True), ]) self.assert_bii_equal(config.tests, ["test.cpp", "test1.cpp"]) self.assertEqual(config.paths, ["/", "include"])
def dumps(self, text=""): """ dumps the contents to a text string (with \n LF), if optional param text is passed it tries to maintain the comments and structure of such text return: text translation of self """ if text: result = [] else: result = [ '# This file contains your block external dependencies references' ] replaced_versions = [] for line in text.splitlines(): line = line.strip() if not line or line.startswith('#'): # Blank and comment lines result.append(line) continue try: current_version = BlockVersion.loads(line) version = self.get(current_version.block_name) if version: result.append(str(version)) replaced_versions.append(version) except: result.append(line) continue for version in self.itervalues(): if version not in replaced_versions: result.append(str(version)) result.append('') return '\n'.join(result)
def parents_line_parser(line): if line.startswith('*'): line = line[1:] version = BlockVersion.loads(line) if result: raise BiiException('Impossible to have two main parents') result.append(version)
def test_time_base_map(self): t = TimeBaseMap() mvt = BlockVersionTable([BlockVersion.loads("user/block: 3")]) t.append(0, mvt) t.append(1, mvt) s = serialize(t) #print "TIME BASE:"+str(s) t2 = TimeBaseMapDeserializer(BlockVersionTable).deserialize(s) self.assertEqual(t, t2)
def _trace_achievement_action(action_name, description, username, async_process): try: if username: if action_name == "publish": # Uses publish register_publish(username, BlockVersion.loads(description), async_process=async_process) elif action_name == "get_version_delta_info": # User uses biicode register_get_version_delta_info(username, async_process=async_process) except Exception as e: logger.warning("Error sending to action to achievement: %s" % e)
def test_time_base_map(self): t = TimeBaseMap() mvt = BlockVersionTable([BlockVersion.loads("user/block: 3")]) t.append(0, mvt) t.append(1, mvt) s = serialize(t) # print "TIME BASE:"+str(s) t2 = TimeBaseMapDeserializer(BlockVersionTable).deserialize(s) self.assertEqual(t, t2)
def test_nonzero_one_file_content(self): changes = Changes() changes.modified['modified_cont'] = Modification( Resource(SimpleCell('usr/block/pretty.js'), Content(id_=None, load=Blob('mod_content'))), Resource(SimpleCell('usr/block/pretty.js'), Content(id_=None, load=Blob('mod_content2')))) p = PublishRequest(BlockVersion.loads('usr/block: 3')) p.msg = "Test Msg" p.changes = changes self.assertTrue(bool(p))
def test_nonzero_one_file_content(self): changes = Changes() changes.modified['modified_cont'] = Modification( Resource(SimpleCell('usr/block/pretty.js'), Content(id_=None, load=Blob('mod_content'))), Resource(SimpleCell('usr/block/pretty.js'), Content(id_=None, load=Blob('mod_content2')))) p = PublishRequest(BlockVersion.loads('usr/block: 3')) p.msg = "Test Msg" p.changes = changes self.assertTrue(bool(p))
def setUp(self): self.store = MongoServerStore(self.conn, self.__class__.__name__) self.store = ReverseDependencyMongoStore(self.store) bver = BlockVersion.loads("creator/block(owner/branch):2") self.bv2 = BlockVersion.loads("creator2/block(owner2/branch):2") self.bv3 = BlockVersion.loads("creator3/block(owner3/branch):3") self.reverse = ReverseDependency(bver) self.reverse.add_dependant_version(self.bv2) self.reverse.add_dependant_version(self.bv3) self.store.upsert_reverse_dependencies(self.reverse) # Other version of same block bver2 = BlockVersion.loads("creator/block(owner/branch):3") self.reverse2 = ReverseDependency(bver2) self.reverse2.add_dependant_version(self.bv2) self.reverse2.add_dependant_version(self.bv3) self.store.upsert_reverse_dependencies(self.reverse2)
def setUp(self): self.store = MongoServerStore(self.conn, self.__class__.__name__) self.store = ReverseDependencyMongoStore(self.store) bver = BlockVersion.loads("creator/block(owner/branch):2") self.bv2 = BlockVersion.loads("creator2/block(owner2/branch):2") self.bv3 = BlockVersion.loads("creator3/block(owner3/branch):3") self.reverse = ReverseDependency(bver) self.reverse.add_dependant_version(self.bv2) self.reverse.add_dependant_version(self.bv3) self.store.upsert_reverse_dependencies(self.reverse) # Other version of same block bver2 = BlockVersion.loads("creator/block(owner/branch):3") self.reverse2 = ReverseDependency(bver2) self.reverse2.add_dependant_version(self.bv2) self.reverse2.add_dependant_version(self.bv3) self.store.upsert_reverse_dependencies(self.reverse2)
def migrate(self, *args, **kwargs): bii = args[0] disk = bii.hive_disk_image disk.clean() for root, _, _ in os.walk(disk._bii_paths.blocks): relative_root = root.replace(disk._bii_paths.blocks + os.sep, "") if len(relative_root.split(os.sep)) == 2: block = BlockVersion.loads(relative_root.replace(os.sep, "/")).block version = bii.biiapi.get_block_info(block).last_version if version.time > -1: file_path = os.path.join(root, BII_DIR, "parents.bii") save(file_path, "*%s" % version.to_pretty())
def migrate(self, *args, **kwargs): bii = args[0] disk = bii.hive_disk_image disk.clean() for root, _, _ in os.walk(disk._bii_paths.blocks): relative_root = root.replace(disk._bii_paths.blocks + os.sep, '') if len(relative_root.split(os.sep)) == 2: block = BlockVersion.loads(relative_root.replace(os.sep, '/')).block version = bii.biiapi.get_block_info(block).last_version if version.time > -1: file_path = os.path.join(root, BII_DIR, 'parents.bii') save(file_path, '*%s' % version.to_pretty())
def _trace_achievement_action(action_name, description, username, async_process): try: if username: if action_name == "publish": # Uses publish register_publish(username, BlockVersion.loads(description), async_process=async_process) elif action_name == "get_version_delta_info": # User uses biicode register_get_version_delta_info(username, async_process=async_process) except Exception as e: logger.warning("Error sending to action to achievement: %s" % e)
def test_serialize(self): p = PublishRequest(BlockVersion.loads('usr/block: 3')) p.msg = "Test Msg" p.changes = self._changes() serial = p.serialize() p2 = PublishRequest.deserialize(serial) self.assertEqual(p.parent, p2.parent) self.assertEqual(p.tag, p2.tag) self.assertEqual(p.msg, p2.msg) self.assert_bii_equal(p.cells, p2.cells) self.assertEqual(p.contents, p2.contents) self.assertEqual(p.contents_ids, p2.contents_ids) self.assertEqual(p.deleted, p2.deleted) self.assertEqual(p.renames, p2.renames)
def test_read_and_upsert_reverse_dependencies(self): reverse_readed = self.store.read_direct_reverse_dependencies(self.reverse.version) self.assertEquals(self.reverse, reverse_readed) # Now add directly to mongo a new dependency new_ver = BlockVersion.loads("creator3/block3(owner3/branch3):3") self.store.add_reverse_dependency_to(self.reverse.version, new_ver) reverse_readed = self.store.read_direct_reverse_dependencies(self.reverse.version) self.reverse.add_dependant_version(new_ver) self.assertEquals(self.reverse, reverse_readed)
def test_serialize(self): p = PublishRequest(BlockVersion.loads('usr/block: 3')) p.msg = "Test Msg" p.changes = self._changes() serial = p.serialize() p2 = PublishRequest.deserialize(serial) self.assertEqual(p.parent, p2.parent) self.assertEqual(p.tag, p2.tag) self.assertEqual(p.msg, p2.msg) self.assert_bii_equal(p.cells, p2.cells) self.assertEqual(p.contents, p2.contents) self.assertEqual(p.contents_ids, p2.contents_ids) self.assertEqual(p.deleted, p2.deleted) self.assertEqual(p.renames, p2.renames)
def parent_test(self): block_name = BlockName("user/block") version = BlockVersion(block_name.default_block(), 0) for text in (parent1, parent2): config = BiiConfig(text) self.assertEqual(config.parent, version) self.assertEqual(None, config.dumps()) config = BiiConfig(parent3) self.assertEqual(config.parent, None) self.assertEqual(None, config.dumps()) version = BlockVersion.loads("user/block(track): -1") config = BiiConfig(parent4) self.assertEqual(config.parent, version) self.assertEqual(None, config.dumps())
def test_read_and_upsert_reverse_dependencies(self): reverse_readed = self.store.read_direct_reverse_dependencies( self.reverse.version) self.assertEquals(self.reverse, reverse_readed) # Now add directly to mongo a new dependency new_ver = BlockVersion.loads("creator3/block3(owner3/branch3):3") self.store.add_reverse_dependency_to(self.reverse.version, new_ver) reverse_readed = self.store.read_direct_reverse_dependencies( self.reverse.version) self.reverse.add_dependant_version(new_ver) self.assertEquals(self.reverse, reverse_readed)
def parent_test(self): block_name = BlockName("user/block") version = BlockVersion(block_name.default_block(), 0) for text in (parent1, parent2): config = BiiConfig(text) self.assertEqual(config.parent, version) self.assertEqual(None, config.dumps()) config = BiiConfig(parent3) self.assertEqual(config.parent, None) self.assertEqual(None, config.dumps()) version = BlockVersion.loads("user/block(track): -1") config = BiiConfig(parent4) self.assertEqual(config.parent, version) self.assertEqual(None, config.dumps())
def parent_update_test(self): block_name = BlockName("user/block") text = "[parent]\n # My comment\n" config = BiiConfig(text) self.assertEqual(config.dumps(), None) version = BlockVersion(block_name.default_block(), 0) config.parent = version dumped = config.dumps() self.assertEqual(dumped, "[parent]\n\tuser/block: 0\n") # Dump again, no changes self.assertEqual(config.dumps(), None) config2 = BiiConfig(dumped) self.assertEqual(config2.parent, config.parent) version2 = BlockVersion.loads("user/block(track): 2") config.parent = version2 dumped = config.dumps() self.assertEqual(dumped, "[parent]\n\tuser/block(track): 2\n") # Dump again, no changes self.assertEqual(config.dumps(), None) config3 = BiiConfig(dumped) self.assertEqual(config3.parent, config.parent)
def parent_update_test(self): block_name = BlockName("user/block") text = "[parent]\n # My comment\n" config = BiiConfig(text) self.assertEqual(config.dumps(), None) version = BlockVersion(block_name.default_block(), 0) config.parent = version dumped = config.dumps() self.assertEqual(dumped, "[parent]\n\tuser/block: 0\n") # Dump again, no changes self.assertEqual(config.dumps(), None) config2 = BiiConfig(dumped) self.assertEqual(config2.parent, config.parent) version2 = BlockVersion.loads("user/block(track): 2") config.parent = version2 dumped = config.dumps() self.assertEqual(dumped, "[parent]\n\tuser/block(track): 2\n") # Dump again, no changes self.assertEqual(config.dumps(), None) config3 = BiiConfig(dumped) self.assertEqual(config3.parent, config.parent)
def test_loads(self): v1 = BlockVersion("user/user/math/master", 3) self.assertEqual(v1, BlockVersion.loads('user/math: 3')) self.assertEqual(v1, BlockVersion.loads('user/math: 3 # This is a comment')) self.assertEqual(v1, BlockVersion.loads('user/math : 3')) self.assertEqual(v1, BlockVersion.loads(' user/math(master): 3 ')) self.assertEqual(v1, BlockVersion.loads('user/math (master) : 3 ')) self.assertEqual(v1, BlockVersion.loads('user/math (user/master) : 3 ')) self.assertEqual('user/math: 3', str(v1)) v1 = BlockVersion("user/user/math/branch", 3) self.assertEqual(v1, BlockVersion.loads('user/math(branch): 3')) self.assertEqual(v1, BlockVersion.loads('user/math (user/branch) : 3')) self.assertEqual('user/math(branch): 3', str(v1)) v1 = BlockVersion("user2/user/math/branch", 3) self.assertEqual(v1, BlockVersion.loads('user/math (user2/branch) : 3')) self.assertEqual('user/math(user2/branch): 3', str(v1)) v1 = BlockVersion("user/user/math/master", None) self.assertEqual(v1, BlockVersion.loads(' user/math ')) self.assertEqual(v1, BlockVersion.loads(' user/math(master) ')) self.assertEqual(v1, BlockVersion.loads('user/math (user/master) ')) self.assertEqual('user/math', str(v1)) v1 = BlockVersion("user/user/math/branch", None) self.assertEqual(v1, BlockVersion.loads('user/math(branch) ')) self.assertEqual(v1, BlockVersion.loads('user/math (user/branch)')) self.assertEqual('user/math(branch)', str(v1)) v1 = BlockVersion("user2/user/math/branch", None) self.assertEqual(v1, BlockVersion.loads('user/math (user2/branch) ')) self.assertEqual('user/math(user2/branch)', str(v1)) v1 = BlockVersion("user/user/math/master", 30, '2.7.1') self.assertEqual(v1, BlockVersion.loads('user/math : 30 @2.7.1')) self.assertEqual(v1, BlockVersion.loads('user/math : 30 @2.7.1# This is a comment')) self.assertEqual(v1, BlockVersion.loads('user/math : 30 @2.7.1 # This is a comment')) self.assertEqual('user/math: 30 @2.7.1', str(v1)) v1 = BlockVersion("dummy/dummy/myblock/master", -1) self.assertEquals(v1, BlockVersion.loads('dummy/myblock: -1')) v1 = BlockVersion("dummy/dummy/my-block/master", 2) self.assertEquals(v1, BlockVersion.loads('dummy/my-block: 2')) v1 = BlockVersion("user0/user0/hello-.__--1/master", 0) self.assertEquals(v1, BlockVersion.loads('user0/hello-.__--1: 0')) with self.assertRaisesRegexp(BiiException, "Bad block version format"): BlockVersion.loads('laso/block:invalidversion') v1 = BlockVersion("dummy/dummy/first/master", None, "1.12") self.assertEquals(v1, BlockVersion.loads('dummy/first @1.12')) v1 = BlockVersion.loads("user/math: @DEV ") self.assertEqual(v1.block, "user/user/math/master") self.assertEqual(v1.time, None) self.assertEqual(v1.tag, "DEV") v1 = BlockVersion.loads("user/math: 1 @1.2 # My comment") self.assertEqual(v1.block, "user/user/math/master") self.assertEqual(v1.time, 1)
from biicode.common.model.symbolic.block_version import BlockVersion a1 = BlockVersion.loads('user0/blocka: 1') a2 = BlockVersion.loads('user0/blocka: 2') an = BlockVersion.loads('user0/blocka') b1 = BlockVersion.loads('user0/blockb: 1') b2 = BlockVersion.loads('user0/blockb: 2') bn = BlockVersion.loads('user0/blockb') c1 = BlockVersion.loads('user0/blockc: 1') cn = BlockVersion.loads('user0/blockc') c2 = BlockVersion.loads('user0/blockc: 2') c3 = BlockVersion.loads('user0/blockc: 3') d1 = BlockVersion.loads('user0/blockd: 1') dn = BlockVersion.loads('user0/blockd') e1 = BlockVersion.loads('user0/blocke(user1/branch): 1') en = BlockVersion.loads('user0/blocke(user1/branch)')
import unittest from biicode.common.edition.hive_holder import HiveHolder from biicode.common.model.symbolic.block_version import BlockVersion from biicode.common.model.symbolic.block_version_table import BlockVersionTable from biicode.common.model.resource import Resource from biicode.common.model.cells import SimpleCell from biicode.common.model.content import Content from biicode.common.model.blob import Blob from biicode.common.edition.block_holder import BlockHolder, BIICODE_FILE a1 = BlockVersion.loads('user0/blocka: 1') an = BlockVersion.loads('user0/blocka') b2 = BlockVersion.loads('user0/blockb(branch): 2') bn = BlockVersion.loads('user0/blockb(branch)') cn = BlockVersion.loads('user0/blockc: -1') class HiveHolderTest(unittest.TestCase): def base_version_test(self): hive_holder = HiveHolder({}, {}) parents_resource = Resource(SimpleCell(a1.block_name + BIICODE_FILE), Content(id_=None, load=Blob('[parent]\n ' + str(a1)))) hive_holder.add_holder(BlockHolder(a1.block_name, {parents_resource})) parents_resource = Resource(SimpleCell(b2.block_name + BIICODE_FILE), Content(id_=None, load=Blob('[parent]\n * ' + str(b2)))) hive_holder.add_holder(BlockHolder(b2.block_name, {parents_resource})) hive_holder.add_holder(BlockHolder(cn.block_name, {})) result_table = BlockVersionTable([b.parent for b in hive_holder.block_holders]) self.assertEqual(result_table, BlockVersionTable([a1, b2, cn]))
import unittest from biicode.common.model.symbolic.block_version import BlockVersion from biicode.common.deps.block_version_graph import BlockVersionGraph from biicode.common.deps.block_version_graph_builder import \ compute_effective, block_version_graph_build from biicode.common.test.deps.deps_api import DepsApiFake from biicode.common.model.symbolic.block_version_table import BlockVersionTable a1 = BlockVersion.loads('user0/blocka: 1') a2 = BlockVersion.loads('user0/blocka: 2') an = BlockVersion.loads('user0/blocka') b1 = BlockVersion.loads('user0/blockb: 1') b2 = BlockVersion.loads('user0/blockb: 2') bn = BlockVersion.loads('user0/blockb') c1 = BlockVersion.loads('user0/blockc: 1') c2 = BlockVersion.loads('user0/blockc: 1') c3 = BlockVersion.loads('user0/blockc: 3') cn = BlockVersion.loads('user0/blockc') d1 = BlockVersion.loads('user0/blockd: 1') class BlockVersionGraphBuilderTest(unittest.TestCase): def test_compose(self): t1 = BlockVersionTable([a1]) t2 = BlockVersionTable([b1]) effective, propagate, overwrites = compute_effective(t1, t2, 'user0/blocka') self.assertEqual(effective, BlockVersionTable([b1])) self.assertEqual(propagate, BlockVersionTable([b1]))
def test_loads(self): v1 = BlockVersion("user/user/math/master", 3) self.assertEqual(v1, BlockVersion.loads('user/math: 3')) self.assertEqual(v1, BlockVersion.loads('user/math: 3 # This is a comment')) self.assertEqual(v1, BlockVersion.loads('user/math : 3')) self.assertEqual(v1, BlockVersion.loads(' user/math(master): 3 ')) self.assertEqual(v1, BlockVersion.loads('user/math (master) : 3 ')) self.assertEqual(v1, BlockVersion.loads('user/math (user/master) : 3 ')) self.assertEqual('user/math: 3', str(v1)) v1 = BlockVersion("user/user/math/branch", 3) self.assertEqual(v1, BlockVersion.loads('user/math(branch): 3')) self.assertEqual(v1, BlockVersion.loads('user/math (user/branch) : 3')) self.assertEqual('user/math(branch): 3', str(v1)) v1 = BlockVersion("user2/user/math/branch", 3) self.assertEqual(v1, BlockVersion.loads('user/math (user2/branch) : 3')) self.assertEqual('user/math(user2/branch): 3', str(v1)) v1 = BlockVersion("user/user/math/master", None) self.assertEqual(v1, BlockVersion.loads(' user/math ')) self.assertEqual(v1, BlockVersion.loads(' user/math(master) ')) self.assertEqual(v1, BlockVersion.loads('user/math (user/master) ')) self.assertEqual('user/math', str(v1)) v1 = BlockVersion("user/user/math/branch", None) self.assertEqual(v1, BlockVersion.loads('user/math(branch) ')) self.assertEqual(v1, BlockVersion.loads('user/math (user/branch)')) self.assertEqual('user/math(branch)', str(v1)) v1 = BlockVersion("user2/user/math/branch", None) self.assertEqual(v1, BlockVersion.loads('user/math (user2/branch) ')) self.assertEqual('user/math(user2/branch)', str(v1)) v1 = BlockVersion("user/user/math/master", 30, '2.7.1') self.assertEqual(v1, BlockVersion.loads('user/math : 30 @2.7.1')) self.assertEqual(v1, BlockVersion.loads('user/math : 30 @2.7.1# This is a comment')) self.assertEqual(v1, BlockVersion.loads('user/math : 30 @2.7.1 # This is a comment')) self.assertEqual('user/math: 30 @2.7.1', str(v1)) v1 = BlockVersion("dummy/dummy/myblock/master", -1) self.assertEquals(v1, BlockVersion.loads('dummy/myblock: -1')) v1 = BlockVersion("dummy/dummy/my-block/master", 2) self.assertEquals(v1, BlockVersion.loads('dummy/my-block: 2')) v1 = BlockVersion("user0/user0/hello-.__--1/master", 0) self.assertEquals(v1, BlockVersion.loads('user0/hello-.__--1: 0')) with self.assertRaisesRegexp(BiiException, "Bad block version format"): BlockVersion.loads('laso/block:invalidversion') v1 = BlockVersion("dummy/dummy/first/master", None, "1.12") self.assertEquals(v1, BlockVersion.loads('dummy/first @1.12'))
def block_version(argument): return argument if isinstance(argument, BlockVersion) else BlockVersion.loads(argument)
import unittest from biicode.common.edition.hive import Hive from biicode.common.edition.hive_holder import HiveHolder from biicode.common.model.symbolic.block_version import BlockVersion from biicode.common.model.symbolic.block_version_table import BlockVersionTable from biicode.common.model.resource import Resource from biicode.common.model.cells import SimpleCell from biicode.common.model.content import Content from biicode.common.model.blob import Blob from biicode.common.edition.block_holder import BlockHolder, BIICODE_FILE a1 = BlockVersion.loads('user0/blocka: 1') an = BlockVersion.loads('user0/blocka') b2 = BlockVersion.loads('user0/blockb(branch): 2') bn = BlockVersion.loads('user0/blockb(branch)') cn = BlockVersion.loads('user0/blockc: -1') class HiveHolderTest(unittest.TestCase): def base_version_test(self): hive = Hive() hive_holder = HiveHolder(hive, {}, {}) parents_resource = Resource( SimpleCell(a1.block_name + BIICODE_FILE), Content(id_=None, load=Blob('[parent]\n ' + str(a1)))) hive_holder.add_holder(BlockHolder(a1.block_name, {parents_resource})) parents_resource = Resource( SimpleCell(b2.block_name + BIICODE_FILE), Content(id_=None, load=Blob('[parent]\n * ' + str(b2)))) hive_holder.add_holder(BlockHolder(b2.block_name, {parents_resource})) hive_holder.add_holder(BlockHolder(cn.block_name, {}))
def table_line_parser(line): version = BlockVersion.loads(line) if version.block_name in result: raise BiiException('Duplicate dependency "%s"' % version.to_pretty()) result.add_version(version)