)]}'
{"api-ref/source/parameters.yaml":[{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"a08d0bd2ed58b6aa3c91e9b1439ade9d53f0c64e","unresolved":false,"context_lines":[{"line_number":621,"context_line":"  in: header"},{"line_number":622,"context_line":"  required: false"},{"line_number":623,"context_line":"  type: boolean"},{"line_number":624,"context_line":"X-History-Location:"},{"line_number":625,"context_line":"  description: |"},{"line_number":626,"context_line":"    The URL-encoded UTF-8 representation of the container that stores"},{"line_number":627,"context_line":"    previous versions of objects. If neither this nor ``X-Versions-Location``"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7a8ec9b2_667ccdb5","line":624,"updated":"2016-09-21 17:06:49.000000000","message":"should the docs say that both headers (X-History-Location and X-Versions-Location) should not be used together?","commit_id":"d4ece7ca6d9a42091a6ce54da70490bbc1e51177"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"87dc5ac129c9304378a84d10096c034fd0ae7c4e","unresolved":false,"context_lines":[{"line_number":621,"context_line":"  in: header"},{"line_number":622,"context_line":"  required: false"},{"line_number":623,"context_line":"  type: boolean"},{"line_number":624,"context_line":"X-History-Location:"},{"line_number":625,"context_line":"  description: |"},{"line_number":626,"context_line":"    The URL-encoded UTF-8 representation of the container that stores"},{"line_number":627,"context_line":"    previous versions of objects. If neither this nor ``X-Versions-Location``"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7a8ec9b2_d879f994","line":624,"in_reply_to":"7a8ec9b2_667ccdb5","updated":"2016-09-21 18:11:42.000000000","message":"Done","commit_id":"d4ece7ca6d9a42091a6ce54da70490bbc1e51177"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"a08d0bd2ed58b6aa3c91e9b1439ade9d53f0c64e","unresolved":false,"context_lines":[{"line_number":706,"context_line":"X-Remove-History-Location:"},{"line_number":707,"context_line":"  description: |"},{"line_number":708,"context_line":"    Set to any value to disable versioning. Note that this disables version"},{"line_number":709,"context_line":"    that was set via ``X-Versions-Location`` as well."},{"line_number":710,"context_line":"  in: header"},{"line_number":711,"context_line":"  required: false"},{"line_number":712,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7a8ec9b2_a6cdf532","line":709,"range":{"start_line":709,"start_character":23,"end_line":709,"end_character":42},"updated":"2016-09-21 17:06:49.000000000","message":"X-History-Location","commit_id":"d4ece7ca6d9a42091a6ce54da70490bbc1e51177"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"87dc5ac129c9304378a84d10096c034fd0ae7c4e","unresolved":false,"context_lines":[{"line_number":706,"context_line":"X-Remove-History-Location:"},{"line_number":707,"context_line":"  description: |"},{"line_number":708,"context_line":"    Set to any value to disable versioning. Note that this disables version"},{"line_number":709,"context_line":"    that was set via ``X-Versions-Location`` as well."},{"line_number":710,"context_line":"  in: header"},{"line_number":711,"context_line":"  required: false"},{"line_number":712,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7a8ec9b2_1811a104","line":709,"range":{"start_line":709,"start_character":23,"end_line":709,"end_character":42},"in_reply_to":"7a8ec9b2_a6cdf532","updated":"2016-09-21 18:11:42.000000000","message":"Nope, that was intentional. If you set up stack-based versioning with X-Versions-Location, then post with X-Remove-History-Location, we disable versioning. Anything else runs into consistency issues. (What if another POST made it through between my call to get_container_info and deciding whether or not to clear the flags? What if get_container_info is coming from a stale cache?)\n\nDitto below.","commit_id":"d4ece7ca6d9a42091a6ce54da70490bbc1e51177"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"a08d0bd2ed58b6aa3c91e9b1439ade9d53f0c64e","unresolved":false,"context_lines":[{"line_number":713,"context_line":"X-Remove-Versions-Location:"},{"line_number":714,"context_line":"  description: |"},{"line_number":715,"context_line":"    Set to any value to disable versioning. Note that this disables version"},{"line_number":716,"context_line":"    that was set via ``X-History-Location`` as well."},{"line_number":717,"context_line":"  in: header"},{"line_number":718,"context_line":"  required: false"},{"line_number":719,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7a8ec9b2_46e351a4","line":716,"range":{"start_line":716,"start_character":23,"end_line":716,"end_character":41},"updated":"2016-09-21 17:06:49.000000000","message":"X-Versions-Location","commit_id":"d4ece7ca6d9a42091a6ce54da70490bbc1e51177"}],"doc/source/api/object_versioning.rst":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"52e6f8efafa4583fe10033108e734c2224576bdd","unresolved":false,"context_lines":[{"line_number":88,"context_line":"       \u003clength\u003e\u003cobject_name\u003e/\u003ctimestamp\u003e"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"   Where ``length`` is the 3-character, zero-padded hexadecimal"},{"line_number":91,"context_line":"   character length of the object, ``\u003cobject_name\u003e`` is the object name,"},{"line_number":92,"context_line":"   and ``\u003ctimestamp\u003e`` is the time when the object was initially created"},{"line_number":93,"context_line":"   as a current version."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7a8ec9b2_b4f98650","line":91,"range":{"start_line":91,"start_character":27,"end_line":91,"end_character":33},"updated":"2016-09-22 05:53:29.000000000","message":"NIT: its the length of the object name not the object. But that has nothing to do with this patch :)\n\nBut was just reading in context.","commit_id":"60a2fe0ba8e59f4abbb5e9c5a9cd093818d5b26c"}],"swift/common/middleware/versioned_writes.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4b0e0867f93fc3e218349d84178f883da4e57d69","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"DELETE_MARKER_CONTENT_TYPE \u003d \u0027application/x-deleted;swift_versions_deleted\u003d1\u0027"},{"line_number":243,"context_line":"CLIENT_VERSIONS_LOC \u003d \u0027x-versions-location\u0027"},{"line_number":244,"context_line":"CLIENT_STACK_CONT \u003d \u0027x-stack-container\u0027"},{"line_number":245,"context_line":"CLIENT_HISTORY_CONT \u003d \u0027x-history-container\u0027"},{"line_number":246,"context_line":"SYSMETA_VERSIONS_LOC \u003d get_sys_meta_prefix(\u0027container\u0027) + \u0027versions-location\u0027"},{"line_number":247,"context_line":"SYSMETA_VERSIONS_MODE \u003d get_sys_meta_prefix(\u0027container\u0027) + \u0027versions-mode\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_837900ff","line":244,"updated":"2016-09-20 22:02:46.000000000","message":"As much as I prefer this new header over x-versions-location - i\u0027m not sure if it\u0027s in our best intrest to support two ways for clients to achieve the same thing?\n\nI think the fallacy is that we\u0027ll be able to someday remove support for the x-versions-location api - but, unfortunately - realistically - we won\u0027t :\u0027(","commit_id":"89eef1765be095f7b1725890e191fd280ab41328"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5c7c2ef7e853b8314ab269b240d840e1bebba400","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"DELETE_MARKER_CONTENT_TYPE \u003d \u0027application/x-deleted;swift_versions_deleted\u003d1\u0027"},{"line_number":243,"context_line":"CLIENT_VERSIONS_LOC \u003d \u0027x-versions-location\u0027"},{"line_number":244,"context_line":"CLIENT_STACK_CONT \u003d \u0027x-stack-container\u0027"},{"line_number":245,"context_line":"CLIENT_HISTORY_CONT \u003d \u0027x-history-container\u0027"},{"line_number":246,"context_line":"SYSMETA_VERSIONS_LOC \u003d get_sys_meta_prefix(\u0027container\u0027) + \u0027versions-location\u0027"},{"line_number":247,"context_line":"SYSMETA_VERSIONS_MODE \u003d get_sys_meta_prefix(\u0027container\u0027) + \u0027versions-mode\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_0e26f7cd","line":244,"in_reply_to":"7a8ec9b2_837900ff","updated":"2016-09-20 22:47:38.000000000","message":"We can keep it forever if you want. I was going off of your statement that\n\n\u003e x-versions-location should die in a fire, x-history-container and x-stack-container FTW!","commit_id":"89eef1765be095f7b1725890e191fd280ab41328"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4b0e0867f93fc3e218349d84178f883da4e57d69","unresolved":false,"context_lines":[{"line_number":756,"context_line":"        if any(req.headers.get(header) for header in ["},{"line_number":757,"context_line":"                \u0027X-Remove-Versions-Location\u0027,"},{"line_number":758,"context_line":"                \u0027X-Remove-Stack-Container\u0027,"},{"line_number":759,"context_line":"                \u0027X-Remove-History-Container\u0027]):"},{"line_number":760,"context_line":"            req.headers.update({CLIENT_VERSIONS_LOC: \u0027\u0027,"},{"line_number":761,"context_line":"                                SYSMETA_VERSIONS_LOC: \u0027\u0027,"},{"line_number":762,"context_line":"                                SYSMETA_VERSIONS_MODE: \u0027\u0027})"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_03d25000","line":759,"updated":"2016-09-20 22:02:46.000000000","message":"expected behavior with:\n\n    X-Remove-Stack-Container: true\n    X-History-Container: foo\n\n???","commit_id":"89eef1765be095f7b1725890e191fd280ab41328"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5c7c2ef7e853b8314ab269b240d840e1bebba400","unresolved":false,"context_lines":[{"line_number":756,"context_line":"        if any(req.headers.get(header) for header in ["},{"line_number":757,"context_line":"                \u0027X-Remove-Versions-Location\u0027,"},{"line_number":758,"context_line":"                \u0027X-Remove-Stack-Container\u0027,"},{"line_number":759,"context_line":"                \u0027X-Remove-History-Container\u0027]):"},{"line_number":760,"context_line":"            req.headers.update({CLIENT_VERSIONS_LOC: \u0027\u0027,"},{"line_number":761,"context_line":"                                SYSMETA_VERSIONS_LOC: \u0027\u0027,"},{"line_number":762,"context_line":"                                SYSMETA_VERSIONS_MODE: \u0027\u0027})"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_6e021b0d","line":759,"in_reply_to":"7a8ec9b2_03d25000","updated":"2016-09-20 22:47:38.000000000","message":"Should get\n\n x-container-sysmeta-versions-location: foo\n x-container-sysmeta-versions-mode: history\n\ni.e. the same thing as just sending\n\n X-History-Container: foo\n\nThat\u0027s why we del all the x-remove-* headers when we set sysmeta above.","commit_id":"89eef1765be095f7b1725890e191fd280ab41328"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"a08d0bd2ed58b6aa3c91e9b1439ade9d53f0c64e","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    content will still be recoverable from the archive container."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":".. note::"},{"line_number":41,"context_line":"    It is recommended to use a different archive container for"},{"line_number":42,"context_line":"    each container that is being versioned."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"When data is ``PUT`` into a versioned container (a container with the"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_a8c77e96","line":41,"updated":"2016-09-21 17:06:49.000000000","message":"should we add a note that going forward X-History-Location is the prefered method and the plan is to eventuallly deprecate X-Versions-Location?\n\nIMO, we should...","commit_id":"d4ece7ca6d9a42091a6ce54da70490bbc1e51177"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"87dc5ac129c9304378a84d10096c034fd0ae7c4e","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    content will still be recoverable from the archive container."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":".. note::"},{"line_number":41,"context_line":"    It is recommended to use a different archive container for"},{"line_number":42,"context_line":"    each container that is being versioned."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"When data is ``PUT`` into a versioned container (a container with the"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_2659da35","line":41,"in_reply_to":"7a8ec9b2_a8c77e96","updated":"2016-09-21 18:11:42.000000000","message":"I don\u0027t know that that\u0027s realistic. Short of security vulnerabilities, we\u0027ve never really *removed* client capabilities. We keep the warts, indefinitely, in case someone is using them. Even if we could stop new X-Versions-Location headers from being set (which doesn\u0027t seem like a good idea either), we\u0027d still have that state out there on disk. Realistically, it will never die.\n\nI view it like Linux\u0027s \"we don\u0027t break user space\" motto -- we shouldn\u0027t ever break a functioning application. A corollary is that we shouldn\u0027t ever prevent you from being able to deploy a currently-functioning app on a new cluster. Those just make people reluctant to upgrade. We might give operators those options, but then it\u0027s up to them and their use-case.\n\nI\u0027m OK with recommending one header over the other, though. At the same time, I also trust our users to read, think, and figure out which one they want. How about I swap the order so the (to my mind) more sane approach is first?","commit_id":"d4ece7ca6d9a42091a6ce54da70490bbc1e51177"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"a08d0bd2ed58b6aa3c91e9b1439ade9d53f0c64e","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":".. note::"},{"line_number":41,"context_line":"    It is recommended to use a different archive container for"},{"line_number":42,"context_line":"    each container that is being versioned."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"When data is ``PUT`` into a versioned container (a container with the"},{"line_number":45,"context_line":"versioning flag turned on), the existing data in the file is redirected to a"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_087b1229","line":42,"updated":"2016-09-21 17:06:49.000000000","message":"add a note about what happens if both flags are passed in the same request, which one takes precedence?\n\n...\nnice, actually a BadRequest error is returned, sounds good.","commit_id":"d4ece7ca6d9a42091a6ce54da70490bbc1e51177"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"87dc5ac129c9304378a84d10096c034fd0ae7c4e","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":".. note::"},{"line_number":41,"context_line":"    It is recommended to use a different archive container for"},{"line_number":42,"context_line":"    each container that is being versioned."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"When data is ``PUT`` into a versioned container (a container with the"},{"line_number":45,"context_line":"versioning flag turned on), the existing data in the file is redirected to a"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_d8cc9937","line":42,"in_reply_to":"7a8ec9b2_087b1229","updated":"2016-09-21 18:11:42.000000000","message":"Done","commit_id":"d4ece7ca6d9a42091a6ce54da70490bbc1e51177"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"bbcfa9014fe2c8ba52d11e331a80aac92628fa1e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Object versioning in swift is implemented by setting a flag on the container"},{"line_number":18,"context_line":"to tell swift to version all objects in the container. The value of the flag is"},{"line_number":19,"context_line":"the container where the versions are stored (commonly refered to as the"},{"line_number":20,"context_line":"\"archive container\"). The flag itself is one of two headers, which determines"},{"line_number":21,"context_line":"how object ``DELETE`` requests are handled:"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_0f8a2ebf","line":19,"range":{"start_line":19,"start_character":54,"end_line":19,"end_character":61},"updated":"2016-09-21 21:11:37.000000000","message":"referred?","commit_id":"69d0809e6f10fef985e11a9c645eba9877fa4150"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f66841508dff330e557ca04900cd08afaec4f57c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Object versioning in swift is implemented by setting a flag on the container"},{"line_number":18,"context_line":"to tell swift to version all objects in the container. The value of the flag is"},{"line_number":19,"context_line":"the container where the versions are stored (commonly refered to as the"},{"line_number":20,"context_line":"\"archive container\"). The flag itself is one of two headers, which determines"},{"line_number":21,"context_line":"how object ``DELETE`` requests are handled:"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_23d2a100","line":19,"range":{"start_line":19,"start_character":54,"end_line":19,"end_character":61},"in_reply_to":"7a8ec9b2_0f8a2ebf","updated":"2016-09-21 22:03:23.000000000","message":"Will fix.","commit_id":"69d0809e6f10fef985e11a9c645eba9877fa4150"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"bbcfa9014fe2c8ba52d11e331a80aac92628fa1e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    previous versions exist in the archive container, the most recent one is"},{"line_number":36,"context_line":"    copied over the current version, and the copy in the archive container is"},{"line_number":37,"context_line":"    deleted. As a result, if you have 5 total versions of the object, you must"},{"line_number":38,"context_line":"    delete the object 5 times to completely remove the object."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Either header may be used for the various containers within an account, but"},{"line_number":41,"context_line":"only one may be set for any given container. Attempting to set both"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_92ff4500","line":38,"range":{"start_line":38,"start_character":33,"end_line":38,"end_character":61},"updated":"2016-09-21 21:11:37.000000000","message":"\"completely remove the object\" sounds a bit confusing as each version is a whole object on its own and a DELETE completely deletes it.\n\nhow about: \"remove all versions of the object\" or something like that...","commit_id":"69d0809e6f10fef985e11a9c645eba9877fa4150"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f66841508dff330e557ca04900cd08afaec4f57c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    previous versions exist in the archive container, the most recent one is"},{"line_number":36,"context_line":"    copied over the current version, and the copy in the archive container is"},{"line_number":37,"context_line":"    deleted. As a result, if you have 5 total versions of the object, you must"},{"line_number":38,"context_line":"    delete the object 5 times to completely remove the object."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Either header may be used for the various containers within an account, but"},{"line_number":41,"context_line":"only one may be set for any given container. Attempting to set both"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_03b205e5","line":38,"range":{"start_line":38,"start_character":33,"end_line":38,"end_character":61},"in_reply_to":"7a8ec9b2_92ff4500","updated":"2016-09-21 22:03:23.000000000","message":"Yeah, that\u0027s how it was before, too. I can fix that since I need a new patchset anyway.","commit_id":"69d0809e6f10fef985e11a9c645eba9877fa4150"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"bbcfa9014fe2c8ba52d11e331a80aac92628fa1e","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        self.logger \u003d get_logger(conf, log_route\u003d\u0027versioned_writes\u0027)"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"    def container_request(self, req, start_response, enabled):"},{"line_number":679,"context_line":"        if CLIENT_VERSIONS_LOC in req.headers:"},{"line_number":680,"context_line":"            val \u003d req.headers.get(CLIENT_VERSIONS_LOC)"},{"line_number":681,"context_line":"            if not val:"},{"line_number":682,"context_line":"                # empty value is the same as X-Remove-Versions-Location"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_9231050e","line":679,"updated":"2016-09-21 21:11:37.000000000","message":"i\u0027m thinking we should be able to reduce the code duplication and have the if/else just around lines 703/734, but it is not needed for this patch, it could be on a follow-up after release","commit_id":"69d0809e6f10fef985e11a9c645eba9877fa4150"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"bbcfa9014fe2c8ba52d11e331a80aac92628fa1e","unresolved":false,"context_lines":[{"line_number":689,"context_line":"                raise HTTPPreconditionFailed("},{"line_number":690,"context_line":"                    request\u003dreq, content_type\u003d\u0027text/plain\u0027,"},{"line_number":691,"context_line":"                    body\u003d\u0027Versioned Writes is disabled\u0027)"},{"line_number":692,"context_line":"            elif req.headers.get(CLIENT_HISTORY_LOC):"},{"line_number":693,"context_line":"                raise HTTPBadRequest("},{"line_number":694,"context_line":"                    request\u003dreq, content_type\u003d\u0027text/plain\u0027,"},{"line_number":695,"context_line":"                    body\u003d\u0027Only one of %s or %s may be specified\u0027 % ("}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_ad05c2c2","line":692,"range":{"start_line":692,"start_character":17,"end_line":692,"end_character":51},"updated":"2016-09-21 21:11:37.000000000","message":"if client sent a request with headers:\nX-Versions-Location \u003d \u0027\u0027 and X-History-Location\u003d\u0027archive\u0027\nwe would not return HTTPBadRequest, but would end-up with:\nX-Remove-Versions-Location\u003d\u0027x\u0027 and X-History-Location\u003d\u0027archive\u0027 and ultimately (L742) removing the x-remove-versions-location and setting the history header. \n\nI think this is ok, a \u0027\u0027 value always gets translated to a \u0027Remove\u0027 anyway, it\u0027s just that it is technically a deviation from what this line is trying to accomplish (i.e., return HTTPBadRequest)","commit_id":"69d0809e6f10fef985e11a9c645eba9877fa4150"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f66841508dff330e557ca04900cd08afaec4f57c","unresolved":false,"context_lines":[{"line_number":689,"context_line":"                raise HTTPPreconditionFailed("},{"line_number":690,"context_line":"                    request\u003dreq, content_type\u003d\u0027text/plain\u0027,"},{"line_number":691,"context_line":"                    body\u003d\u0027Versioned Writes is disabled\u0027)"},{"line_number":692,"context_line":"            elif req.headers.get(CLIENT_HISTORY_LOC):"},{"line_number":693,"context_line":"                raise HTTPBadRequest("},{"line_number":694,"context_line":"                    request\u003dreq, content_type\u003d\u0027text/plain\u0027,"},{"line_number":695,"context_line":"                    body\u003d\u0027Only one of %s or %s may be specified\u0027 % ("}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_03f5a5eb","line":692,"range":{"start_line":692,"start_character":17,"end_line":692,"end_character":51},"in_reply_to":"7a8ec9b2_ad05c2c2","updated":"2016-09-21 22:03:23.000000000","message":"\u003e ... removing the x-remove-versions-location and setting the history header. \n\nThat\u0027s the goal, but *I never change it to sysmeta*! It\u0027s an elif! Will fix, and add more tests.","commit_id":"69d0809e6f10fef985e11a9c645eba9877fa4150"}]}
