)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rodrigo Rojo \u003crodrigo.rojo@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-09-14 17:22:45 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds OPAE FPGA driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Add OpaeDriver class which implements discover, program using opae.fpga"},{"line_number":10,"context_line":"module."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f79a3b5_212c3000","line":7,"updated":"2018-09-24 23:37:27.000000000","message":"as a general comment from reading the commit message i would say this\npatch is doing too many things.\n\ni would proably split this into two pataches\none for the OPAE driver and one for the devstack changes.\n\ni would alos have expected any new driver to have documentation.","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"9f1f21cdfd4fc3d2ab48d9022ff0321755783e16","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rodrigo Rojo \u003crodrigo.rojo@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-09-14 17:22:45 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds OPAE FPGA driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Add OpaeDriver class which implements discover, program using opae.fpga"},{"line_number":10,"context_line":"module."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f79a3b5_d32f92a3","line":7,"in_reply_to":"3f79a3b5_212c3000","updated":"2018-11-14 04:47:11.000000000","message":"Agreed on splitting into 2 patches.","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"}],"cyborg/accelerator/drivers/fpga/opae/driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cyborg.accelerator.drivers.fpga.base import FPGADriver"},{"line_number":22,"context_line":"from opae import fpga"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"SYSFS_DEVICE \u003d \u0027{segment}:{bus}:{device}.{function}\u0027"},{"line_number":25,"context_line":"SYSFS_ROOT \u003d \u0027/sys/devices/pci{domain}:{bus}/{SYSFS_DEVICE}\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_c1e21cd5","line":24,"updated":"2018-09-24 23:37:27.000000000","message":"i have seen several driver parse sysfs at this point. this feels like somthing that should be extracted into a common utility module and reused","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"4c932ee8cbe8d3f180e8b7eb37cab7fb2625095b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"SYSFS_ROOT \u003d \u0027/sys/devices/pci{domain}:{bus}/{SYSFS_DEVICE}\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def cyborg_info(props):"},{"line_number":29,"context_line":"    \u0027\u0027\u0027"},{"line_number":30,"context_line":"    Use OPAE fpga.properties into a dictionary consumable by cyborg"},{"line_number":31,"context_line":"    \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_2d6313ad","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":15},"updated":"2018-10-03 01:53:52.000000000","message":"Who is calling this API? this is not any api we agreed on in any specs","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def cyborg_info(props):"},{"line_number":29,"context_line":"    \u0027\u0027\u0027"},{"line_number":30,"context_line":"    Use OPAE fpga.properties into a dictionary consumable by cyborg"},{"line_number":31,"context_line":"    \u0027\u0027\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    # TODO (rrojo): use props.segment instead of \u00270000\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_e1e718e3","line":30,"updated":"2018-09-24 23:37:27.000000000","message":"we should proably be retruning an object form this function not a dictionary.\nwe really should avoid using dictionaries internally.","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    sysfs_devnode \u003d os.listdir(os.path.join(sysfs_path, \u0027fpga\u0027))[0]"},{"line_number":42,"context_line":"    sysfs_devpath \u003d os.path.join(sysfs_path, \u0027fpga\u0027, sysfs_devnode)"},{"line_number":43,"context_line":"    # ACCELERATOR object are assignable but not DEVICE objects"},{"line_number":44,"context_line":"    return {\u0027assignable\u0027: props.type \u003d\u003d fpga.ACCELERATOR,"},{"line_number":45,"context_line":"            \u0027device\u0027: sysfs_device,"},{"line_number":46,"context_line":"            \u0027function\u0027: \u0027pf\u0027,"},{"line_number":47,"context_line":"            \u0027name\u0027: \u00270x{:04x}\u0027.format(props.object_id),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_81cc2463","line":44,"updated":"2018-09-24 23:37:27.000000000","message":"this should retrun a cyborge object","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"4c932ee8cbe8d3f180e8b7eb37cab7fb2625095b","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            \u0027vendor_id\u0027: \u00270x{:02x}\u0027.format(props.vendor_id)}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def virtfn_info(rootpath, virtfn, devpath):"},{"line_number":55,"context_line":"    with open(os.path.join(virtfn, \u0027device\u0027), \u0027r\u0027) as fd:"},{"line_number":56,"context_line":"        device_id \u003d fd.read().strip()"},{"line_number":57,"context_line":"    with open(os.path.join(virtfn, \u0027vendor\u0027), \u0027r\u0027) as fd:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_8d0907dd","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":15},"updated":"2018-10-03 01:53:52.000000000","message":"Who is calling this API? this is not any api we agreed on in any specs","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    virtfn_path \u003d os.path.join(rootpath,"},{"line_number":63,"context_line":"                               device_link,"},{"line_number":64,"context_line":"                               virtfn_link)"},{"line_number":65,"context_line":"    return {\u0027function\u0027: \u0027vf\u0027,"},{"line_number":66,"context_line":"            \u0027assignable\u0027: False,"},{"line_number":67,"context_line":"            \u0027vendor_id\u0027: vendor_id,"},{"line_number":68,"context_line":"            \u0027product_id\u0027: device_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_a1c92052","line":65,"updated":"2018-09-24 23:37:27.000000000","message":"again this likely shold return an cyborg object","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"4c932ee8cbe8d3f180e8b7eb37cab7fb2625095b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            \u0027path\u0027: os.path.abspath(virtfn_path)}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def find_children(parent_tok, parent_props, devinfo):"},{"line_number":75,"context_line":"    children \u003d []"},{"line_number":76,"context_line":"    rootpath \u003d devinfo[\u0027path\u0027]"},{"line_number":77,"context_line":"    devpath \u003d os.path.join(rootpath, \u0027device\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_ad0c03eb","line":74,"range":{"start_line":74,"start_character":4,"end_line":74,"end_character":17},"updated":"2018-10-03 01:53:52.000000000","message":"Who is calling this API? this is not any api we agreed on in any specs","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            \u0027path\u0027: os.path.abspath(virtfn_path)}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def find_children(parent_tok, parent_props, devinfo):"},{"line_number":75,"context_line":"    children \u003d []"},{"line_number":76,"context_line":"    rootpath \u003d devinfo[\u0027path\u0027]"},{"line_number":77,"context_line":"    devpath \u003d os.path.join(rootpath, \u0027device\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_41d60cf5","line":74,"updated":"2018-09-24 23:37:27.000000000","message":"what does tok stand for?","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"class OpaeDriver(FPGADriver):"},{"line_number":104,"context_line":"    VENDOR \u003d \"opae\""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def discover(self):"},{"line_number":107,"context_line":"        resources \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_61d30803","line":104,"updated":"2018-09-24 23:37:27.000000000","message":"should the vendor not be intel?","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def discover(self):"},{"line_number":107,"context_line":"        resources \u003d {}"},{"line_number":108,"context_line":"        toks \u003d fpga.enumerate(type\u003dfpga.DEVICE)"},{"line_number":109,"context_line":"        for tok in toks:"},{"line_number":110,"context_line":"            props \u003d fpga.properties(tok)"},{"line_number":111,"context_line":"            devinfo \u003d cyborg_info(props)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_01025473","line":108,"updated":"2018-09-24 23:37:27.000000000","message":"devices","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def discover(self):"},{"line_number":107,"context_line":"        resources \u003d {}"},{"line_number":108,"context_line":"        toks \u003d fpga.enumerate(type\u003dfpga.DEVICE)"},{"line_number":109,"context_line":"        for tok in toks:"},{"line_number":110,"context_line":"            props \u003d fpga.properties(tok)"},{"line_number":111,"context_line":"            devinfo \u003d cyborg_info(props)"},{"line_number":112,"context_line":"            devinfo[\u0027regions\u0027] \u003d find_children(tok, props, devinfo)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_21075084","line":109,"updated":"2018-09-24 23:37:27.000000000","message":"device in devices.","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # name should be the object name used in discover"},{"line_number":119,"context_line":"        # this maps to the object_id in OPAE"},{"line_number":120,"context_line":"        # find the device by name"},{"line_number":121,"context_line":"        toks \u003d fpga.enumerate(object_id\u003dname)"},{"line_number":122,"context_line":"        with fpga.open(toks[0]) as device, open(image, \u0027rb\u0027) as gbs:"},{"line_number":123,"context_line":"            device.reconfigure(0, gbs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_c1fbfc78","line":121,"updated":"2018-09-24 23:37:27.000000000","message":"toks -\u003e devices","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # name should be the object name used in discover"},{"line_number":119,"context_line":"        # this maps to the object_id in OPAE"},{"line_number":120,"context_line":"        # find the device by name"},{"line_number":121,"context_line":"        toks \u003d fpga.enumerate(object_id\u003dname)"},{"line_number":122,"context_line":"        with fpga.open(toks[0]) as device, open(image, \u0027rb\u0027) as gbs:"},{"line_number":123,"context_line":"            device.reconfigure(0, gbs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_e1007869","line":121,"updated":"2018-09-24 23:37:27.000000000","message":"why are you calling enmerate. would the correct api not be get e.g. fpga.get(object_id\u003dname)  you know that you will only ever want a singel\nitem. if you use the enuerate api you should assert(len(devices)\u003d\u003d1)","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        # this maps to the object_id in OPAE"},{"line_number":120,"context_line":"        # find the device by name"},{"line_number":121,"context_line":"        toks \u003d fpga.enumerate(object_id\u003dname)"},{"line_number":122,"context_line":"        with fpga.open(toks[0]) as device, open(image, \u0027rb\u0027) as gbs:"},{"line_number":123,"context_line":"            device.reconfigure(0, gbs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_81f50487","line":122,"updated":"2018-09-24 23:37:27.000000000","message":"with fpga.open(device[0]) as device, open(image,\u0027rb\u0027) as bitstream.\n    device.reconfigure(0,bitstream)\n\ni know that gbs stands for green bit stream but others will not.\n\nalso what is the meaning of 0\nplease exctract this into a named constant to document its meaning.","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"}],"cyborg/tests/unit/accelerator/drivers/fpga/opae/test_opae_driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        drv \u003d OpaeDriver()"},{"line_number":64,"context_line":"        fpgas \u003d drv.discover()"},{"line_number":65,"context_line":"        fpgas.sort()"},{"line_number":66,"context_line":"        self.assertEqual(expect, fpgas)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_intel_program(self):"},{"line_number":69,"context_line":"        drv \u003d OpaeDriver()"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_a1f2809a","line":66,"updated":"2018-09-24 23:37:27.000000000","message":"i would suggest using assertItemsEqual as that does exactly what you want but\nit was renamed in python3.\nhttps://docs.python.org/2/library/unittest.html#unittest.TestCase.assertItemsEqual\n\nrather then calling sort before please use\nself.assertEqual(sorted(fpgas), sorted(expect))\nalso note that you had reversed the order of the actual and expect\nresult which will lead to confusing error messages if this fails","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        fpgas \u003d drv.discover()"},{"line_number":65,"context_line":"        fpgas.sort()"},{"line_number":66,"context_line":"        self.assertEqual(expect, fpgas)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_intel_program(self):"},{"line_number":69,"context_line":"        drv \u003d OpaeDriver()"},{"line_number":70,"context_line":"        assert drv"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_41efecb0","line":67,"updated":"2018-09-24 23:37:27.000000000","message":"you also need unit tests for cyborg_info, virtfn_info","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_intel_program(self):"},{"line_number":69,"context_line":"        drv \u003d OpaeDriver()"},{"line_number":70,"context_line":"        assert drv"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_61ec68bb","line":70,"updated":"2018-09-24 23:37:27.000000000","message":"this obviously needs to be a really unit test.","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"}],"devstack/lib/opae":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":12,"context_line":"declare -r -g _OPAE_PKG_FNS\u003d1"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"# OPAE packages currently not upstreamed into OS repos"},{"line_number":15,"context_line":"# We can download them from OPAE releases page on GitHub"},{"line_number":16,"context_line":"OPAE_VERSION\u003d\"1.1.0-2\""},{"line_number":17,"context_line":"OPAE_GITHUB\u003d\"https://github.com/OPAE/opae-sdk/releases/download/$OPAE_VERSION\""},{"line_number":18,"context_line":"OPAE_DEVEL\u003d\"opae-devel-$OPAE_VERSION.x86_64\""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"3f79a3b5_61bea8af","line":15,"updated":"2018-09-24 23:37:27.000000000","message":"these varibales should be defiend in the settings file and should allow user overrides\nusing the varname\u003d${varname:-default} syntax.\nsee https://github.com/openstack/networking-ovs-dpdk/blob/master/devstack/settings\nfor an example.\n\nthe lib files should only contain fucntions and sourceing them should have no side effects beyond making the functions vailably to be called from plugin.sh.","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"9f1f21cdfd4fc3d2ab48d9022ff0321755783e16","unresolved":false,"context_lines":[{"line_number":12,"context_line":"declare -r -g _OPAE_PKG_FNS\u003d1"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"# OPAE packages currently not upstreamed into OS repos"},{"line_number":15,"context_line":"# We can download them from OPAE releases page on GitHub"},{"line_number":16,"context_line":"OPAE_VERSION\u003d\"1.1.0-2\""},{"line_number":17,"context_line":"OPAE_GITHUB\u003d\"https://github.com/OPAE/opae-sdk/releases/download/$OPAE_VERSION\""},{"line_number":18,"context_line":"OPAE_DEVEL\u003d\"opae-devel-$OPAE_VERSION.x86_64\""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"3f79a3b5_fb9fd1f3","line":15,"in_reply_to":"3f79a3b5_61bea8af","updated":"2018-11-14 04:47:11.000000000","message":"Agreed.","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":17,"context_line":"OPAE_GITHUB\u003d\"https://github.com/OPAE/opae-sdk/releases/download/$OPAE_VERSION\""},{"line_number":18,"context_line":"OPAE_DEVEL\u003d\"opae-devel-$OPAE_VERSION.x86_64\""},{"line_number":19,"context_line":"OPAE_LIBS\u003d\"opae-libs-$OPAE_VERSION.x86_64\""},{"line_number":20,"context_line":"YUMEXE\u003d\"$(which yum)\""},{"line_number":21,"context_line":"APTEXE\u003d\"$(which apt-get)\""},{"line_number":22,"context_line":"ZYPPEREXE\u003d\"$(which zypper)\""},{"line_number":23,"context_line":"if [[ \"$YUMEXE\" !\u003d \"\" ]]; then"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"3f79a3b5_01d9f426","line":20,"updated":"2018-09-24 23:37:27.000000000","message":"devstack has functions for determining disto built in.\nyou should use the is_ubuntu et all function to determin this if required however using bindeps is a better solution longertem,\nhttps://docs.openstack.org/infra/bindep/readme.html","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"9f1f21cdfd4fc3d2ab48d9022ff0321755783e16","unresolved":false,"context_lines":[{"line_number":17,"context_line":"OPAE_GITHUB\u003d\"https://github.com/OPAE/opae-sdk/releases/download/$OPAE_VERSION\""},{"line_number":18,"context_line":"OPAE_DEVEL\u003d\"opae-devel-$OPAE_VERSION.x86_64\""},{"line_number":19,"context_line":"OPAE_LIBS\u003d\"opae-libs-$OPAE_VERSION.x86_64\""},{"line_number":20,"context_line":"YUMEXE\u003d\"$(which yum)\""},{"line_number":21,"context_line":"APTEXE\u003d\"$(which apt-get)\""},{"line_number":22,"context_line":"ZYPPEREXE\u003d\"$(which zypper)\""},{"line_number":23,"context_line":"if [[ \"$YUMEXE\" !\u003d \"\" ]]; then"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"3f79a3b5_bbde760c","line":20,"in_reply_to":"3f79a3b5_01d9f426","updated":"2018-11-14 04:47:11.000000000","message":"+1","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    PKG_INSTALL\u003d\"$ZYPPEREXE in\""},{"line_number":34,"context_line":"    PKG_UNINSTALL\u003d\"$ZYPPEREXE rm\""},{"line_number":35,"context_line":"fi"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"function download_opae_packages {"},{"line_number":38,"context_line":"    if [[ \"$OPAE_DEVEL\" !\u003d \"\" ]]; then"},{"line_number":39,"context_line":"        curl -o /tmp/$OPAE_LIBS.$PKG_EXT \"$OPAE_GITHUB/$OPAE_LIBS.$PKG_EXT\""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"3f79a3b5_21de7010","line":36,"updated":"2018-09-24 23:37:27.000000000","message":"you can delete form line 20 to here once you swap to bindeps","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"}],"devstack/plugin.sh":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2b6f5f3e2bc6f5f6d18813a9baa28768a9366517","unresolved":false,"context_lines":[{"line_number":11,"context_line":"if is_service_enabled cyborg-api cyborg-cond; then"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    if [[ \"$1\" \u003d\u003d \"stack\" ]]; then"},{"line_number":14,"context_line":"\tif [[ \"$2\" \u003d\u003d \"pre-install\" ]]; then"},{"line_number":15,"context_line":"\t# stack/pre-install - Called after (OS) setup is complete and before"},{"line_number":16,"context_line":"\t# project source is installed"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-sh","patch_set":4,"id":"3f79a3b5_184fc58d","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":1},"updated":"2018-11-21 13:40:04.000000000","message":"tabs\nhere and below need to be converted to spaces.\n\nthis is being moved out to a seperate patch however so this file and the other devstack changes can just be removed form this patch","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"            echo_summary \"Installing additional packages\""},{"line_number":19,"context_line":"\t    download_opae_packages"},{"line_number":20,"context_line":"\t    install_opae_packages"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"        elif [[ \"$2\" \u003d\u003d \"install\" ]]; then"},{"line_number":23,"context_line":"        # stack/install - Called after the layer 1 and 2 projects source and"}],"source_content_type":"text/x-sh","patch_set":4,"id":"3f79a3b5_0127b420","line":20,"updated":"2018-09-24 23:37:27.000000000","message":"technically this should be in the install phase","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"9f1f21cdfd4fc3d2ab48d9022ff0321755783e16","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"            echo_summary \"Installing additional packages\""},{"line_number":19,"context_line":"\t    download_opae_packages"},{"line_number":20,"context_line":"\t    install_opae_packages"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"        elif [[ \"$2\" \u003d\u003d \"install\" ]]; then"},{"line_number":23,"context_line":"        # stack/install - Called after the layer 1 and 2 projects source and"}],"source_content_type":"text/x-sh","patch_set":4,"id":"3f79a3b5_3ba4a6a3","line":20,"in_reply_to":"3f79a3b5_0127b420","updated":"2018-11-14 04:47:11.000000000","message":"https://docs.openstack.org/devstack/latest/plugins.html says:\n   pre-install - Called after system (OS) setup is complete and before project source is installed.\n   install - Called after the layer 1 and 2 projects source and their dependencies have been installed.\n\nSo, we should get the dependencies taken care of in pre-install.","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2b6f5f3e2bc6f5f6d18813a9baa28768a9366517","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"            echo_summary \"Installing additional packages\""},{"line_number":19,"context_line":"\t    download_opae_packages"},{"line_number":20,"context_line":"\t    install_opae_packages"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"        elif [[ \"$2\" \u003d\u003d \"install\" ]]; then"},{"line_number":23,"context_line":"        # stack/install - Called after the layer 1 and 2 projects source and"}],"source_content_type":"text/x-sh","patch_set":4,"id":"3f79a3b5_581e9d75","line":20,"in_reply_to":"3f79a3b5_3ba4a6a3","updated":"2018-11-21 13:40:04.000000000","message":"it depends. \n\nin general the pre-install phases is used to download depencies and install build tools like gcc or system service like openvswitch.\n\nopae is border line i would generally move the install to the install phase bug leave the download here","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"}],"requirements.txt":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a2c18c4b8455162d1f78a0bad6237caed74ceab","unresolved":false,"context_lines":[{"line_number":25,"context_line":"jsonpatch\u003e\u003d1.16,!\u003d1.20 # BSD"},{"line_number":26,"context_line":"psutil\u003e\u003d3.2.2 # BSD"},{"line_number":27,"context_line":"mock\u003e\u003d2.0.0 # BSD"},{"line_number":28,"context_line":"opae.fpga\u003e\u003d1.1 # BSD"}],"source_content_type":"text/plain","patch_set":4,"id":"3f79a3b5_c130dc58","line":28,"updated":"2018-09-24 23:37:27.000000000","message":"longterm we will not want to require all vendor driver deps to be installed in order to install cyborg so we might want to consider what driver are intree vers in seperare vendor pluin repos or haveing a per plugin requirements.txt. for now this is ok but you will also need to add opae.fpga to the lower constratins and perhapses to the upstream requirements repo too.","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2b6f5f3e2bc6f5f6d18813a9baa28768a9366517","unresolved":false,"context_lines":[{"line_number":25,"context_line":"jsonpatch\u003e\u003d1.16,!\u003d1.20 # BSD"},{"line_number":26,"context_line":"psutil\u003e\u003d3.2.2 # BSD"},{"line_number":27,"context_line":"mock\u003e\u003d2.0.0 # BSD"},{"line_number":28,"context_line":"opae.fpga\u003e\u003d1.1 # BSD"}],"source_content_type":"text/plain","patch_set":4,"id":"3f79a3b5_3873a1e7","line":28,"in_reply_to":"3f79a3b5_5bb882bf","updated":"2018-11-21 13:40:04.000000000","message":"the devstack plugin can have config option to say which intree plugin to install but it can default to installing all of them.\n\nwhat i was refering to was the setuptools extras feature.\n\nhttps://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies\n\nthe other way to enable it would for each in tree driver to have its own requirements.txt that the devstack plugin and tox configs used in addtion to the main requirements file.","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"9f1f21cdfd4fc3d2ab48d9022ff0321755783e16","unresolved":false,"context_lines":[{"line_number":25,"context_line":"jsonpatch\u003e\u003d1.16,!\u003d1.20 # BSD"},{"line_number":26,"context_line":"psutil\u003e\u003d3.2.2 # BSD"},{"line_number":27,"context_line":"mock\u003e\u003d2.0.0 # BSD"},{"line_number":28,"context_line":"opae.fpga\u003e\u003d1.1 # BSD"}],"source_content_type":"text/plain","patch_set":4,"id":"3f79a3b5_5bb882bf","line":28,"in_reply_to":"3f79a3b5_c130dc58","updated":"2018-11-14 04:47:11.000000000","message":"Good point. Could you elaborate on the per-plugin requirements? Cyborg has one devstack plugin, and it has to handle all in-tree drivers, right?","commit_id":"411755860049e5db50ecdaa0956cf9e9d1b4f5f0"}]}
