)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"ab156fb69238ff0fcb589461e70f12e4e432975c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow custom swift configuration directory"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"SWIFT_ROOT environment variable allows to override default swift_dir"},{"line_number":10,"context_line":"which is /etc/swift. When not set, defaults to /etc/swift"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch was done in the context of setting up multiple Swift"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7a77a97e_19894fcb","line":9,"updated":"2016-11-14 18:40:16.000000000","message":"nit: This sounds a bit as if SWIFT_ROOT is already existing. Maybe reword it to:\n \"Introducing SWIFT_ROOT environment variable that allows..\"","commit_id":"73df886e8bb9abae67e015488dff048504b4a423"}],"swift/common/manager.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8444d2bee0f52a847dda3b4de17dfd693b6b4553","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from swift.common.exceptions import InvalidPidFileException"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# SWIFT_ROOT is set in common.utils and passed down to here"},{"line_number":32,"context_line":"SWIFT_DIR \u003d SWIFT_ROOT"},{"line_number":33,"context_line":"RUN_DIR \u003d \u0027/var/run/swift\u0027"},{"line_number":34,"context_line":"PROC_DIR \u003d \u0027/proc\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_82864911","line":31,"updated":"2016-11-25 14:08:56.000000000","message":"looking at this again, we could just use the imported value from utils rather than assigning, especially if their names were the same i.e. if in utils we had \n\n  SWIFT_DIR \u003d os.environ.get(\u0027SWIFT_DIR\u0027, \u0027/etc/swift\u0027)\n\nwhich I realise changes your whole choice of name but might be worth reconsidering.\n\nOr \n\nfrom utils import SWIFT_ROOT as SWIFT_DIR\n\nOr rename SWIFT_ROOT here. Using the same name for the same thing throughout the repo seems a good thing IMHO :)\n\nAnyway, I don\u0027t think that gets you off the hook w.r.t. testing.","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# SWIFT_ROOT is set in common.utils and passed down to here"},{"line_number":32,"context_line":"SWIFT_DIR \u003d SWIFT_ROOT"},{"line_number":33,"context_line":"RUN_DIR \u003d \u0027/var/run/swift\u0027"},{"line_number":34,"context_line":"PROC_DIR \u003d \u0027/proc\u0027"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_291f3260","line":32,"updated":"2016-11-16 15:59:49.000000000","message":"no test fails if I revert this change","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"33029f9553ea4ea517b40e556639c55c6da0178a","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# SWIFT_ROOT is set in common.utils and passed down to here"},{"line_number":32,"context_line":"SWIFT_DIR \u003d SWIFT_ROOT"},{"line_number":33,"context_line":"RUN_DIR \u003d \u0027/var/run/swift\u0027"},{"line_number":34,"context_line":"PROC_DIR \u003d \u0027/proc\u0027"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_ae3b9637","line":32,"in_reply_to":"7a77a97e_291f3260","updated":"2016-11-22 22:30:03.000000000","message":"Yes, agree that tests aren\u0027t failing with reverting SWIFT_ROOT to \u0027/etc/swift\u0027. However, manager.py is the starting point for all the swift command line utilities and they fail to look for config files under /etc/myswiftdir if not set here. I tried the following:\n\n1. revert SWIFT_ROOT to \u0027/etc/swift\u0027\n2. move all the config files to \u0027/etc/myswiftdir\u0027\n3. export SWIFT_ROOT\u003d/etc/myswiftdir\n4. swift-init restart main --\u003e Fails!","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8444d2bee0f52a847dda3b4de17dfd693b6b4553","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# SWIFT_ROOT is set in common.utils and passed down to here"},{"line_number":32,"context_line":"SWIFT_DIR \u003d SWIFT_ROOT"},{"line_number":33,"context_line":"RUN_DIR \u003d \u0027/var/run/swift\u0027"},{"line_number":34,"context_line":"PROC_DIR \u003d \u0027/proc\u0027"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_0248795a","line":32,"in_reply_to":"7a77a97e_ae3b9637","updated":"2016-11-25 14:08:56.000000000","message":"We need to catch regression before someone runs swift-init, plus I think you only see that fail because you moved rather than copied the files:\n\nrevert so that SWIFT_DIR \u003d \u0027/etc/swift\u0027\n\n*copy* files to /etc/myswift\nunset swift_hash_path_prefix/suffix\n\n  $ SWIFT_ROOT\u003d/etc/myswift swift-init restart proxy\nSignal proxy-server  pid: 33841  signal: 15\nNo proxy-server running\nWARNING: Unable to modify file descriptor limit.  Running as non-root?\nStarting proxy-server...(/etc/swift/proxy-server.conf)\nError: [swift-hash]: both swift_hash_path_suffix and swift_hash_path_prefix are missing from /etc/myswift/swift.conf\n\nnote two different paths reported. In manager.py, where are the conf files and pid files now read from?\n\nThat only fails because I had no swift_hash_path_prefix, if i fix that proxy starts ok but using /etc/swift\n\n  $ SWIFT_ROOT\u003d/etc/myswift swift-init restart proxy\nSignal proxy-server  pid: 34132  signal: 15\nproxy-server (34132) appears to have stopped\nWARNING: Unable to modify file descriptor limit.  Running as non-root?\nStarting proxy-server...(/etc/swift/proxy-server.conf)","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"fc8cf43856dc50efa7bd7dfd3f0ed0bdd84f6bb9","unresolved":false,"context_lines":[{"line_number":24,"context_line":"import re"},{"line_number":25,"context_line":"from swift import gettext_ as _"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from swift.common.utils import search_tree, remove_file, write_file, SWIFT_ROOT"},{"line_number":28,"context_line":"from swift.common.exceptions import InvalidPidFileException"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da36d5c6_f64b8429","line":27,"updated":"2017-02-25 19:44:44.000000000","message":"as SWIFT_DIR\n\n?","commit_id":"7945ade2643abd2240a405951ebd76f9d6f5f7fc"}],"swift/common/middleware/memcache.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        if (not self.memcache_servers"},{"line_number":44,"context_line":"                or serialization_format is None"},{"line_number":45,"context_line":"                or max_conns \u003c\u003d 0):"},{"line_number":46,"context_line":"            path \u003d os.path.join(conf.get(\u0027swift_dir\u0027, SWIFT_ROOT),"},{"line_number":47,"context_line":"                                \u0027memcache.conf\u0027)"},{"line_number":48,"context_line":"            memcache_conf \u003d ConfigParser()"},{"line_number":49,"context_line":"            if memcache_conf.read(path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_69068acf","line":46,"updated":"2016-11-16 15:59:49.000000000","message":"no test fails if i revert this change\n\nsee suggestions in test_memcache","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"33029f9553ea4ea517b40e556639c55c6da0178a","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        if (not self.memcache_servers"},{"line_number":44,"context_line":"                or serialization_format is None"},{"line_number":45,"context_line":"                or max_conns \u003c\u003d 0):"},{"line_number":46,"context_line":"            path \u003d os.path.join(conf.get(\u0027swift_dir\u0027, SWIFT_ROOT),"},{"line_number":47,"context_line":"                                \u0027memcache.conf\u0027)"},{"line_number":48,"context_line":"            memcache_conf \u003d ConfigParser()"},{"line_number":49,"context_line":"            if memcache_conf.read(path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_cf2fba9f","line":46,"in_reply_to":"7a77a97e_69068acf","updated":"2016-11-22 22:30:03.000000000","message":"At this point swift_dir is not yet set, and by reverting, it defaults to \u0027/etc/swift\u0027 which is not the case for us. Test case [1] proves that memcache.conf is being looked up in the wrong location. Here are the steps to produce\n\n1. revert SWIFT_ROOT to \u0027etc/swift\u0027\n2. export SWIFT_ROOT\u003d\u0027/etc/myswiftdir\u0027\n3. mv /etc/swift/memcache.conf /etc/myswiftdir/\n4. run the test case [1] --\u003eFails!\n\n[1] https://github.com/openstack/swift/blob/master/test/unit/common/middleware/test_memcache.py#L110","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8444d2bee0f52a847dda3b4de17dfd693b6b4553","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        if (not self.memcache_servers"},{"line_number":44,"context_line":"                or serialization_format is None"},{"line_number":45,"context_line":"                or max_conns \u003c\u003d 0):"},{"line_number":46,"context_line":"            path \u003d os.path.join(conf.get(\u0027swift_dir\u0027, SWIFT_ROOT),"},{"line_number":47,"context_line":"                                \u0027memcache.conf\u0027)"},{"line_number":48,"context_line":"            memcache_conf \u003d ConfigParser()"},{"line_number":49,"context_line":"            if memcache_conf.read(path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_c5e5aa38","line":46,"in_reply_to":"7a77a97e_cf2fba9f","updated":"2016-11-25 14:08:56.000000000","message":"ok, yes i see the test fail. you don\u0027t need to mv memcache.conf, it is not read by the test (see ExcConfigParser)\n\nthe test only fails because SWIFT_ROOT set in the env. IMHO tests should not rely on env vars. Also tests should not rely on the existence of or contents of /etc/swift (although some tests do read that dir IF it exists, it should not be a requirement for it to exist).","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"}],"swift/common/utils.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5d10a0cf921fdd883151d94e958fecf5e872d5a7","unresolved":false,"context_lines":[{"line_number":165,"context_line":"# make use of SWIFT_ROOT if set, otherwise use default"},{"line_number":166,"context_line":"SWIFT_ROOT \u003d os.environ.get(\u0027SWIFT_ROOT\u0027)"},{"line_number":167,"context_line":"if SWIFT_ROOT is None:"},{"line_number":168,"context_line":"    SWIFT_ROOT \u003d \u0027/etc/swift\u0027"},{"line_number":169,"context_line":"SWIFT_CONF_FILE \u003d os.path.join(SWIFT_ROOT, \u0027swift.conf\u0027)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"# These constants are Linux-specific, and Python doesn\u0027t seem to know"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_a0e1ccd2","line":168,"updated":"2016-11-07 04:28:33.000000000","message":"You can simplify this by setting the default value in get:\n\n   SWIFT_ROOT \u003d os.environ.get(\u0027SWIFT_ROOT\u0027, \u0027/etc/swift\u0027)\n\nThen you don\u0027t need the if anymore.","commit_id":"085a49645f255177808e8e168fa326ec6782a62f"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"a4b519a9cd71a6a49663b133a73c267e76d14f1d","unresolved":false,"context_lines":[{"line_number":165,"context_line":"# make use of SWIFT_ROOT if set, otherwise use default"},{"line_number":166,"context_line":"SWIFT_ROOT \u003d os.environ.get(\u0027SWIFT_ROOT\u0027)"},{"line_number":167,"context_line":"if SWIFT_ROOT is None:"},{"line_number":168,"context_line":"    SWIFT_ROOT \u003d \u0027/etc/swift\u0027"},{"line_number":169,"context_line":"SWIFT_CONF_FILE \u003d os.path.join(SWIFT_ROOT, \u0027swift.conf\u0027)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"# These constants are Linux-specific, and Python doesn\u0027t seem to know"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_12367003","line":168,"in_reply_to":"ba5da102_a0e1ccd2","updated":"2016-11-07 15:25:26.000000000","message":"Done","commit_id":"085a49645f255177808e8e168fa326ec6782a62f"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5d10a0cf921fdd883151d94e958fecf5e872d5a7","unresolved":false,"context_lines":[{"line_number":166,"context_line":"SWIFT_ROOT \u003d os.environ.get(\u0027SWIFT_ROOT\u0027)"},{"line_number":167,"context_line":"if SWIFT_ROOT is None:"},{"line_number":168,"context_line":"    SWIFT_ROOT \u003d \u0027/etc/swift\u0027"},{"line_number":169,"context_line":"SWIFT_CONF_FILE \u003d os.path.join(SWIFT_ROOT, \u0027swift.conf\u0027)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"# These constants are Linux-specific, and Python doesn\u0027t seem to know"},{"line_number":172,"context_line":"# about them. We ask anyway just in case that ever gets fixed."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_e0b4a4d2","line":169,"updated":"2016-11-07 04:28:33.000000000","message":"We don\u0027t need to set SWIFT_CONF_FILE as \u0027\u0027 and then define it a few lines down, we could just have:\n\n  SWIFT_ROOT \u003d os.environ.get(\u0027SWIFT_ROOT\u0027, \u0027/etc/swift\u0027)\n  SWIFT_CONF_FILE \u003d os.path.join(SWIFT_ROOT, \u0027swift.conf\u0027)","commit_id":"085a49645f255177808e8e168fa326ec6782a62f"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"a4b519a9cd71a6a49663b133a73c267e76d14f1d","unresolved":false,"context_lines":[{"line_number":166,"context_line":"SWIFT_ROOT \u003d os.environ.get(\u0027SWIFT_ROOT\u0027)"},{"line_number":167,"context_line":"if SWIFT_ROOT is None:"},{"line_number":168,"context_line":"    SWIFT_ROOT \u003d \u0027/etc/swift\u0027"},{"line_number":169,"context_line":"SWIFT_CONF_FILE \u003d os.path.join(SWIFT_ROOT, \u0027swift.conf\u0027)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"# These constants are Linux-specific, and Python doesn\u0027t seem to know"},{"line_number":172,"context_line":"# about them. We ask anyway just in case that ever gets fixed."}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_323b74ed","line":169,"in_reply_to":"ba5da102_e0b4a4d2","updated":"2016-11-07 15:25:26.000000000","message":"Done","commit_id":"085a49645f255177808e8e168fa326ec6782a62f"}],"swift/proxy/server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self._error_limiting \u003d {}"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        swift_dir \u003d conf.get(\u0027swift_dir\u0027, SWIFT_ROOT)"},{"line_number":94,"context_line":"        self.swift_dir \u003d swift_dir"},{"line_number":95,"context_line":"        self.node_timeout \u003d float(conf.get(\u0027node_timeout\u0027, 10))"},{"line_number":96,"context_line":"        self.recoverable_node_timeout \u003d float("}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_e940daa7","line":93,"updated":"2016-11-16 15:59:49.000000000","message":"no tests fail if I revert this cahnge","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"33029f9553ea4ea517b40e556639c55c6da0178a","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self._error_limiting \u003d {}"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        swift_dir \u003d conf.get(\u0027swift_dir\u0027, SWIFT_ROOT)"},{"line_number":94,"context_line":"        self.swift_dir \u003d swift_dir"},{"line_number":95,"context_line":"        self.node_timeout \u003d float(conf.get(\u0027node_timeout\u0027, 10))"},{"line_number":96,"context_line":"        self.recoverable_node_timeout \u003d float("}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_cf6097a7","line":93,"in_reply_to":"7a77a97e_e940daa7","updated":"2016-11-22 22:30:03.000000000","message":"This is an interesting place to make changes. I was initially and am still trying to understand what is the significance of having a key named \u0027here\u0027 in the conf dictionary. At this point, \u0027/etc/swift\u0027 is being passed under the key \u0027here\u0027 which I believe is being set here [1]. While, we are looking to extract it from \u0027swift_dir\u0027 key which has not been set yet. By reverting this, swift_dir gets set to wrong path and will not find ring data etc. I tested in the following manner:\n\n1. revert SWIFT_ROOT to \u0027/etc/swift\u0027\n2. export SWIFT_ROOT\u003d/etc/myswiftdir\n3. mv /etc/swift/*.gz /etc/myswiftdir\n4. swift-init restart main --\u003e Fails!\n\n[1] https://github.com/openstack/swift/blob/master/swift/common/wsgi.py#L83","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"}],"test/unit/__init__.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5d10a0cf921fdd883151d94e958fecf5e872d5a7","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"EMPTY_ETAG \u003d md5().hexdigest()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"TEST_SWIFT_DIR \u003d os.environ.get(\u0027SWIFT_ROOT\u0027)"},{"line_number":61,"context_line":"if TEST_SWIFT_DIR is None:"},{"line_number":62,"context_line":"    TEST_SWIFT_DIR \u003d \u0027/etc/swift\u0027"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_a0f2ac6d","line":60,"updated":"2016-11-07 04:28:33.000000000","message":"Same here:\n\n  TEST_SWIFT_DIR \u003d os.environ.get(\u0027SWIFT_ROOT\u0027, \u0027/etc/swift\u0027)","commit_id":"085a49645f255177808e8e168fa326ec6782a62f"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"a4b519a9cd71a6a49663b133a73c267e76d14f1d","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"EMPTY_ETAG \u003d md5().hexdigest()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"TEST_SWIFT_DIR \u003d os.environ.get(\u0027SWIFT_ROOT\u0027)"},{"line_number":61,"context_line":"if TEST_SWIFT_DIR is None:"},{"line_number":62,"context_line":"    TEST_SWIFT_DIR \u003d \u0027/etc/swift\u0027"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_7225ecc0","line":60,"in_reply_to":"ba5da102_a0f2ac6d","updated":"2016-11-07 15:25:26.000000000","message":"Done","commit_id":"085a49645f255177808e8e168fa326ec6782a62f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"EMPTY_ETAG \u003d md5().hexdigest()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"TEST_SWIFT_DIR \u003d os.environ.get(\u0027SWIFT_ROOT\u0027, \u0027/etc/swift\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"# try not to import this module from swift"},{"line_number":63,"context_line":"if not os.path.basename(sys.argv[0]).startswith(\u0027swift\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_177e1219","line":60,"updated":"2016-11-16 15:59:49.000000000","message":"can\u0027t we just import utils.SWIFT_ROOT in the places we need it and remove this line?","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"33029f9553ea4ea517b40e556639c55c6da0178a","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"EMPTY_ETAG \u003d md5().hexdigest()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"TEST_SWIFT_DIR \u003d os.environ.get(\u0027SWIFT_ROOT\u0027, \u0027/etc/swift\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"# try not to import this module from swift"},{"line_number":63,"context_line":"if not os.path.basename(sys.argv[0]).startswith(\u0027swift\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_6fadc387","line":60,"in_reply_to":"7a77a97e_177e1219","updated":"2016-11-22 22:30:03.000000000","message":"Agree.","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"}],"test/unit/cli/test_recon.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                os.path.join(TEST_SWIFT_DIR, \"object.ring.gz\"):"},{"line_number":283,"context_line":"                    empty_file_hash,"},{"line_number":284,"context_line":"                os.path.join(TEST_SWIFT_DIR, \"object-1.ring.gz\"):"},{"line_number":285,"context_line":"                    empty_file_hash,"},{"line_number":286,"context_line":"            }"},{"line_number":287,"context_line":"            status \u003d 200"},{"line_number":288,"context_line":"            scout_instance.scout.return_value \u003d (url, response, status, 0, 0)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_d6102004","line":285,"updated":"2016-11-16 15:59:49.000000000","message":"I don\u0027t think these changes are necessary. These are just fake values for the ring file path returned in the mocked scout response. Their values are not even asserted, and they should not need to depend upon SWIFT_ROOT env var.","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"33029f9553ea4ea517b40e556639c55c6da0178a","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                os.path.join(TEST_SWIFT_DIR, \"object.ring.gz\"):"},{"line_number":283,"context_line":"                    empty_file_hash,"},{"line_number":284,"context_line":"                os.path.join(TEST_SWIFT_DIR, \"object-1.ring.gz\"):"},{"line_number":285,"context_line":"                    empty_file_hash,"},{"line_number":286,"context_line":"            }"},{"line_number":287,"context_line":"            status \u003d 200"},{"line_number":288,"context_line":"            scout_instance.scout.return_value \u003d (url, response, status, 0, 0)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_356530e1","line":285,"in_reply_to":"7a77a97e_d6102004","updated":"2016-11-22 22:30:03.000000000","message":"Agree","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":674,"context_line":"            (\u002710.1.1.1\u0027, 10000, \u0027swiftconfmd5\u0027):"},{"line_number":675,"context_line":"            json.dumps({os.path.join(TEST_SWIFT_DIR, \"swift.conf\"): cksum}),"},{"line_number":676,"context_line":"            (\u002710.2.2.2\u0027, 10000, \u0027swiftconfmd5\u0027):"},{"line_number":677,"context_line":"            json.dumps({os.path.join(TEST_SWIFT_DIR, \"swift.conf\"): cksum})}"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        printed \u003d []"},{"line_number":680,"context_line":"        with self.mock_responses(responses):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_f17286ac","line":677,"updated":"2016-11-16 15:59:49.000000000","message":"As above, change not needed - the test does not read the TEST_SWIFT_DIR because it mocks recon\u0027s \u0027_md5_file\u0027 method","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"33029f9553ea4ea517b40e556639c55c6da0178a","unresolved":false,"context_lines":[{"line_number":674,"context_line":"            (\u002710.1.1.1\u0027, 10000, \u0027swiftconfmd5\u0027):"},{"line_number":675,"context_line":"            json.dumps({os.path.join(TEST_SWIFT_DIR, \"swift.conf\"): cksum}),"},{"line_number":676,"context_line":"            (\u002710.2.2.2\u0027, 10000, \u0027swiftconfmd5\u0027):"},{"line_number":677,"context_line":"            json.dumps({os.path.join(TEST_SWIFT_DIR, \"swift.conf\"): cksum})}"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        printed \u003d []"},{"line_number":680,"context_line":"        with self.mock_responses(responses):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_9bfe3304","line":677,"in_reply_to":"7a77a97e_f17286ac","updated":"2016-11-22 22:30:03.000000000","message":"I will need to look deeper to defend the use of SWIFT_ROOT here.","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":693,"context_line":"            (\u002710.1.1.1\u0027, 10000, \u0027swiftconfmd5\u0027):"},{"line_number":694,"context_line":"            json.dumps({os.path.join(TEST_SWIFT_DIR, \"swift.conf\"): cksum}),"},{"line_number":695,"context_line":"            (\u002710.2.2.2\u0027, 10000, \u0027swiftconfmd5\u0027):"},{"line_number":696,"context_line":"            json.dumps({os.path.join(TEST_SWIFT_DIR, \"swift.conf\"): \u0027bogus\u0027})}"},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"        printed \u003d []"},{"line_number":699,"context_line":"        with self.mock_responses(responses):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_919cf2c1","line":696,"updated":"2016-11-16 15:59:49.000000000","message":"Ditto, not necessary","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"}],"test/unit/common/middleware/test_memcache.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from swift.common.swob import Request"},{"line_number":26,"context_line":"from swift.common.wsgi import loadapp"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from test.unit import with_tempdir, patch_policies, TEST_SWIFT_DIR"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class FakeApp(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_51509a5d","line":28,"updated":"2016-11-16 15:59:49.000000000","message":"why not just import utils.SWIFT_ROOT ?","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"33029f9553ea4ea517b40e556639c55c6da0178a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from swift.common.swob import Request"},{"line_number":26,"context_line":"from swift.common.wsgi import loadapp"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from test.unit import with_tempdir, patch_policies, TEST_SWIFT_DIR"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class FakeApp(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_6fdb031c","line":28,"in_reply_to":"7a77a97e_51509a5d","updated":"2016-11-22 22:30:03.000000000","message":"Done","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                    self.assertEqual("},{"line_number":130,"context_line":"                        str(err),"},{"line_number":131,"context_line":"                        \"read called with \u0027%s\u0027\" % ("},{"line_number":132,"context_line":"                            os.path.join(TEST_SWIFT_DIR, \"memcache.conf\")))"},{"line_number":133,"context_line":"                    count +\u003d 1"},{"line_number":134,"context_line":"        finally:"},{"line_number":135,"context_line":"            memcache.ConfigParser \u003d orig_parser"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_9161523c","line":132,"updated":"2016-11-16 15:59:49.000000000","message":"ok. this is necessary because memcache will use SWIFT_ROOT as the path to memcache.conf and SWIFT_ROOT may be set to a non-default path when running the tests.\n\nI\u0027d prefer to just see SWIFT_ROOT used here rather than TEST_SWIFT_DIR\n\nI\u0027d prefer to also see SWIFT_ROOT mocked here so that always assert its value is being used, e.g:\n\n                with self.assertRaises(Exception) as cm:\n                    memcache.MemcacheMiddleware(FakeApp(), d)\n                self.assertEqual(str(cm.exception),\n                        \"read called with \u0027%s\u0027\" % (\n                        os.path.join(TEST_SWIFT_DIR, \"memcache.conf\")))\n                with mock.patch(\"swift.common.middleware.memcache.SWIFT_ROOT\",\n                                \"/etc/myswiftdir\"):\n                    with self.assertRaises(Exception) as cm:\n                        memcache.MemcacheMiddleware(FakeApp(), d)\n                self.assertEqual(str(cm.exception),\n                        \"read called with \u0027%s\u0027\" % (\n                        os.path.join(\"/etc/myswiftdir\", \"memcache.conf\")))","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"}],"test/unit/common/middleware/test_recon.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        return {\u0027ringmd5test\u0027: \"1\"}"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def fake_swiftconfmd5(self):"},{"line_number":184,"context_line":"        return {os.path.join(TEST_SWIFT_DIR, \"swift.conf\"): \"abcdef\"}"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def fake_quarantined(self):"},{"line_number":187,"context_line":"        return {\u0027quarantinedtest\u0027: \"1\"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_fc5c1def","line":184,"updated":"2016-11-16 15:59:49.000000000","message":"not necessary - the fake can return whatever path it likes","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8444d2bee0f52a847dda3b4de17dfd693b6b4553","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        return {\u0027ringmd5test\u0027: \"1\"}"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def fake_swiftconfmd5(self):"},{"line_number":184,"context_line":"        return {os.path.join(TEST_SWIFT_DIR, \"swift.conf\"): \"abcdef\"}"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def fake_quarantined(self):"},{"line_number":187,"context_line":"        return {\u0027quarantinedtest\u0027: \"1\"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_85dd72e2","line":184,"in_reply_to":"7a77a97e_81674eb6","updated":"2016-11-25 14:08:56.000000000","message":"the test at line 1333 is just asserting that the response for a request to url /recon/swiftconfmd5 is whatever is returned by the recon middleware\u0027s get_swift_conf_md5 method. Here that method is monkey patched with fake_swiftconfmd5. So as long as the value returned here and the value expected at line 1334 are the same then the test is ok. Its not relevant whether SWIFT_DIR has been set in the env or not, for this test.","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"33029f9553ea4ea517b40e556639c55c6da0178a","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        return {\u0027ringmd5test\u0027: \"1\"}"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def fake_swiftconfmd5(self):"},{"line_number":184,"context_line":"        return {os.path.join(TEST_SWIFT_DIR, \"swift.conf\"): \"abcdef\"}"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def fake_quarantined(self):"},{"line_number":187,"context_line":"        return {\u0027quarantinedtest\u0027: \"1\"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_81674eb6","line":184,"in_reply_to":"7a77a97e_fc5c1def","updated":"2016-11-22 22:30:03.000000000","message":"when reverting, this method is being called at [1] to set the value of get_swift_md5_conf, this will pass the wrong path \u0027etc/swift\u0027 even though SWIFT_ROOT is set in the environment which will lead to failed assertion at [2]. \n\n[1]https://github.com/openstack/swift/blob/2aa5811c7fdf86df302f5ce8b0413bf51e86e7ab/test/unit/common/middleware/test_recon.py#L1139\n[2] https://github.com/openstack/swift/blob/2aa5811c7fdf86df302f5ce8b0413bf51e86e7ab/test/unit/common/middleware/test_recon.py#L1333","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"    def test_recon_get_swiftconfmd5(self):"},{"line_number":1334,"context_line":"        get_swiftconfmd5_resp \u003d [\u0027{\"%s/%s\": \"abcdef\"}\u0027 % ("},{"line_number":1335,"context_line":"            TEST_SWIFT_DIR, \"swift.conf\")]"},{"line_number":1336,"context_line":"        req \u003d Request.blank(\u0027/recon/swiftconfmd5\u0027,"},{"line_number":1337,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":1338,"context_line":"        resp \u003d self.app(req.environ, start_response)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_bc09c5df","line":1335,"updated":"2016-11-16 15:59:49.000000000","message":"not necessary - see line 184","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"33029f9553ea4ea517b40e556639c55c6da0178a","unresolved":false,"context_lines":[{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"    def test_recon_get_swiftconfmd5(self):"},{"line_number":1334,"context_line":"        get_swiftconfmd5_resp \u003d [\u0027{\"%s/%s\": \"abcdef\"}\u0027 % ("},{"line_number":1335,"context_line":"            TEST_SWIFT_DIR, \"swift.conf\")]"},{"line_number":1336,"context_line":"        req \u003d Request.blank(\u0027/recon/swiftconfmd5\u0027,"},{"line_number":1337,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":1338,"context_line":"        resp \u003d self.app(req.environ, start_response)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_01aede97","line":1335,"in_reply_to":"7a77a97e_bc09c5df","updated":"2016-11-22 22:30:03.000000000","message":"this test case is linked in the above context","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":1400,"context_line":"        \"\"\"Test get_swift_conf_md5 success\"\"\""},{"line_number":1401,"context_line":"        resp \u003d self.app.get_swift_conf_md5()"},{"line_number":1402,"context_line":"        self.assertEqual(\u0027abcdef\u0027, resp[os.path.join("},{"line_number":1403,"context_line":"            TEST_SWIFT_DIR, \"swift.conf\")])"},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"    def test_get_swift_conf_md5_fail(self):"},{"line_number":1406,"context_line":"        \"\"\"Test get_swift_conf_md5 failure by failing file open\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_1cfb99c2","line":1403,"updated":"2016-11-16 15:59:49.000000000","message":"not necessary - see line 184","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"33029f9553ea4ea517b40e556639c55c6da0178a","unresolved":false,"context_lines":[{"line_number":1400,"context_line":"        \"\"\"Test get_swift_conf_md5 success\"\"\""},{"line_number":1401,"context_line":"        resp \u003d self.app.get_swift_conf_md5()"},{"line_number":1402,"context_line":"        self.assertEqual(\u0027abcdef\u0027, resp[os.path.join("},{"line_number":1403,"context_line":"            TEST_SWIFT_DIR, \"swift.conf\")])"},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"    def test_get_swift_conf_md5_fail(self):"},{"line_number":1406,"context_line":"        \"\"\"Test get_swift_conf_md5 failure by failing file open\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_e159e28f","line":1403,"in_reply_to":"7a77a97e_1cfb99c2","updated":"2016-11-22 22:30:03.000000000","message":"same here. self.app.get_swift_conf_md5 will call [1] where SWIFT_ROOT needs to be set in order to pass the assertion checking the response from recon middleware.\n\n[1]https://github.com/openstack/swift/blob/2aa5811c7fdf86df302f5ce8b0413bf51e86e7ab/test/unit/common/middleware/test_recon.py#L1139","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":1405,"context_line":"    def test_get_swift_conf_md5_fail(self):"},{"line_number":1406,"context_line":"        \"\"\"Test get_swift_conf_md5 failure by failing file open\"\"\""},{"line_number":1407,"context_line":"        resp \u003d self.real_app_get_swift_conf_md5(fail_io_open)"},{"line_number":1408,"context_line":"        self.assertIsNone(resp[os.path.join(TEST_SWIFT_DIR, \"swift.conf\")])"},{"line_number":1409,"context_line":""},{"line_number":1410,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":1411,"context_line":"    unittest.main()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_bc99c521","line":1408,"updated":"2016-11-16 15:59:49.000000000","message":"ok. this is necesary because recon does try to open swift.conf at path given by SWIFT_ROOT. But we\u0027d only discover that recon was ignoring SWIFT_ROOT if SWIFT_ROOT is set when running the tests.\n\nI\u0027d like to add another assertion with recon.SWIFT_CONF_FILE mocked to some value, e.g.:\n\n  with mock.patch(\"swift.common.middleware.recon.SWIFT_CONF_FILE\",\n                        \"/etc/myswiftdir/swift.conf\"):\n            resp \u003d self.real_app_get_swift_conf_md5(fail_io_open)\n        self.assertIsNone(resp.pop(\"/etc/myswiftdir/swift.conf\"))\n        self.assertFalse(resp)","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"33029f9553ea4ea517b40e556639c55c6da0178a","unresolved":false,"context_lines":[{"line_number":1405,"context_line":"    def test_get_swift_conf_md5_fail(self):"},{"line_number":1406,"context_line":"        \"\"\"Test get_swift_conf_md5 failure by failing file open\"\"\""},{"line_number":1407,"context_line":"        resp \u003d self.real_app_get_swift_conf_md5(fail_io_open)"},{"line_number":1408,"context_line":"        self.assertIsNone(resp[os.path.join(TEST_SWIFT_DIR, \"swift.conf\")])"},{"line_number":1409,"context_line":""},{"line_number":1410,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":1411,"context_line":"    unittest.main()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_e1b5627e","line":1408,"in_reply_to":"7a77a97e_bc99c521","updated":"2016-11-22 22:30:03.000000000","message":"agree. will do it in the next patch set.","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":3726,"context_line":"                # deprecated from python 3.4 in favor of importlib"},{"line_number":3727,"context_line":"                from imp import reload"},{"line_number":3728,"context_line":"            except ImportError:"},{"line_number":3729,"context_line":"                from importlib import reload"},{"line_number":3730,"context_line":""},{"line_number":3731,"context_line":"        def get_swift_root_and_conf():"},{"line_number":3732,"context_line":"            reload(swift.common.utils)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_899f66b3","line":3729,"updated":"2016-11-16 15:59:49.000000000","message":"Use:\n\n  from six.moves import reload_module\n\nhttps://pythonhosted.org/six/#module-six.moves","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"33029f9553ea4ea517b40e556639c55c6da0178a","unresolved":false,"context_lines":[{"line_number":3726,"context_line":"                # deprecated from python 3.4 in favor of importlib"},{"line_number":3727,"context_line":"                from imp import reload"},{"line_number":3728,"context_line":"            except ImportError:"},{"line_number":3729,"context_line":"                from importlib import reload"},{"line_number":3730,"context_line":""},{"line_number":3731,"context_line":"        def get_swift_root_and_conf():"},{"line_number":3732,"context_line":"            reload(swift.common.utils)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_b35d8117","line":3729,"in_reply_to":"7a77a97e_899f66b3","updated":"2016-11-22 22:30:03.000000000","message":"Done","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9a79522b8d9c5c5192a3909e443d85fce4ae5bea","unresolved":false,"context_lines":[{"line_number":3748,"context_line":"                os.environ[\u0027SWIFT_ROOT\u0027] \u003d p"},{"line_number":3749,"context_line":"                root, conf \u003d get_swift_root_and_conf()"},{"line_number":3750,"context_line":"                self.assertEqual(root, p)"},{"line_number":3751,"context_line":"                self.assertEqual(conf, os.path.join(p, \u0027swift.conf\u0027))"},{"line_number":3752,"context_line":""},{"line_number":3753,"context_line":"        finally:"},{"line_number":3754,"context_line":"            os.environ.pop(\u0027SWIFT_ROOT\u0027, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a77a97e_f7d516b9","line":3751,"updated":"2016-11-16 15:59:49.000000000","message":"ok these assertions fail if I revert the change in utils","commit_id":"143f58e0990990c21acb4f5ed316be5e6d93efde"}]}
