)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6d93bb58c6f261be5615f56d29fe9df912ecc20c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"content_type\": \"application/octet-stream\"}]"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"However, container listing (i.e. GET account) shows just a dict"},{"line_number":21,"context_line":"consistes of (\"name\", \"bytes\", \"name\") for each container."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"For example:"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3a7e1126_fae70ee2","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":9},"updated":"2015-12-17 16:23:49.000000000","message":"nit s/cosnsites/consists/","commit_id":"a6ec4e6658fa92ac81b768e45f4fe6d18d156e89"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"80f5b7f8a208a9c04a85af7f3810943c5cfafe22","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"content_type\": \"application/octet-stream\"}]"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"However, container listing (i.e. GET account) shows just a dict"},{"line_number":21,"context_line":"consistes of (\"name\", \"bytes\", \"name\") for each container."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"For example:"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"7a8ec9b2_97b92c7c","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":9},"in_reply_to":"3a7e1126_fae70ee2","updated":"2016-09-21 08:09:58.000000000","message":"Done","commit_id":"a6ec4e6658fa92ac81b768e45f4fe6d18d156e89"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6d93bb58c6f261be5615f56d29fe9df912ecc20c","unresolved":false,"context_lines":[{"line_number":36,"context_line":"timestamp to show the last modified is already in container table"},{"line_number":37,"context_line":"of account.db as a \"put_timestamp\" column."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Note that this patch *DOESN\u0027T* change the put_tumestamp sematics."},{"line_number":40,"context_line":"i.e. the last_modified timestamp will be changed only at both PUT"},{"line_number":41,"context_line":"container and POST container."},{"line_number":42,"context_line":"(PUT object doesn\u0027t affect the timestamp)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3a7e1126_2eb7a0d9","line":39,"updated":"2015-12-17 16:23:49.000000000","message":"nit: typos: put_tumestamp -\u003e put_timestamp, sematics -\u003e semantics","commit_id":"a6ec4e6658fa92ac81b768e45f4fe6d18d156e89"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"80f5b7f8a208a9c04a85af7f3810943c5cfafe22","unresolved":false,"context_lines":[{"line_number":36,"context_line":"timestamp to show the last modified is already in container table"},{"line_number":37,"context_line":"of account.db as a \"put_timestamp\" column."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Note that this patch *DOESN\u0027T* change the put_tumestamp sematics."},{"line_number":40,"context_line":"i.e. the last_modified timestamp will be changed only at both PUT"},{"line_number":41,"context_line":"container and POST container."},{"line_number":42,"context_line":"(PUT object doesn\u0027t affect the timestamp)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"7a8ec9b2_d772d4e2","line":39,"in_reply_to":"3a7e1126_2eb7a0d9","updated":"2016-09-21 08:09:58.000000000","message":"Done","commit_id":"a6ec4e6658fa92ac81b768e45f4fe6d18d156e89"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f053f389f1dffe38d3ea94337bfd84e0558928eb","unresolved":false,"context_lines":[{"line_number":41,"context_line":"container and POST container."},{"line_number":42,"context_line":"(PUT object doesn\u0027t affect the timestamp)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Note that the tuple format of retruning value from"},{"line_number":45,"context_line":"swift.account.backend.AccountBroker.list_containers is now"},{"line_number":46,"context_line":"(name, object_count, bytes_used, put_timestam, 0)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"9a57fde8_f49477e9","line":44,"updated":"2017-01-12 18:10:20.000000000","message":"s/retruning/returning/","commit_id":"1b8980da892fec6ffec148745efc1126b54cebd8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f053f389f1dffe38d3ea94337bfd84e0558928eb","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Note that the tuple format of retruning value from"},{"line_number":45,"context_line":"swift.account.backend.AccountBroker.list_containers is now"},{"line_number":46,"context_line":"(name, object_count, bytes_used, put_timestam, 0)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"* put_timestamp is added *"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"9a57fde8_d49053ef","line":46,"updated":"2017-01-12 18:10:20.000000000","message":"s/put_timestam/put_timestamp/","commit_id":"1b8980da892fec6ffec148745efc1126b54cebd8"}],"swift/account/backend.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"61d1a6874312865ab3a837b00e41e37b03a179dc","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                        marker \u003d name[:end] + chr(ord(delimiter) + 1)"},{"line_number":440,"context_line":"                        dir_name \u003d name[:end + 1]"},{"line_number":441,"context_line":"                        if dir_name !\u003d orig_marker:"},{"line_number":442,"context_line":"                            results.append([dir_name, 0, 0, 0, 1])"},{"line_number":443,"context_line":"                        curs.close()"},{"line_number":444,"context_line":"                        break"},{"line_number":445,"context_line":"                    results.append(row)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_b093345c","line":442,"updated":"2015-08-13 22:23:25.000000000","message":"I\u0027m sorry for bikeshedding, but I do not like when people mix types like this. I realize that it\u0027s allright in Python, but almost without fail this ends with a scattering of conversions like int(x) (in this case, obviously, Timestamp(x)). I\u0027d put \"0\" in there.","commit_id":"7fc6ca05d30f0585ea095f59f79f4baa1dbad749"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"cfe77fd0c5c2221580e955d7bcf6c54283b7f499","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                        marker \u003d name[:end] + chr(ord(delimiter) + 1)"},{"line_number":440,"context_line":"                        dir_name \u003d name[:end + 1]"},{"line_number":441,"context_line":"                        if dir_name !\u003d orig_marker:"},{"line_number":442,"context_line":"                            results.append([dir_name, 0, 0, 0, 1])"},{"line_number":443,"context_line":"                        curs.close()"},{"line_number":444,"context_line":"                        break"},{"line_number":445,"context_line":"                    results.append(row)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_d1079d16","line":442,"in_reply_to":"1a4dcd0f_b093345c","updated":"2015-08-16 02:27:13.000000000","message":"Yeah, timestamp is defined as TEXT in sqlite table so it should be str type. Will fix.","commit_id":"7fc6ca05d30f0585ea095f59f79f4baa1dbad749"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6423e59501eb15871b04a3b90c5bcf26ace7c791","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        :param prefix: prefix query"},{"line_number":379,"context_line":"        :param delimiter: delimiter for query"},{"line_number":380,"context_line":"        :param reverse: reverse the result order."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :returns: list of tuples of (name, object_count, bytes_used, 0)"},{"line_number":383,"context_line":"        \"\"\""},{"line_number":384,"context_line":"        delim_force_gte \u003d False"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_5b67efb6","line":381,"updated":"2015-11-26 18:30:52.000000000","message":"add timestamp to the return tuple","commit_id":"e1db01154177267422f21761ae2ac32fd80b1ce7"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"866f335ae7c994191119a0f58a882358a38b88a4","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        :param prefix: prefix query"},{"line_number":379,"context_line":"        :param delimiter: delimiter for query"},{"line_number":380,"context_line":"        :param reverse: reverse the result order."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :returns: list of tuples of (name, object_count, bytes_used, 0)"},{"line_number":383,"context_line":"        \"\"\""},{"line_number":384,"context_line":"        delim_force_gte \u003d False"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_98991322","line":381,"in_reply_to":"9a8ffd7b_5b67efb6","updated":"2015-12-07 06:23:26.000000000","message":"done","commit_id":"e1db01154177267422f21761ae2ac32fd80b1ce7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6423e59501eb15871b04a3b90c5bcf26ace7c791","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                            delim_force_gte \u003d True"},{"line_number":460,"context_line":"                        dir_name \u003d name[:end + 1]"},{"line_number":461,"context_line":"                        if dir_name !\u003d orig_marker:"},{"line_number":462,"context_line":"                            results.append([dir_name, 0, 0, \u00270\u0027, 1])"},{"line_number":463,"context_line":"                        curs.close()"},{"line_number":464,"context_line":"                        break"},{"line_number":465,"context_line":"                    results.append(row)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_9e122556","line":462,"updated":"2015-11-26 18:30:52.000000000","message":"account reaper calls this method and is not expecting the extra field in the tuples :(\n\nSee swift/account/reaper.py:263","commit_id":"e1db01154177267422f21761ae2ac32fd80b1ce7"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"866f335ae7c994191119a0f58a882358a38b88a4","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                            delim_force_gte \u003d True"},{"line_number":460,"context_line":"                        dir_name \u003d name[:end + 1]"},{"line_number":461,"context_line":"                        if dir_name !\u003d orig_marker:"},{"line_number":462,"context_line":"                            results.append([dir_name, 0, 0, \u00270\u0027, 1])"},{"line_number":463,"context_line":"                        curs.close()"},{"line_number":464,"context_line":"                        break"},{"line_number":465,"context_line":"                    results.append(row)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_fb6e112e","line":462,"in_reply_to":"9a8ffd7b_9e122556","updated":"2015-12-07 06:23:26.000000000","message":"Nice catch!!!!\n\nI was missing the point any other module use this method. I\u0027ll fix account reaper and its unit tests.","commit_id":"e1db01154177267422f21761ae2ac32fd80b1ce7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8501a0ee064932475ff68ab70158f59639861921","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        :param reverse: reverse the result order."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :returns: list of tuples of (name, object_count, bytes_used,"},{"line_number":383,"context_line":"                  put_timestamp, 0)"},{"line_number":384,"context_line":"        \"\"\""},{"line_number":385,"context_line":"        delim_force_gte \u003d False"},{"line_number":386,"context_line":"        (marker, end_marker, prefix, delimiter) \u003d utf8encode("}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_353932a5","line":383,"range":{"start_line":383,"start_character":33,"end_line":383,"end_character":34},"updated":"2017-01-04 21:24:08.000000000","message":"Off-topic: we should probably clarify that this isn\u0027t actually always zero.","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"215dc5d246b0303a5372d494962bc547b6de1c28","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        :param reverse: reverse the result order."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :returns: list of tuples of (name, object_count, bytes_used,"},{"line_number":383,"context_line":"                  put_timestamp, 0)"},{"line_number":384,"context_line":"        \"\"\""},{"line_number":385,"context_line":"        delim_force_gte \u003d False"},{"line_number":386,"context_line":"        (marker, end_marker, prefix, delimiter) \u003d utf8encode("}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_d66bed83","line":383,"range":{"start_line":383,"start_character":33,"end_line":383,"end_character":34},"in_reply_to":"ba5201f7_353932a5","updated":"2017-01-10 02:55:42.000000000","message":"There is an assertion it should be zero[1]. Exactly not always but looking at L401, that SELECT always set the last item which means subdir as zero because container listing doesn\u0027t support slash (i.e. subdir) in the account name.\n\nIt might be worth to add docs like:\n :returns: list of tuples of (name, object_count, bytes_used\n           put_timestamp, subidr (always 0 in container listing))\n\nMaybe?\n\n1: https://review.openstack.org/#/c/198634/18/test/unit/account/test_backend.py@1240","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f053f389f1dffe38d3ea94337bfd84e0558928eb","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        :param delimiter: delimiter for query"},{"line_number":380,"context_line":"        :param reverse: reverse the result order."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :returns: list of tuples of (name, object_count, bytes_used,"},{"line_number":383,"context_line":"                  put_timestamp, 0)"},{"line_number":384,"context_line":"        \"\"\""},{"line_number":385,"context_line":"        delim_force_gte \u003d False"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a57fde8_60cfe9b0","line":382,"updated":"2017-01-12 18:10:20.000000000","message":"so since the return value is changing, should we just bite the bullet and make it a list of dicts? the test churn would probably be significant.","commit_id":"1b8980da892fec6ffec148745efc1126b54cebd8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7eabf71b8135746396bf9c5ce4844b2f674fcb13","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        :param reverse: reverse the result order."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :returns: list of tuples of (name, object_count, bytes_used,"},{"line_number":383,"context_line":"                  put_timestamp, 0)"},{"line_number":384,"context_line":"        \"\"\""},{"line_number":385,"context_line":"        delim_force_gte \u003d False"},{"line_number":386,"context_line":"        (marker, end_marker, prefix, delimiter) \u003d utf8encode("}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_cbeb1411","line":383,"range":{"start_line":383,"start_character":33,"end_line":383,"end_character":34},"updated":"2017-01-10 23:40:00.000000000","message":"Down at L463, we can still include results with subdir\u003d1. All you need is to specify a delimiter, like \u0027:\u0027 or \u0027-\u0027 or \u0027.\u0027. See test_GET_prefix_delimiter_json for example -- https://github.com/openstack/swift/blob/2.12.0/test/unit/account/test_server.py#L1341\n\nBut again, this isn\u0027t really a fault with your change.","commit_id":"1b8980da892fec6ffec148745efc1126b54cebd8"}],"swift/account/reaper.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8501a0ee064932475ff68ab70158f59639861921","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                if not containers:"},{"line_number":269,"context_line":"                    break"},{"line_number":270,"context_line":"                try:"},{"line_number":271,"context_line":"                    for (container, _junk, _junk, _junk, _junk) in containers:"},{"line_number":272,"context_line":"                        this_shard \u003d int(md5(container).hexdigest(), 16) % \\"},{"line_number":273,"context_line":"                            len(nodes)"},{"line_number":274,"context_line":"                        if container_shard not in (this_shard, None):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_75565acf","line":271,"updated":"2017-01-04 21:24:08.000000000","message":"This makes me long for python3\u0027s\n\n x, *y \u003d 1, 2, 3, 4, 5\n\nsyntax :-/","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"215dc5d246b0303a5372d494962bc547b6de1c28","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                if not containers:"},{"line_number":269,"context_line":"                    break"},{"line_number":270,"context_line":"                try:"},{"line_number":271,"context_line":"                    for (container, _junk, _junk, _junk, _junk) in containers:"},{"line_number":272,"context_line":"                        this_shard \u003d int(md5(container).hexdigest(), 16) % \\"},{"line_number":273,"context_line":"                            len(nodes)"},{"line_number":274,"context_line":"                        if container_shard not in (this_shard, None):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_d6c76d62","line":271,"in_reply_to":"ba5201f7_75565acf","updated":"2017-01-10 02:55:42.000000000","message":"yeah, that looks useful if it can be used in python 2.7 :/","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"76f34eec659f93fd97375531ee086d8fd5bfacb7","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                if not containers:"},{"line_number":269,"context_line":"                    break"},{"line_number":270,"context_line":"                try:"},{"line_number":271,"context_line":"                    for (container, _junk, _junk, _junk, _junk) in containers:"},{"line_number":272,"context_line":"                        this_shard \u003d int(md5(container).hexdigest(), 16) % \\"},{"line_number":273,"context_line":"                            len(nodes)"},{"line_number":274,"context_line":"                        if container_shard not in (this_shard, None):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_1ed0b8f5","line":271,"updated":"2017-01-12 01:55:25.000000000","message":"I think the actual lesson here is not to scatter tuples. Only then you are forward-compatible. So:\n\nfor x in containers:\n    container \u003d x[0]\n\nWell, this works for now though.","commit_id":"1b8980da892fec6ffec148745efc1126b54cebd8"}],"swift/account/utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6d93bb58c6f261be5615f56d29fe9df912ecc20c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                data.append("},{"line_number":90,"context_line":"                    {\u0027name\u0027: name, \u0027count\u0027: object_count,"},{"line_number":91,"context_line":"                     \u0027bytes\u0027: bytes_used,"},{"line_number":92,"context_line":"                     \u0027last_modified\u0027: Timestamp(put_timestamp).isoformat})"},{"line_number":93,"context_line":"        account_list \u003d json.dumps(data)"},{"line_number":94,"context_line":"    elif response_content_type.endswith(\u0027/xml\u0027):"},{"line_number":95,"context_line":"        output_list \u003d [\u0027\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_3561273a","line":92,"updated":"2015-12-17 16:23:49.000000000","message":"Why not ceil() here and return the value rounded up to nearest second, like the container controller does?","commit_id":"a6ec4e6658fa92ac81b768e45f4fe6d18d156e89"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"7c5168099669513799e9f7f375226eb134c73f13","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                data.append("},{"line_number":90,"context_line":"                    {\u0027name\u0027: name, \u0027count\u0027: object_count,"},{"line_number":91,"context_line":"                     \u0027bytes\u0027: bytes_used,"},{"line_number":92,"context_line":"                     \u0027last_modified\u0027: Timestamp(put_timestamp).isoformat})"},{"line_number":93,"context_line":"        account_list \u003d json.dumps(data)"},{"line_number":94,"context_line":"    elif response_content_type.endswith(\u0027/xml\u0027):"},{"line_number":95,"context_line":"        output_list \u003d [\u0027\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_8005187b","line":92,"in_reply_to":"3a7e1126_3561273a","updated":"2015-12-18 09:15:44.000000000","message":"That is because I\u0027d like to make it as same semantics with object and object listing. Apparently, HEAD object will return the ceiled value as last-modified but container server doesn\u0027t in listing.\n\nHowever, I noticed another issue from here. That is we should add the last modified *at container server* rather than at container controller, right?","commit_id":"a6ec4e6658fa92ac81b768e45f4fe6d18d156e89"}],"test/functional/tests.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"61d1a6874312865ab3a837b00e41e37b03a179dc","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                parms\u003d{\u0027format\u0027: format_type})"},{"line_number":243,"context_line":"            if isinstance(containers[0], dict):"},{"line_number":244,"context_line":"                for container in containers:"},{"line_number":245,"context_line":"                    print container"},{"line_number":246,"context_line":"                    self.assertTrue(\u0027name\u0027 in container)  # sanity"},{"line_number":247,"context_line":"                    self.assertTrue(\u0027last_modified\u0027 in container)  # sanity"},{"line_number":248,"context_line":"                    # ceil by hand (wants easier way!)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_b07574cd","line":245,"updated":"2015-08-13 22:23:25.000000000","message":"please drop the extra print, even from tests","commit_id":"7fc6ca05d30f0585ea095f59f79f4baa1dbad749"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"cfe77fd0c5c2221580e955d7bcf6c54283b7f499","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                parms\u003d{\u0027format\u0027: format_type})"},{"line_number":243,"context_line":"            if isinstance(containers[0], dict):"},{"line_number":244,"context_line":"                for container in containers:"},{"line_number":245,"context_line":"                    print container"},{"line_number":246,"context_line":"                    self.assertTrue(\u0027name\u0027 in container)  # sanity"},{"line_number":247,"context_line":"                    self.assertTrue(\u0027last_modified\u0027 in container)  # sanity"},{"line_number":248,"context_line":"                    # ceil by hand (wants easier way!)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_01b5c17c","line":245,"in_reply_to":"1a4dcd0f_b07574cd","updated":"2015-08-16 02:27:13.000000000","message":"Exactly, that\u0027s my fault. Nice catch! Will fix.","commit_id":"7fc6ca05d30f0585ea095f59f79f4baa1dbad749"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"89ed15f775407bb984abb2781c02ef8ad586fac1","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            actual \u003d {}"},{"line_number":241,"context_line":"            containers \u003d self.env.account.containers("},{"line_number":242,"context_line":"                parms\u003d{\u0027format\u0027: format_type})"},{"line_number":243,"context_line":"            if isinstance(containers[0], dict):"},{"line_number":244,"context_line":"                for container in containers:"},{"line_number":245,"context_line":"                    self.assertTrue(\u0027name\u0027 in container)  # sanity"},{"line_number":246,"context_line":"                    self.assertTrue(\u0027last_modified\u0027 in container)  # sanity"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_7888e6c6","line":243,"updated":"2015-08-16 14:04:58.000000000","message":"Is there a situation when this is false (not a dict)? I think not and if so, this should be an assert.","commit_id":"ac93217e4527146487fc8d85771bf275a7c34e56"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"e029c1616eff673971df1b3a2c68427b0ca0c6e0","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            actual \u003d {}"},{"line_number":241,"context_line":"            containers \u003d self.env.account.containers("},{"line_number":242,"context_line":"                parms\u003d{\u0027format\u0027: format_type})"},{"line_number":243,"context_line":"            if isinstance(containers[0], dict):"},{"line_number":244,"context_line":"                for container in containers:"},{"line_number":245,"context_line":"                    self.assertTrue(\u0027name\u0027 in container)  # sanity"},{"line_number":246,"context_line":"                    self.assertTrue(\u0027last_modified\u0027 in container)  # sanity"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_2b1ecd0c","line":243,"in_reply_to":"1a4dcd0f_7888e6c6","updated":"2015-08-18 02:03:08.000000000","message":"@Pete\n\nExactly, no chance to set any other types except dict. The reason I put this as it is, is just using a same way with testContainerListing (but I am realizing we don\u0027t need this \"if condition\" because we don\u0027t set \"None\" in the list for \"for loop\" above).\n\nIf it\u0027s ok for you, I leave this as this and will fix in follow up patch to keep your +2.  How do you think of?","commit_id":"ac93217e4527146487fc8d85771bf275a7c34e56"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"d039244a159380146a8efbe1ab75366f2a713229","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            actual \u003d {}"},{"line_number":241,"context_line":"            containers \u003d self.env.account.containers("},{"line_number":242,"context_line":"                parms\u003d{\u0027format\u0027: format_type})"},{"line_number":243,"context_line":"            if isinstance(containers[0], dict):"},{"line_number":244,"context_line":"                for container in containers:"},{"line_number":245,"context_line":"                    self.assertTrue(\u0027name\u0027 in container)  # sanity"},{"line_number":246,"context_line":"                    self.assertTrue(\u0027last_modified\u0027 in container)  # sanity"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_fd65fce0","line":243,"in_reply_to":"fa1b9901_2b1ecd0c","updated":"2015-08-18 02:28:39.000000000","message":"Okay by me.","commit_id":"ac93217e4527146487fc8d85771bf275a7c34e56"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6d93bb58c6f261be5615f56d29fe9df912ecc20c","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                for container in containers:"},{"line_number":285,"context_line":"                    self.assertTrue(\u0027name\u0027 in container)  # sanity"},{"line_number":286,"context_line":"                    self.assertTrue(\u0027last_modified\u0027 in container)  # sanity"},{"line_number":287,"context_line":"                    # ceil by hand (wants easier way!)"},{"line_number":288,"context_line":"                    datetime_str, micro_sec_str \u003d \\"},{"line_number":289,"context_line":"                        container[\u0027last_modified\u0027].split(\u0027.\u0027)"},{"line_number":290,"context_line":"                    timestamp \u003d time.mktime("}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_903029ea","line":287,"updated":"2015-12-17 16:23:49.000000000","message":"I\u0027m wondering why the account listing does not round the time to seconds like the container server does?","commit_id":"a6ec4e6658fa92ac81b768e45f4fe6d18d156e89"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"7c5168099669513799e9f7f375226eb134c73f13","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                for container in containers:"},{"line_number":285,"context_line":"                    self.assertTrue(\u0027name\u0027 in container)  # sanity"},{"line_number":286,"context_line":"                    self.assertTrue(\u0027last_modified\u0027 in container)  # sanity"},{"line_number":287,"context_line":"                    # ceil by hand (wants easier way!)"},{"line_number":288,"context_line":"                    datetime_str, micro_sec_str \u003d \\"},{"line_number":289,"context_line":"                        container[\u0027last_modified\u0027].split(\u0027.\u0027)"},{"line_number":290,"context_line":"                    timestamp \u003d time.mktime("}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_e9140745","line":287,"in_reply_to":"3a7e1126_903029ea","updated":"2015-12-18 09:15:44.000000000","message":"will comment but we need more discussion what should be rounded (and not)","commit_id":"a6ec4e6658fa92ac81b768e45f4fe6d18d156e89"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"80f5b7f8a208a9c04a85af7f3810943c5cfafe22","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                for container in containers:"},{"line_number":285,"context_line":"                    self.assertTrue(\u0027name\u0027 in container)  # sanity"},{"line_number":286,"context_line":"                    self.assertTrue(\u0027last_modified\u0027 in container)  # sanity"},{"line_number":287,"context_line":"                    # ceil by hand (wants easier way!)"},{"line_number":288,"context_line":"                    datetime_str, micro_sec_str \u003d \\"},{"line_number":289,"context_line":"                        container[\u0027last_modified\u0027].split(\u0027.\u0027)"},{"line_number":290,"context_line":"                    timestamp \u003d time.mktime("}],"source_content_type":"text/x-python","patch_set":13,"id":"7a8ec9b2_22ed74ef","line":287,"in_reply_to":"3a7e1126_e9140745","updated":"2016-09-21 08:09:58.000000000","message":"Basically, both container/object listing (i.e. GET account and GET container) doesn\u0027t round the last-modified timestamp in the json format but the last-modified header in the response (i.e. header of HEAD/GET container/object is rounded due to the constraint of the date header format.","commit_id":"a6ec4e6658fa92ac81b768e45f4fe6d18d156e89"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8501a0ee064932475ff68ab70158f59639861921","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            actual \u003d {}"},{"line_number":301,"context_line":"            containers \u003d self.env.account.containers("},{"line_number":302,"context_line":"                parms\u003d{\u0027format\u0027: format_type})"},{"line_number":303,"context_line":"            if isinstance(containers[0], dict):"},{"line_number":304,"context_line":"                for container in containers:"},{"line_number":305,"context_line":"                    self.assertTrue(\u0027name\u0027 in container)  # sanity"},{"line_number":306,"context_line":"                    self.assertTrue(\u0027last_modified\u0027 in container)  # sanity"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_75dbba4f","line":303,"updated":"2017-01-04 21:24:08.000000000","message":"When would this not be true?","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"215dc5d246b0303a5372d494962bc547b6de1c28","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            actual \u003d {}"},{"line_number":301,"context_line":"            containers \u003d self.env.account.containers("},{"line_number":302,"context_line":"                parms\u003d{\u0027format\u0027: format_type})"},{"line_number":303,"context_line":"            if isinstance(containers[0], dict):"},{"line_number":304,"context_line":"                for container in containers:"},{"line_number":305,"context_line":"                    self.assertTrue(\u0027name\u0027 in container)  # sanity"},{"line_number":306,"context_line":"                    self.assertTrue(\u0027last_modified\u0027 in container)  # sanity"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_1611f5af","line":303,"in_reply_to":"ba5201f7_75dbba4f","updated":"2017-01-10 02:55:42.000000000","message":"Ah, maybe only format_type\u003d\u003d\u0027json\u0027 to be true at the condition. I don\u0027t keep clear memory why I check only json for this but it looks like test/functional/tests.py has same if condition somewhere (e.g. L359) so perhaps young i could follow the procedure.","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8501a0ee064932475ff68ab70158f59639861921","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                parms\u003d{\u0027format\u0027: format_type})"},{"line_number":303,"context_line":"            if isinstance(containers[0], dict):"},{"line_number":304,"context_line":"                for container in containers:"},{"line_number":305,"context_line":"                    self.assertTrue(\u0027name\u0027 in container)  # sanity"},{"line_number":306,"context_line":"                    self.assertTrue(\u0027last_modified\u0027 in container)  # sanity"},{"line_number":307,"context_line":"                    # ceil by hand (wants easier way!)"},{"line_number":308,"context_line":"                    datetime_str, micro_sec_str \u003d \\"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_15ed0eef","line":305,"updated":"2017-01-04 21:24:08.000000000","message":"nit: might be better as assertIn","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"215dc5d246b0303a5372d494962bc547b6de1c28","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                parms\u003d{\u0027format\u0027: format_type})"},{"line_number":303,"context_line":"            if isinstance(containers[0], dict):"},{"line_number":304,"context_line":"                for container in containers:"},{"line_number":305,"context_line":"                    self.assertTrue(\u0027name\u0027 in container)  # sanity"},{"line_number":306,"context_line":"                    self.assertTrue(\u0027last_modified\u0027 in container)  # sanity"},{"line_number":307,"context_line":"                    # ceil by hand (wants easier way!)"},{"line_number":308,"context_line":"                    datetime_str, micro_sec_str \u003d \\"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_b6c66947","line":305,"in_reply_to":"ba5201f7_15ed0eef","updated":"2017-01-10 02:55:42.000000000","message":"Done","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7eabf71b8135746396bf9c5ce4844b2f674fcb13","unresolved":false,"context_lines":[{"line_number":311,"context_line":"            actual \u003d {}"},{"line_number":312,"context_line":"            containers \u003d self.env.account.containers("},{"line_number":313,"context_line":"                parms\u003d{\u0027format\u0027: format_type})"},{"line_number":314,"context_line":"            if isinstance(containers[0], dict):"},{"line_number":315,"context_line":"                for container in containers:"},{"line_number":316,"context_line":"                    self.assertIn(\u0027name\u0027, container)  # sanity"},{"line_number":317,"context_line":"                    self.assertIn(\u0027last_modified\u0027, container)  # sanity"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_103e27da","line":314,"updated":"2017-01-10 23:40:00.000000000","message":"FWIW, test still passes if I replace this with\n\n self.assertIsInstance(containers[0], dict)\n\nand dedent everything below, like in http://paste.openstack.org/show/594483/","commit_id":"1b8980da892fec6ffec148745efc1126b54cebd8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7eabf71b8135746396bf9c5ce4844b2f674fcb13","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                for container in containers:"},{"line_number":316,"context_line":"                    self.assertIn(\u0027name\u0027, container)  # sanity"},{"line_number":317,"context_line":"                    self.assertIn(\u0027last_modified\u0027, container)  # sanity"},{"line_number":318,"context_line":"                    # ceil by hand (wants easier way!)"},{"line_number":319,"context_line":"                    datetime_str, micro_sec_str \u003d \\"},{"line_number":320,"context_line":"                        container[\u0027last_modified\u0027].split(\u0027.\u0027)"},{"line_number":321,"context_line":"                    timestamp \u003d time.mktime("}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_ab81704f","line":318,"updated":"2017-01-10 23:40:00.000000000","message":"Maybe something like\n\n math.ceil((\n     datetime.datetime.strptime(container[\u0027last_modified\u0027], \u0027%Y-%m-%dT%H:%M:%S.%f\u0027) -\n     swift.common.utils.EPOCH).total_seconds())\n\n? I\u0027m not sure that\u0027s actually any better :-/ At least we\u0027d be using math.ceil?","commit_id":"1b8980da892fec6ffec148745efc1126b54cebd8"}],"test/unit/account/test_backend.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8501a0ee064932475ff68ab70158f59639861921","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"ba5201f7_15a98e7b","updated":"2017-01-04 21:24:08.000000000","message":"Huh. Do we not have unit tests with is_subdir\u003d1?","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"215dc5d246b0303a5372d494962bc547b6de1c28","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"ba5201f7_7687a1d7","in_reply_to":"ba5201f7_15a98e7b","updated":"2017-01-10 02:55:42.000000000","message":"AFAIK, account db shouldn\u0027t return is_subdir\u003d1.","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"}],"test/unit/account/test_server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6423e59501eb15871b04a3b90c5bcf26ace7c791","unresolved":false,"context_lines":[{"line_number":789,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027,"},{"line_number":790,"context_line":"                                                  \u0027HTTP_X_TIMESTAMP\u0027: \u00270\u0027})"},{"line_number":791,"context_line":"        req.get_response(self.controller)"},{"line_number":792,"context_line":"        put_timestamps[\u0027c1\u0027] \u003d normalize_timestamp(1)"},{"line_number":793,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a/c1\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":794,"context_line":"                            headers\u003d{\u0027X-Put-Timestamp\u0027: put_timestamps[\u0027c1\u0027],"},{"line_number":795,"context_line":"                                     \u0027X-Delete-Timestamp\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_1b3887ee","line":792,"updated":"2015-11-26 18:30:52.000000000","message":"nit: checkout test/unit/__init__.py:1044 make_timestamp_iter(), it could make this test simpler","commit_id":"e1db01154177267422f21761ae2ac32fd80b1ce7"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"866f335ae7c994191119a0f58a882358a38b88a4","unresolved":false,"context_lines":[{"line_number":789,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027,"},{"line_number":790,"context_line":"                                                  \u0027HTTP_X_TIMESTAMP\u0027: \u00270\u0027})"},{"line_number":791,"context_line":"        req.get_response(self.controller)"},{"line_number":792,"context_line":"        put_timestamps[\u0027c1\u0027] \u003d normalize_timestamp(1)"},{"line_number":793,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a/c1\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":794,"context_line":"                            headers\u003d{\u0027X-Put-Timestamp\u0027: put_timestamps[\u0027c1\u0027],"},{"line_number":795,"context_line":"                                     \u0027X-Delete-Timestamp\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_9bf26d6e","line":792,"in_reply_to":"9a8ffd7b_1b3887ee","updated":"2015-12-07 06:23:26.000000000","message":"probably. will do.","commit_id":"e1db01154177267422f21761ae2ac32fd80b1ce7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8501a0ee064932475ff68ab70158f59639861921","unresolved":false,"context_lines":[{"line_number":1085,"context_line":"            req \u003d Request.blank("},{"line_number":1086,"context_line":"                \u0027/sda1/p/a/c%d\u0027 % c,"},{"line_number":1087,"context_line":"                environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":1088,"context_line":"                headers\u003d{\u0027X-Put-Timestamp\u0027: put_timestamp,"},{"line_number":1089,"context_line":"                         \u0027X-Delete-Timestamp\u0027: \u00270\u0027,"},{"line_number":1090,"context_line":"                         \u0027X-Object-Count\u0027: \u00272\u0027,"},{"line_number":1091,"context_line":"                         \u0027X-Bytes-Used\u0027: \u00273\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_750ada7a","line":1088,"range":{"start_line":1088,"start_character":44,"end_line":1088,"end_character":57},"updated":"2017-01-04 21:24:08.000000000","message":"Why did this change?","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"215dc5d246b0303a5372d494962bc547b6de1c28","unresolved":false,"context_lines":[{"line_number":1085,"context_line":"            req \u003d Request.blank("},{"line_number":1086,"context_line":"                \u0027/sda1/p/a/c%d\u0027 % c,"},{"line_number":1087,"context_line":"                environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":1088,"context_line":"                headers\u003d{\u0027X-Put-Timestamp\u0027: put_timestamp,"},{"line_number":1089,"context_line":"                         \u0027X-Delete-Timestamp\u0027: \u00270\u0027,"},{"line_number":1090,"context_line":"                         \u0027X-Object-Count\u0027: \u00272\u0027,"},{"line_number":1091,"context_line":"                         \u0027X-Bytes-Used\u0027: \u00273\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_9601653c","line":1088,"range":{"start_line":1088,"start_character":44,"end_line":1088,"end_character":57},"in_reply_to":"ba5201f7_750ada7a","updated":"2017-01-10 02:55:42.000000000","message":"To fit the actual swift request probably. the \"c\" is just a sequence number from 0 to 4 (see L1084) and it\u0027s meaningless.\n\nWhen calling PUT request here, the X-Put-Timestamp should be same with X-Timestamp shouldn\u0027t it?\n\n(now thinking of it should be Timestamp.normal or Timestamp.internal... :P)","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8501a0ee064932475ff68ab70158f59639861921","unresolved":false,"context_lines":[{"line_number":1111,"context_line":"            req \u003d Request.blank("},{"line_number":1112,"context_line":"                \u0027/sda1/p/a/c%d\u0027 % c,"},{"line_number":1113,"context_line":"                environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":1114,"context_line":"                headers\u003d{\u0027X-Put-Timestamp\u0027: put_timestamp,"},{"line_number":1115,"context_line":"                         \u0027X-Delete-Timestamp\u0027: \u00270\u0027,"},{"line_number":1116,"context_line":"                         \u0027X-Object-Count\u0027: \u00272\u0027,"},{"line_number":1117,"context_line":"                         \u0027X-Bytes-Used\u0027: \u00273\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_d5254609","line":1114,"range":{"start_line":1114,"start_character":44,"end_line":1114,"end_character":57},"updated":"2017-01-04 21:24:08.000000000","message":"And here.","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"215dc5d246b0303a5372d494962bc547b6de1c28","unresolved":false,"context_lines":[{"line_number":1111,"context_line":"            req \u003d Request.blank("},{"line_number":1112,"context_line":"                \u0027/sda1/p/a/c%d\u0027 % c,"},{"line_number":1113,"context_line":"                environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":1114,"context_line":"                headers\u003d{\u0027X-Put-Timestamp\u0027: put_timestamp,"},{"line_number":1115,"context_line":"                         \u0027X-Delete-Timestamp\u0027: \u00270\u0027,"},{"line_number":1116,"context_line":"                         \u0027X-Object-Count\u0027: \u00272\u0027,"},{"line_number":1117,"context_line":"                         \u0027X-Bytes-Used\u0027: \u00273\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_d6fbed45","line":1114,"range":{"start_line":1114,"start_character":44,"end_line":1114,"end_character":57},"in_reply_to":"ba5201f7_d5254609","updated":"2017-01-10 02:55:42.000000000","message":"ditto","commit_id":"d7a645f99ea8e9ad1e23e8f2bab8466df402acd3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f053f389f1dffe38d3ea94337bfd84e0558928eb","unresolved":false,"context_lines":[{"line_number":1111,"context_line":"            req \u003d Request.blank("},{"line_number":1112,"context_line":"                \u0027/sda1/p/a/c%d\u0027 % c,"},{"line_number":1113,"context_line":"                environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":1114,"context_line":"                headers\u003d{\u0027X-Put-Timestamp\u0027: put_timestamp,"},{"line_number":1115,"context_line":"                         \u0027X-Delete-Timestamp\u0027: \u00270\u0027,"},{"line_number":1116,"context_line":"                         \u0027X-Object-Count\u0027: \u00272\u0027,"},{"line_number":1117,"context_line":"                         \u0027X-Bytes-Used\u0027: \u00273\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a57fde8_94924b56","line":1114,"updated":"2017-01-12 18:10:20.000000000","message":"nit: in test_GET_limit_marker_json you have preserved the unique timestamps per object, but not here.","commit_id":"1b8980da892fec6ffec148745efc1126b54cebd8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f053f389f1dffe38d3ea94337bfd84e0558928eb","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"            n for n in listing[-1].childNodes if n.nodeName !\u003d \u0027#text\u0027]"},{"line_number":1181,"context_line":"        self.assertEqual(sorted([n.nodeName for n in container]),"},{"line_number":1182,"context_line":"                         [\u0027bytes\u0027, \u0027count\u0027, \u0027last_modified\u0027, \u0027name\u0027])"},{"line_number":1183,"context_line":"        node \u003d [n for n in container if n.nodeName \u003d\u003d \u0027name\u0027][0]"},{"line_number":1184,"context_line":"        node \u003d [n for n in container if n.nodeName \u003d\u003d \u0027name\u0027][0]"},{"line_number":1185,"context_line":"        self.assertEqual(node.firstChild.nodeValue, \u0027c2\u0027)"},{"line_number":1186,"context_line":"        node \u003d [n for n in container if n.nodeName \u003d\u003d \u0027count\u0027][0]"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a57fde8_9465ebe2","line":1183,"updated":"2017-01-12 18:10:20.000000000","message":"nit: oops, extra line pasted here","commit_id":"1b8980da892fec6ffec148745efc1126b54cebd8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f053f389f1dffe38d3ea94337bfd84e0558928eb","unresolved":false,"context_lines":[{"line_number":1222,"context_line":"        node \u003d [n for n in container if n.nodeName \u003d\u003d \u0027count\u0027][0]"},{"line_number":1223,"context_line":"        self.assertEqual(node.firstChild.nodeValue, \u00272\u0027)"},{"line_number":1224,"context_line":"        node \u003d [n for n in container if n.nodeName \u003d\u003d \u0027bytes\u0027][0]"},{"line_number":1225,"context_line":"        self.assertEqual(node.firstChild.nodeValue, \u00273\u0027)"},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":"    def test_GET_accept_wildcard(self):"},{"line_number":1228,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a57fde8_7420874a","line":1225,"updated":"2017-01-12 18:10:20.000000000","message":"nit: there is no check of the timestamp for the last item in the listing","commit_id":"1b8980da892fec6ffec148745efc1126b54cebd8"}]}
