)]}'
{"swiftclient/shell.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6709b85aeb6458bac2ca66fafb63086c74bf0c0a","unresolved":false,"context_lines":[{"line_number":535,"context_line":"                    subdir \u003d item.get(\u0027subdir\u0027)"},{"line_number":536,"context_line":"                    symlink \u003d \u0027   \u0027"},{"line_number":537,"context_line":"                    if item.get(\u0027symlink_path\u0027):"},{"line_number":538,"context_line":"                        symlink \u003d \u0027(S)\u0027"},{"line_number":539,"context_line":"                    content_type \u003d item.get(\u0027content_type\u0027)"},{"line_number":540,"context_line":"                    if subdir is None:"},{"line_number":541,"context_line":"                        item_bytes \u003d item.get(\u0027bytes\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_286135a9","line":538,"updated":"2019-11-14 17:29:13.000000000","message":"that\u0027s cool!","commit_id":"02524c4d73baf704db850de7446f34297d233651"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6709b85aeb6458bac2ca66fafb63086c74bf0c0a","unresolved":false,"context_lines":[{"line_number":546,"context_line":"                        item_bytes \u003d 0"},{"line_number":547,"context_line":"                        byte_str \u003d prt_bytes(item_bytes, human)"},{"line_number":548,"context_line":"                        date \u003d xtime \u003d \u0027\u0027"},{"line_number":549,"context_line":"                        item_name \u003d subdir"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"                    if not options[\u0027totals\u0027]:"},{"line_number":552,"context_line":"                        output_manager.print_msg("}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_88f629d8","line":549,"updated":"2019-11-14 17:29:13.000000000","message":"I wonder if it\u0027d be more fun to do something like:\n\n    if \u0027symlink_path\u0027 in item:\n        item_name \u003d \"%s -\u003e %s\" (item_name, item[\u0027symlink_path\u0027)","commit_id":"02524c4d73baf704db850de7446f34297d233651"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"f09fe2e6514eced4c95788cd8854567291e8b616","unresolved":false,"context_lines":[{"line_number":546,"context_line":"                        item_bytes \u003d 0"},{"line_number":547,"context_line":"                        byte_str \u003d prt_bytes(item_bytes, human)"},{"line_number":548,"context_line":"                        date \u003d xtime \u003d \u0027\u0027"},{"line_number":549,"context_line":"                        item_name \u003d subdir"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"                    if not options[\u0027totals\u0027]:"},{"line_number":552,"context_line":"                        output_manager.print_msg("}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_37d16558","line":549,"in_reply_to":"3fa7e38b_88f629d8","updated":"2019-11-19 04:18:04.000000000","message":"That\u0027s cool! It\u0027ll be easy to understand where is the target object.","commit_id":"02524c4d73baf704db850de7446f34297d233651"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6709b85aeb6458bac2ca66fafb63086c74bf0c0a","unresolved":false,"context_lines":[{"line_number":961,"context_line":"                        in this case)."},{"line_number":962,"context_line":"                        If you want to create a Swift symlink, please use \"-\""},{"line_number":963,"context_line":"                        with --object-name \u003cobject-name\u003e and apppend a header"},{"line_number":964,"context_line":"                        \"X-Symlink-Target: \u003ccontainer\u003e/\u003cobject\u003e\" for it."},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"Optional arguments:"},{"line_number":967,"context_line":"  -c, --changed         Only upload files that have changed since the last"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_e899dd6c","line":964,"updated":"2019-11-14 17:29:13.000000000","message":"given that we\u0027re recommending this interface we should probably have a test for it...","commit_id":"02524c4d73baf704db850de7446f34297d233651"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"f09fe2e6514eced4c95788cd8854567291e8b616","unresolved":false,"context_lines":[{"line_number":961,"context_line":"                        in this case)."},{"line_number":962,"context_line":"                        If you want to create a Swift symlink, please use \"-\""},{"line_number":963,"context_line":"                        with --object-name \u003cobject-name\u003e and apppend a header"},{"line_number":964,"context_line":"                        \"X-Symlink-Target: \u003ccontainer\u003e/\u003cobject\u003e\" for it."},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"Optional arguments:"},{"line_number":967,"context_line":"  -c, --changed         Only upload files that have changed since the last"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_f7c66d9c","line":964,"in_reply_to":"3fa7e38b_e899dd6c","updated":"2019-11-19 04:18:04.000000000","message":"I think we might need another specific sub command likes `swift link \u003ccontainer\u003e \u003cobject\u003e ...` or `swift symlink`","commit_id":"02524c4d73baf704db850de7446f34297d233651"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a36e4842f0b15f3234e13b3bb1bedd95d2754f46","unresolved":false,"context_lines":[{"line_number":951,"context_line":"\u0027\u0027\u0027"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"st_link_help \u003d \u0027\u0027\u0027"},{"line_number":954,"context_line":"Links object to target object, optionally with target container and"},{"line_number":955,"context_line":"object. If \u003caccount\u003e is not set, will use current user\u0027s account ."},{"line_number":956,"context_line":""},{"line_number":957,"context_line":"Positional arguments:"},{"line_number":958,"context_line":"  \u003ccontainer\u003e             Name of container to store."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_edd39d62","line":955,"range":{"start_line":954,"start_character":31,"end_line":955,"end_character":6},"updated":"2019-12-14 00:22:32.000000000","message":"These aren\u0027t actually optional, are they?","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"e89ccd9da635b51d3c185c3e522de1025d5187a0","unresolved":false,"context_lines":[{"line_number":951,"context_line":"\u0027\u0027\u0027"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"st_link_help \u003d \u0027\u0027\u0027"},{"line_number":954,"context_line":"Links object to target object, optionally with target container and"},{"line_number":955,"context_line":"object. If \u003caccount\u003e is not set, will use current user\u0027s account ."},{"line_number":956,"context_line":""},{"line_number":957,"context_line":"Positional arguments:"},{"line_number":958,"context_line":"  \u003ccontainer\u003e             Name of container to store."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_2499c71d","line":955,"range":{"start_line":954,"start_character":31,"end_line":955,"end_character":6},"in_reply_to":"3fa7e38b_edd39d62","updated":"2019-12-16 04:42:49.000000000","message":"Done","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a36e4842f0b15f3234e13b3bb1bedd95d2754f46","unresolved":false,"context_lines":[{"line_number":967,"context_line":"                        same as name of source account."},{"line_number":968,"context_line":"  --target-etag \u003cetag\u003e"},{"line_number":969,"context_line":"                        Adds etag to verify if that matches the etag of"},{"line_number":970,"context_line":"                        target object."},{"line_number":971,"context_line":"  -H, --header \u003cheader:value\u003e"},{"line_number":972,"context_line":"                        Adds a customized request header. This option may be"},{"line_number":973,"context_line":"                        repeated. Example: -H \"content-type:text/plain\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_0d3b999b","line":970,"updated":"2019-12-14 00:22:32.000000000","message":"I wonder if there should be a note about how not all versions of swift support this, even among those that *do* support symlinks...\n\nSeems like it\u0027d probably be worthwhile because of how it fails: The client-provided target-etag header is ignored, and a \"dynamic\" symlink gets created instead of a static one :-/","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"e89ccd9da635b51d3c185c3e522de1025d5187a0","unresolved":false,"context_lines":[{"line_number":967,"context_line":"                        same as name of source account."},{"line_number":968,"context_line":"  --target-etag \u003cetag\u003e"},{"line_number":969,"context_line":"                        Adds etag to verify if that matches the etag of"},{"line_number":970,"context_line":"                        target object."},{"line_number":971,"context_line":"  -H, --header \u003cheader:value\u003e"},{"line_number":972,"context_line":"                        Adds a customized request header. This option may be"},{"line_number":973,"context_line":"                        repeated. Example: -H \"content-type:text/plain\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_44b72387","line":970,"in_reply_to":"3fa7e38b_0d3b999b","updated":"2019-12-16 04:42:49.000000000","message":"I guess we have to have a version highline in here and let users know that. Also, might raise an exception once they try to use this header with non support swift version.","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a36e4842f0b15f3234e13b3bb1bedd95d2754f46","unresolved":false,"context_lines":[{"line_number":997,"context_line":"    else:"},{"line_number":998,"context_line":"        container \u003d args[0]"},{"line_number":999,"context_line":"        sym_object \u003d args[1]"},{"line_number":1000,"context_line":"        target_container, target_object \u003d args[2].split(\u0027/\u0027)"},{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":"        if options[\u0027target_account\u0027]:"},{"line_number":1003,"context_line":"            options[\u0027header\u0027].append(\u0027X-Symlink-Target-Account: %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_6dd1ed56","line":1000,"updated":"2019-12-14 00:22:32.000000000","message":"This\u0027ll ValueError if there\u0027s no slash:\n\nvagrant@saio:/vagrant/python-swiftclient$ swift link c l o\nTraceback (most recent call last):\n  File \"/usr/local/bin/swift\", line 7, in \u003cmodule\u003e\n    exec(compile(f.read(), __file__, \u0027exec\u0027))\n  File \"/vagrant/python-swiftclient/bin/swift\", line 24, in \u003cmodule\u003e\n    sys.exit(main())\n  File \"/vagrant/python-swiftclient/swiftclient/shell.py\", line 2109, in main\n    globals()[\u0027st_%s\u0027 % args[0]](parser, argv[1:], output)\n  File \"/vagrant/python-swiftclient/swiftclient/shell.py\", line 1000, in st_link\n    target_container, target_object \u003d args[2].split(\u0027/\u0027)\nValueError: not enough values to unpack (expected 2, got 1)\n\nMight be cool to have target_container default to container in that case?","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"e89ccd9da635b51d3c185c3e522de1025d5187a0","unresolved":false,"context_lines":[{"line_number":997,"context_line":"    else:"},{"line_number":998,"context_line":"        container \u003d args[0]"},{"line_number":999,"context_line":"        sym_object \u003d args[1]"},{"line_number":1000,"context_line":"        target_container, target_object \u003d args[2].split(\u0027/\u0027)"},{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":"        if options[\u0027target_account\u0027]:"},{"line_number":1003,"context_line":"            options[\u0027header\u0027].append(\u0027X-Symlink-Target-Account: %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_e4abaf1c","line":1000,"in_reply_to":"3fa7e38b_6dd1ed56","updated":"2019-12-16 04:42:49.000000000","message":"that sounds good. I\u0027ll do that","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a36e4842f0b15f3234e13b3bb1bedd95d2754f46","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"            options[\u0027header\u0027].append(\u0027X-Symlink-Target-Etag: %s\u0027 %"},{"line_number":1009,"context_line":"                                     options[\u0027target_etag\u0027])"},{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":"        options[\u0027header\u0027].append(\u0027content-type: application/symlink\u0027)"},{"line_number":1012,"context_line":"        options[\u0027header\u0027].append(\u0027X-Symlink-Target: %s/%s\u0027 %"},{"line_number":1013,"context_line":"                                 (target_container, target_object))"},{"line_number":1014,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_4d251116","line":1011,"updated":"2019-12-14 00:22:32.000000000","message":"Maybe only do this in an else block -- then if it *is* a static link, it\u0027ll pick up the Content-Type of the target.\n\nAt least, that\u0027s what we\u0027re planning to do with versioning...","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"e89ccd9da635b51d3c185c3e522de1025d5187a0","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"            options[\u0027header\u0027].append(\u0027X-Symlink-Target-Etag: %s\u0027 %"},{"line_number":1009,"context_line":"                                     options[\u0027target_etag\u0027])"},{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":"        options[\u0027header\u0027].append(\u0027content-type: application/symlink\u0027)"},{"line_number":1012,"context_line":"        options[\u0027header\u0027].append(\u0027X-Symlink-Target: %s/%s\u0027 %"},{"line_number":1013,"context_line":"                                 (target_container, target_object))"},{"line_number":1014,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_04a92b24","line":1011,"in_reply_to":"3fa7e38b_4d251116","updated":"2019-12-16 04:42:49.000000000","message":"Thanks for pointing that, I\u0027ll do that.","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a36e4842f0b15f3234e13b3bb1bedd95d2754f46","unresolved":false,"context_lines":[{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":"        options[\u0027header\u0027].append(\u0027content-type: application/symlink\u0027)"},{"line_number":1012,"context_line":"        options[\u0027header\u0027].append(\u0027X-Symlink-Target: %s/%s\u0027 %"},{"line_number":1013,"context_line":"                                 (target_container, target_object))"},{"line_number":1014,"context_line":""},{"line_number":1015,"context_line":"    with SwiftService(options\u003doptions) as swift:"},{"line_number":1016,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_cd38213e","line":1013,"range":{"start_line":1013,"start_character":34,"end_line":1013,"end_character":65},"updated":"2019-12-14 00:22:32.000000000","message":"Probably want to quote() these...","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"87b18dbbad3cc7fe951ee529a28ba9718600b38c","unresolved":false,"context_lines":[{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":"        options[\u0027header\u0027].append(\u0027content-type: application/symlink\u0027)"},{"line_number":1012,"context_line":"        options[\u0027header\u0027].append(\u0027X-Symlink-Target: %s/%s\u0027 %"},{"line_number":1013,"context_line":"                                 (target_container, target_object))"},{"line_number":1014,"context_line":""},{"line_number":1015,"context_line":"    with SwiftService(options\u003doptions) as swift:"},{"line_number":1016,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_3f03100f","line":1013,"range":{"start_line":1013,"start_character":34,"end_line":1013,"end_character":65},"in_reply_to":"3fa7e38b_c4a23340","updated":"2019-12-16 05:23:50.000000000","message":"$ swift link test ln-test.pyc \u0027test s 2.pyc\u0027\nheaders: [u\u0027content-type: application/symlink\u0027, u\"X-Symlink-Target: \u0027test/test s 2.pyc\u0027\"]\ncreated container test\nCreated a symlink test/ln-test.pyc to \u0027test/test s 2.pyc\u0027\n\n\n$ swift list test --lh\n1.0K 2018-01-24 03:10:52 application/octet-stream     file2\n   0 2019-12-16 05:15:34      application/symlink (S) ln-test.pyc -\u003e /v1/AUTH_charz/%27test/test%20s%202.pyc%\n   \n   \n$ swift stat test ln-test.pyc\nObject HEAD failed: https://cloud.swiftstack.com/v1/AUTH_charz/test/ln-test.pyc 404 Not Found\nFailed Transaction ID: tx1724c8047dc84a3a9440a-005df712fc\n\n\n^^ But to have quote with target container/object look not right, or something I missing?\n\n$ swift link test ln-test.pyc \u0027test s 2.pyc\u0027\nheaders: [u\u0027content-type: application/symlink\u0027, u\u0027X-Symlink-Target: test/test s 2.pyc\u0027]\ncreated container test\nCreated a symlink test/ln-test.pyc to test/test s 2.pyc\n\n$ swift list test --lh\n1.0K 2018-01-24 03:10:52 application/octet-stream     file2\n   0 2019-12-16 05:16:39      application/symlink (S) ln-test.pyc -\u003e /v1/AUTH_charz/test/test%20s%202.pyc\n   0 2019-12-16 05:08:13      application/symlink (S) ln-uploader.py -\u003e /v1/AUTH_charz/test/uploader.py\n\n$ swift stat test ln-test.pyc\n               Account: AUTH_charz\n             Container: test\n                Object: ln-test.pyc\n          Content Type: application/x-python-code\n        Content Length: 71243\n         Last Modified: Mon, 16 Dec 2019 05:08:55 GMT\n                  ETag: b183272ac7b9ec9ceadaae3b45667ffe\n            Meta Mtime: 1576472890.749264\n      Content-Location: /v1/AUTH_charz/test/test s 2.pyc\n         Accept-Ranges: bytes\n           X-Timestamp: 1576472934.08539\n            X-Trans-Id: tx80d8e3629992468096ee3-005df7133c\nX-Openstack-Request-Id: tx80d8e3629992468096ee3-005df7133c","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"e89ccd9da635b51d3c185c3e522de1025d5187a0","unresolved":false,"context_lines":[{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":"        options[\u0027header\u0027].append(\u0027content-type: application/symlink\u0027)"},{"line_number":1012,"context_line":"        options[\u0027header\u0027].append(\u0027X-Symlink-Target: %s/%s\u0027 %"},{"line_number":1013,"context_line":"                                 (target_container, target_object))"},{"line_number":1014,"context_line":""},{"line_number":1015,"context_line":"    with SwiftService(options\u003doptions) as swift:"},{"line_number":1016,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_c4a23340","line":1013,"range":{"start_line":1013,"start_character":34,"end_line":1013,"end_character":65},"in_reply_to":"3fa7e38b_cd38213e","updated":"2019-12-16 04:42:49.000000000","message":"ouch! yeah! we should","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a36e4842f0b15f3234e13b3bb1bedd95d2754f46","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"                                    r[\u0027container\u0027],"},{"line_number":1028,"context_line":"                                    r[\u0027object\u0027],"},{"line_number":1029,"context_line":"                                    r[\u0027headers\u0027][\u0027X-Symlink-Target\u0027]))"},{"line_number":1030,"context_line":"                            if r[\u0027action\u0027] \u003d\u003d \u0027create_container\u0027:"},{"line_number":1031,"context_line":"                                output_manager.print_msg("},{"line_number":1032,"context_line":"                                    \u0027created container %s\u0027 % r[\u0027container\u0027]"},{"line_number":1033,"context_line":"                                )"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_ad3fe520","line":1030,"updated":"2019-12-14 00:22:32.000000000","message":"Pretty sure this should be de-dented a layer.","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"e89ccd9da635b51d3c185c3e522de1025d5187a0","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"                                    r[\u0027container\u0027],"},{"line_number":1028,"context_line":"                                    r[\u0027object\u0027],"},{"line_number":1029,"context_line":"                                    r[\u0027headers\u0027][\u0027X-Symlink-Target\u0027]))"},{"line_number":1030,"context_line":"                            if r[\u0027action\u0027] \u003d\u003d \u0027create_container\u0027:"},{"line_number":1031,"context_line":"                                output_manager.print_msg("},{"line_number":1032,"context_line":"                                    \u0027created container %s\u0027 % r[\u0027container\u0027]"},{"line_number":1033,"context_line":"                                )"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_645d7f53","line":1030,"in_reply_to":"3fa7e38b_ad3fe520","updated":"2019-12-16 04:42:49.000000000","message":"I missing that. \u003e_\u003c\nwill fix","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a36e4842f0b15f3234e13b3bb1bedd95d2754f46","unresolved":false,"context_lines":[{"line_number":1051,"context_line":"                                        msg +\u003d \u0027: \u0027"},{"line_number":1052,"context_line":"                                    msg +\u003d (error.http_response_content"},{"line_number":1053,"context_line":"                                            .decode(\u0027utf8\u0027)[:60])"},{"line_number":1054,"context_line":"                                msg \u003d \u0027: %s\u0027 % msg"},{"line_number":1055,"context_line":"                        else:"},{"line_number":1056,"context_line":"                            msg \u003d \u0027: %s\u0027 % error"},{"line_number":1057,"context_line":"                        output_manager.warning("}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_6d132db9","line":1054,"updated":"2019-12-14 00:22:32.000000000","message":"Wait, so *either* we get the storage policy *or* we get the response code? Why not both?","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"e89ccd9da635b51d3c185c3e522de1025d5187a0","unresolved":false,"context_lines":[{"line_number":1051,"context_line":"                                        msg +\u003d \u0027: \u0027"},{"line_number":1052,"context_line":"                                    msg +\u003d (error.http_response_content"},{"line_number":1053,"context_line":"                                            .decode(\u0027utf8\u0027)[:60])"},{"line_number":1054,"context_line":"                                msg \u003d \u0027: %s\u0027 % msg"},{"line_number":1055,"context_line":"                        else:"},{"line_number":1056,"context_line":"                            msg \u003d \u0027: %s\u0027 % error"},{"line_number":1057,"context_line":"                        output_manager.warning("}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_e4708fde","line":1054,"in_reply_to":"3fa7e38b_6d132db9","updated":"2019-12-16 04:42:49.000000000","message":"good suggestion!","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a36e4842f0b15f3234e13b3bb1bedd95d2754f46","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"                        )"},{"line_number":1061,"context_line":"                    else:"},{"line_number":1062,"context_line":"                        output_manager.error(\"%s\" % error)"},{"line_number":1063,"context_line":"                        too_large \u003d (isinstance(error, ClientException) and"},{"line_number":1064,"context_line":"                                     error.http_status \u003d\u003d 413)"},{"line_number":1065,"context_line":"                        if too_large and options[\u0027verbose\u0027] \u003e 0:"},{"line_number":1066,"context_line":"                            output_manager.error("},{"line_number":1067,"context_line":"                                \"Consider using the --segment-size option \""},{"line_number":1068,"context_line":"                                \"to chunk the object\")"},{"line_number":1069,"context_line":""},{"line_number":1070,"context_line":"        except SwiftError as e:"},{"line_number":1071,"context_line":"            output_manager.error(e.value)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_2d0d358f","line":1068,"range":{"start_line":1063,"start_character":24,"end_line":1068,"end_character":54},"updated":"2019-12-14 00:22:32.000000000","message":"Since we\u0027re in charge of providing the (empty) body to upload, this should be unnecessary.","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"e89ccd9da635b51d3c185c3e522de1025d5187a0","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"                        )"},{"line_number":1061,"context_line":"                    else:"},{"line_number":1062,"context_line":"                        output_manager.error(\"%s\" % error)"},{"line_number":1063,"context_line":"                        too_large \u003d (isinstance(error, ClientException) and"},{"line_number":1064,"context_line":"                                     error.http_status \u003d\u003d 413)"},{"line_number":1065,"context_line":"                        if too_large and options[\u0027verbose\u0027] \u003e 0:"},{"line_number":1066,"context_line":"                            output_manager.error("},{"line_number":1067,"context_line":"                                \"Consider using the --segment-size option \""},{"line_number":1068,"context_line":"                                \"to chunk the object\")"},{"line_number":1069,"context_line":""},{"line_number":1070,"context_line":"        except SwiftError as e:"},{"line_number":1071,"context_line":"            output_manager.error(e.value)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_24678727","line":1068,"range":{"start_line":1063,"start_character":24,"end_line":1068,"end_character":54},"in_reply_to":"3fa7e38b_2d0d358f","updated":"2019-12-16 04:42:49.000000000","message":"Will remove it.","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"e1b5dcbd2201abc8aa829669c094cc66b9824cc1","unresolved":false,"context_lines":[{"line_number":537,"context_line":"                    symlink \u003d \u0027   \u0027"},{"line_number":538,"context_line":"                    symlink_obj \u003d \u0027\u0027"},{"line_number":539,"context_line":"                    if item.get(\u0027symlink_path\u0027):"},{"line_number":540,"context_line":"                        symlink \u003d \u0027(S)\u0027"},{"line_number":541,"context_line":"                        symlink_obj \u003d \u0027 -\u003e %s\u0027 % item.get(\u0027symlink_path\u0027)"},{"line_number":542,"context_line":"                    content_type \u003d item.get(\u0027content_type\u0027)"},{"line_number":543,"context_line":"                    if subdir is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_46bca76a","line":540,"range":{"start_line":540,"start_character":24,"end_line":540,"end_character":39},"updated":"2020-01-20 02:49:12.000000000","message":"IMO, this is not needed...","commit_id":"b577212ec0675c2cc003ddde8819002d01eeb182"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"4e64769ef76edea9a707014e20327d0e63f1fd2f","unresolved":false,"context_lines":[{"line_number":537,"context_line":"                    symlink \u003d \u0027   \u0027"},{"line_number":538,"context_line":"                    symlink_obj \u003d \u0027\u0027"},{"line_number":539,"context_line":"                    if item.get(\u0027symlink_path\u0027):"},{"line_number":540,"context_line":"                        symlink \u003d \u0027(S)\u0027"},{"line_number":541,"context_line":"                        symlink_obj \u003d \u0027 -\u003e %s\u0027 % item.get(\u0027symlink_path\u0027)"},{"line_number":542,"context_line":"                    content_type \u003d item.get(\u0027content_type\u0027)"},{"line_number":543,"context_line":"                    if subdir is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_96d086c8","line":540,"range":{"start_line":540,"start_character":24,"end_line":540,"end_character":39},"in_reply_to":"3fa7e38b_46bca76a","updated":"2020-01-20 14:28:30.000000000","message":"just want to highlight that since symlink will be used more frequently.","commit_id":"b577212ec0675c2cc003ddde8819002d01eeb182"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"e1b5dcbd2201abc8aa829669c094cc66b9824cc1","unresolved":false,"context_lines":[{"line_number":538,"context_line":"                    symlink_obj \u003d \u0027\u0027"},{"line_number":539,"context_line":"                    if item.get(\u0027symlink_path\u0027):"},{"line_number":540,"context_line":"                        symlink \u003d \u0027(S)\u0027"},{"line_number":541,"context_line":"                        symlink_obj \u003d \u0027 -\u003e %s\u0027 % item.get(\u0027symlink_path\u0027)"},{"line_number":542,"context_line":"                    content_type \u003d item.get(\u0027content_type\u0027)"},{"line_number":543,"context_line":"                    if subdir is None:"},{"line_number":544,"context_line":"                        item_bytes \u003d item.get(\u0027bytes\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_06b6af8a","line":541,"range":{"start_line":541,"start_character":24,"end_line":541,"end_character":35},"updated":"2020-01-20 02:49:12.000000000","message":"while this worked out pretty well...\n\nin this case too a certain resemblance to unix \u0027ls\u0027 is good.","commit_id":"b577212ec0675c2cc003ddde8819002d01eeb182"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"4e64769ef76edea9a707014e20327d0e63f1fd2f","unresolved":false,"context_lines":[{"line_number":538,"context_line":"                    symlink_obj \u003d \u0027\u0027"},{"line_number":539,"context_line":"                    if item.get(\u0027symlink_path\u0027):"},{"line_number":540,"context_line":"                        symlink \u003d \u0027(S)\u0027"},{"line_number":541,"context_line":"                        symlink_obj \u003d \u0027 -\u003e %s\u0027 % item.get(\u0027symlink_path\u0027)"},{"line_number":542,"context_line":"                    content_type \u003d item.get(\u0027content_type\u0027)"},{"line_number":543,"context_line":"                    if subdir is None:"},{"line_number":544,"context_line":"                        item_bytes \u003d item.get(\u0027bytes\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_56176e9e","line":541,"range":{"start_line":541,"start_character":24,"end_line":541,"end_character":35},"in_reply_to":"3fa7e38b_06b6af8a","updated":"2020-01-20 14:28:30.000000000","message":"maybe we show it once user with the long option?","commit_id":"b577212ec0675c2cc003ddde8819002d01eeb182"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"e1b5dcbd2201abc8aa829669c094cc66b9824cc1","unresolved":false,"context_lines":[{"line_number":945,"context_line":"            output_manager.error(e.value)"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"st_link_options \u003d \u0027\u0027\u0027[--target-account \u003ctarget-account\u003e]"},{"line_number":949,"context_line":"                  [--target-container \u003ctarget-container\u003e]"},{"line_number":950,"context_line":"                  [--target-etag \u003cetag\u003e] [--header \u003cheader\u003e]"},{"line_number":951,"context_line":"                  \u003ccontainer\u003e \u003cobject\u003e \u003ctarget-object\u003e"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_c6a73751","line":948,"range":{"start_line":948,"start_character":0,"end_line":948,"end_character":15},"updated":"2020-01-20 02:49:12.000000000","message":"my first attempt at testing I switched the params around, I think that\u0027s because of my sub-conscious comparison to unix ln command.","commit_id":"b577212ec0675c2cc003ddde8819002d01eeb182"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"4e64769ef76edea9a707014e20327d0e63f1fd2f","unresolved":false,"context_lines":[{"line_number":945,"context_line":"            output_manager.error(e.value)"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"st_link_options \u003d \u0027\u0027\u0027[--target-account \u003ctarget-account\u003e]"},{"line_number":949,"context_line":"                  [--target-container \u003ctarget-container\u003e]"},{"line_number":950,"context_line":"                  [--target-etag \u003cetag\u003e] [--header \u003cheader\u003e]"},{"line_number":951,"context_line":"                  \u003ccontainer\u003e \u003cobject\u003e \u003ctarget-object\u003e"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_f6d77af3","line":948,"range":{"start_line":948,"start_character":0,"end_line":948,"end_character":15},"in_reply_to":"3fa7e38b_c6a73751","updated":"2020-01-20 14:28:30.000000000","message":"hm.. I think you\u0027re right. That\u0027s pretty easy to switch params around when you try it. I think we can follow the way how `unix ln` does. \n$ ln -s \u003ctarget-file\u003e \u003clink-file\u003e \n$ swift link \u003ctarget-container\u003e \u003ctarget-object\u003e \u003clink-container\u003e \u003clink-object\u003e","commit_id":"b577212ec0675c2cc003ddde8819002d01eeb182"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"e1b5dcbd2201abc8aa829669c094cc66b9824cc1","unresolved":false,"context_lines":[{"line_number":948,"context_line":"st_link_options \u003d \u0027\u0027\u0027[--target-account \u003ctarget-account\u003e]"},{"line_number":949,"context_line":"                  [--target-container \u003ctarget-container\u003e]"},{"line_number":950,"context_line":"                  [--target-etag \u003cetag\u003e] [--header \u003cheader\u003e]"},{"line_number":951,"context_line":"                  \u003ccontainer\u003e \u003cobject\u003e \u003ctarget-object\u003e"},{"line_number":952,"context_line":"\u0027\u0027\u0027"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"st_link_help \u003d \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_a6ac7b36","line":951,"range":{"start_line":951,"start_character":31,"end_line":951,"end_character":37},"updated":"2020-01-20 02:49:12.000000000","message":"how about \u003clink\u003e?","commit_id":"b577212ec0675c2cc003ddde8819002d01eeb182"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"4e64769ef76edea9a707014e20327d0e63f1fd2f","unresolved":false,"context_lines":[{"line_number":948,"context_line":"st_link_options \u003d \u0027\u0027\u0027[--target-account \u003ctarget-account\u003e]"},{"line_number":949,"context_line":"                  [--target-container \u003ctarget-container\u003e]"},{"line_number":950,"context_line":"                  [--target-etag \u003cetag\u003e] [--header \u003cheader\u003e]"},{"line_number":951,"context_line":"                  \u003ccontainer\u003e \u003cobject\u003e \u003ctarget-object\u003e"},{"line_number":952,"context_line":"\u0027\u0027\u0027"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"st_link_help \u003d \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_16db3620","line":951,"range":{"start_line":951,"start_character":31,"end_line":951,"end_character":37},"in_reply_to":"3fa7e38b_a6ac7b36","updated":"2020-01-20 14:28:30.000000000","message":"agree, see above.","commit_id":"b577212ec0675c2cc003ddde8819002d01eeb182"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"5474c01a914ed5c669750c1a92dd3a3da9e37aeb","unresolved":false,"context_lines":[{"line_number":1026,"context_line":"            options[\u0027header\u0027].append(\u0027content-type: application/symlink\u0027)"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"        target_link \u003d \u0027/\u0027.join([target_container, target_object])"},{"line_number":1029,"context_line":"        options[\u0027header\u0027].append(\u0027X-Symlink-Target: %s\u0027 % target_link)"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"    with SwiftService(options\u003doptions) as swift:"},{"line_number":1032,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_a5784af7","line":1029,"updated":"2019-12-16 15:39:18.000000000","message":"I hit a strange issue in swift 2.21.0.7 (older symlink middleware), The PUT always fail if we don\u0027t include the header `content-length: 0` for the PUT request. But if I use the same command in swift 2.23.0.1 that works fine. \n\n$ curl -i http://192.168.190.60/v1/AUTH_demo/test/link1 -X PUT -H \"X-Symlink-Target: test/shell.py\" -H \"X-Auth-Token: AUTH_tk837a74e736c34868a93f8c9be3ea43fc\"\nHTTP/1.1 400 Bad Request\nContent-Length: 41\nContent-Type: text/plain\nX-Trans-Id: tx44cd700144824a4280f12-005df1f5d7\nX-Openstack-Request-Id: tx44cd700144824a4280f12-005df1f5d7\nDate: Thu, 12 Dec 2019 08:09:59 GMT\n\nSymlink requests require a zero byte body%\n\n$ curl -i http://192.168.190.60/v1/AUTH_demo/test/link1 -X PUT -H \"X-Symlink-Target: test/shell.py\" -H \"X-Auth-Token: AUTH_tk837a74e736c34868a93f8c9be3ea43fc\" -H \"Content-Length: 0\"\nHTTP/1.1 201 Created\nLast-Modified: Thu, 12 Dec 2019 08:10:47 GMT\nContent-Length: 0\nEtag: d41d8cd98f00b204e9800998ecf8427e\nContent-Type: text/html; charset\u003dUTF-8\nX-Trans-Id: txf2c8d4a778604893a5e3d-005df1f606","commit_id":"b577212ec0675c2cc003ddde8819002d01eeb182"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"a358d9aef690fe4d97b6307d450b026c34e82a47","unresolved":false,"context_lines":[{"line_number":1026,"context_line":"            options[\u0027header\u0027].append(\u0027content-type: application/symlink\u0027)"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"        target_link \u003d \u0027/\u0027.join([target_container, target_object])"},{"line_number":1029,"context_line":"        options[\u0027header\u0027].append(\u0027X-Symlink-Target: %s\u0027 % target_link)"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"    with SwiftService(options\u003doptions) as swift:"},{"line_number":1032,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_f0f91ec5","line":1029,"in_reply_to":"3fa7e38b_306b3687","updated":"2019-12-16 16:12:32.000000000","message":"Nice! I don\u0027t need to worry about this. Thanks!","commit_id":"b577212ec0675c2cc003ddde8819002d01eeb182"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b1828960848ad003130fe3ecbd447238eb368d0","unresolved":false,"context_lines":[{"line_number":1026,"context_line":"            options[\u0027header\u0027].append(\u0027content-type: application/symlink\u0027)"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"        target_link \u003d \u0027/\u0027.join([target_container, target_object])"},{"line_number":1029,"context_line":"        options[\u0027header\u0027].append(\u0027X-Symlink-Target: %s\u0027 % target_link)"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"    with SwiftService(options\u003doptions) as swift:"},{"line_number":1032,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_306b3687","line":1029,"in_reply_to":"3fa7e38b_a5784af7","updated":"2019-12-16 16:10:22.000000000","message":"Sounds like what was fixed in https://github.com/openstack/swift/commit/a1455b3","commit_id":"b577212ec0675c2cc003ddde8819002d01eeb182"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"a27ddd94da0339a451ef452b199fa0439d5bdc85","unresolved":false,"context_lines":[{"line_number":946,"context_line":"st_link_options \u003d \u0027\u0027\u0027[--target-account \u003ctarget-account\u003e]"},{"line_number":947,"context_line":"                  [--target-etag \u003cetag\u003e] [--header \u003cheader\u003e]"},{"line_number":948,"context_line":"                  \u003ctarget-container\u003e \u003ctarget-object\u003e"},{"line_number":949,"context_line":"                  \u003csymlink-container\u003e \u003csymlink-object\u003e"},{"line_number":950,"context_line":"\u0027\u0027\u0027"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"st_link_help \u003d \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_325f334e","line":949,"updated":"2020-01-22 16:27:55.000000000","message":"No, wait. I think all Thiago wanted was \u003ccontainer\u003e \u003ctarget-object\u003e \u003csymlink-object\u003e. There\u0027s no need to type redundant container all the time. It was good before that way.","commit_id":"da920180ffa07bf652591ae0eee14464648f039e"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"19b0ab1b10deb9b3c50b8a0be2ba0819e86a4ec3","unresolved":false,"context_lines":[{"line_number":946,"context_line":"st_link_options \u003d \u0027\u0027\u0027[--target-account \u003ctarget-account\u003e]"},{"line_number":947,"context_line":"                  [--target-etag \u003cetag\u003e] [--header \u003cheader\u003e]"},{"line_number":948,"context_line":"                  \u003ctarget-container\u003e \u003ctarget-object\u003e"},{"line_number":949,"context_line":"                  \u003csymlink-container\u003e \u003csymlink-object\u003e"},{"line_number":950,"context_line":"\u0027\u0027\u0027"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"st_link_help \u003d \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_58c8d1a5","line":949,"in_reply_to":"3fa7e38b_325f334e","updated":"2020-01-22 16:44:04.000000000","message":"I was struggling for this, I feel the most case we\u0027ll create a symlin-object in a different container not in the same container that \u003ctarget-object\u003e located.","commit_id":"da920180ffa07bf652591ae0eee14464648f039e"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"bc7cdeeca5fc91870f1f04415561f984916d566c","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"                        ONLY suport in Swift 2.23.0+."},{"line_number":1013,"context_line":"  -H, --header \u003cheader:value\u003e"},{"line_number":1014,"context_line":"                        Adds a customized request header. This option may be"},{"line_number":1015,"context_line":"                        repeated. Example: -H \"content-type:text/plain\""},{"line_number":1016,"context_line":"                         -H \"Content-Length: 4000\"."},{"line_number":1017,"context_line":"\u0027\u0027\u0027.strip(\u0027\\n\u0027)"},{"line_number":1018,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_44ce392d","line":1015,"range":{"start_line":1015,"start_character":60,"end_line":1015,"end_character":70},"updated":"2020-06-01 23:49:29.000000000","message":"more of a nit, but can we change this to application/symlink since it\u0027s what\u0027s indirectly suggested in the middleware docs.","commit_id":"517b746893f1b2bd70da43ea139e1ed14ee03c4c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"bc7cdeeca5fc91870f1f04415561f984916d566c","unresolved":false,"context_lines":[{"line_number":1013,"context_line":"  -H, --header \u003cheader:value\u003e"},{"line_number":1014,"context_line":"                        Adds a customized request header. This option may be"},{"line_number":1015,"context_line":"                        repeated. Example: -H \"content-type:text/plain\""},{"line_number":1016,"context_line":"                         -H \"Content-Length: 4000\"."},{"line_number":1017,"context_line":"\u0027\u0027\u0027.strip(\u0027\\n\u0027)"},{"line_number":1018,"context_line":""},{"line_number":1019,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_c4e1a99d","line":1016,"range":{"start_line":1016,"start_character":25,"end_line":1016,"end_character":50},"updated":"2020-06-01 23:49:29.000000000","message":"and I\u0027d remove this option since it doesn\u0027t make sense for symlinks.","commit_id":"517b746893f1b2bd70da43ea139e1ed14ee03c4c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"bc7cdeeca5fc91870f1f04415561f984916d566c","unresolved":false,"context_lines":[{"line_number":1025,"context_line":"    parser.add_argument("},{"line_number":1026,"context_line":"        \u0027--target-etag\u0027, help\u003d\u0027The etag to compare\u0027)"},{"line_number":1027,"context_line":"    parser.add_argument("},{"line_number":1028,"context_line":"        \u0027-H\u0027, \u0027--header\u0027, action\u003d\u0027append\u0027, dest\u003d\u0027header\u0027,"},{"line_number":1029,"context_line":"        default\u003d[], help\u003d\u0027Adds a customized request header. \u0027"},{"line_number":1030,"context_line":"        \u0027This option may be repeated. \u0027"},{"line_number":1031,"context_line":"        \u0027Example: -H \"content-type:text/plain\" \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_24ece58d","line":1028,"range":{"start_line":1028,"start_character":8,"end_line":1028,"end_character":12},"updated":"2020-06-01 23:49:29.000000000","message":"do we want to support -m? not a big deal, can be added alter...w/e...","commit_id":"517b746893f1b2bd70da43ea139e1ed14ee03c4c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"bc7cdeeca5fc91870f1f04415561f984916d566c","unresolved":false,"context_lines":[{"line_number":1028,"context_line":"        \u0027-H\u0027, \u0027--header\u0027, action\u003d\u0027append\u0027, dest\u003d\u0027header\u0027,"},{"line_number":1029,"context_line":"        default\u003d[], help\u003d\u0027Adds a customized request header. \u0027"},{"line_number":1030,"context_line":"        \u0027This option may be repeated. \u0027"},{"line_number":1031,"context_line":"        \u0027Example: -H \"content-type:text/plain\" \u0027"},{"line_number":1032,"context_line":"        \u0027-H \"Content-Length: 4000\"\u0027)"},{"line_number":1033,"context_line":""},{"line_number":1034,"context_line":"    options, args \u003d parse_args(parser, args)"},{"line_number":1035,"context_line":"    args \u003d args[1:]"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_a4de35d7","line":1032,"range":{"start_line":1031,"start_character":8,"end_line":1032,"end_character":36},"updated":"2020-06-01 23:49:29.000000000","message":"same here","commit_id":"517b746893f1b2bd70da43ea139e1ed14ee03c4c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"bc7cdeeca5fc91870f1f04415561f984916d566c","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"            options[\u0027header\u0027].append(\u0027X-Symlink-Target-Etag: %s\u0027 %"},{"line_number":1054,"context_line":"                                     options[\u0027target_etag\u0027])"},{"line_number":1055,"context_line":"        else:"},{"line_number":1056,"context_line":"            options[\u0027header\u0027].append(\u0027content-type: application/symlink\u0027)"},{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"        target_link \u003d \u0027/\u0027.join([target_container, target_object])"},{"line_number":1059,"context_line":"        options[\u0027header\u0027].append(\u0027X-Symlink-Target: %s\u0027 % target_link)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_291f9d6c","line":1056,"range":{"start_line":1056,"start_character":38,"end_line":1056,"end_character":72},"updated":"2020-06-01 23:49:29.000000000","message":"need to investigate this more, but in my test this header is not being set...","commit_id":"517b746893f1b2bd70da43ea139e1ed14ee03c4c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"bc7cdeeca5fc91870f1f04415561f984916d566c","unresolved":false,"context_lines":[{"line_number":2076,"context_line":"                         for a container."},{"line_number":2077,"context_line":"    post                 Updates meta information for the account, container,"},{"line_number":2078,"context_line":"                         or object; creates containers if not present."},{"line_number":2079,"context_line":"    link                 Create a symlink for target object"},{"line_number":2080,"context_line":"    copy                 Copies object, optionally adds meta"},{"line_number":2081,"context_line":"    stat                 Displays information for the account, container,"},{"line_number":2082,"context_line":"                         or object."}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_a4f75559","line":2079,"range":{"start_line":2079,"start_character":42,"end_line":2079,"end_character":45},"updated":"2020-06-01 23:49:29.000000000","message":"s/for/to a","commit_id":"517b746893f1b2bd70da43ea139e1ed14ee03c4c"}],"test/unit/test_shell.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a36e4842f0b15f3234e13b3bb1bedd95d2754f46","unresolved":false,"context_lines":[{"line_number":1794,"context_line":"        self.assertEqual("},{"line_number":1795,"context_line":"            output.out,"},{"line_number":1796,"context_line":"            \u0027Created a symlink container/object to c/o\\n\u0027"},{"line_number":1797,"context_line":"        )"},{"line_number":1798,"context_line":""},{"line_number":1799,"context_line":"    @mock.patch(\u0027swiftclient.shell.generate_temp_url\u0027, return_value\u003d\u0027\u0027)"},{"line_number":1800,"context_line":"    def test_temp_url(self, temp_url):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_cd210100","line":1797,"updated":"2019-12-14 00:22:32.000000000","message":"It\u0027d be nice to have some tests with --target-account and --target-etag","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"e89ccd9da635b51d3c185c3e522de1025d5187a0","unresolved":false,"context_lines":[{"line_number":1794,"context_line":"        self.assertEqual("},{"line_number":1795,"context_line":"            output.out,"},{"line_number":1796,"context_line":"            \u0027Created a symlink container/object to c/o\\n\u0027"},{"line_number":1797,"context_line":"        )"},{"line_number":1798,"context_line":""},{"line_number":1799,"context_line":"    @mock.patch(\u0027swiftclient.shell.generate_temp_url\u0027, return_value\u003d\u0027\u0027)"},{"line_number":1800,"context_line":"    def test_temp_url(self, temp_url):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_046e0bfe","line":1797,"in_reply_to":"3fa7e38b_cd210100","updated":"2019-12-16 04:42:49.000000000","message":"will do","commit_id":"5aa765cc04215af04d473318bb562fa763ff2cd6"}]}
