)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"124f1c05d26dd480b03c9b4c5fd6c1c1e66ea19b","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Create migration tools for setting up the environment"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Set up the environment by innstalling system"},{"line_number":10,"context_line":"and python depndencies."},{"line_number":11,"context_line":"Configure the workspace folder as the working"},{"line_number":12,"context_line":"directories."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"4b12f3ba_b4a7b8b0","line":9,"range":{"start_line":9,"start_character":26,"end_line":9,"end_character":38},"updated":"2025-10-11 18:58:10.000000000","message":"Typo: installing\n\nBut what is an \"installation system\"? Test system?","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"b3cbec5bf49e55bb15d4d57d537e9b721fe72a4b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Create migration tools for setting up the environment"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Set up the environment by innstalling system"},{"line_number":10,"context_line":"and python depndencies."},{"line_number":11,"context_line":"Configure the workspace folder as the working"},{"line_number":12,"context_line":"directories."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"f1aa35ed_e8701cf2","line":9,"range":{"start_line":9,"start_character":26,"end_line":9,"end_character":38},"in_reply_to":"4b12f3ba_b4a7b8b0","updated":"2025-10-12 02:43:56.000000000","message":"It means system libraries such as jq and bindep. \nI\u0027ll revise the comments for better clarity.","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"0b1aeb95295402c3855adfe79fe3d41e7b6d924e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Create migration tools for setting up the environment"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Set up the environment by innstalling system"},{"line_number":10,"context_line":"and python depndencies."},{"line_number":11,"context_line":"Configure the workspace folder as the working"},{"line_number":12,"context_line":"directories."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"43cefba8_ab5168b2","line":9,"range":{"start_line":9,"start_character":26,"end_line":9,"end_character":38},"in_reply_to":"f1aa35ed_e8701cf2","updated":"2025-10-12 16:19:55.000000000","message":"Thank you - ACK.","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"124f1c05d26dd480b03c9b4c5fd6c1c1e66ea19b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"646edd74_e5b71197","updated":"2025-10-11 18:58:10.000000000","message":"Thank you for the patch. Let me add some comments.\n\nAlso one security issue should be fixed immediately.","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"b3cbec5bf49e55bb15d4d57d537e9b721fe72a4b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d4d73a2d_e4b850ab","updated":"2025-10-12 02:43:56.000000000","message":"Change the commit comments for clarity.\nApply the review comments.","commit_id":"5a606c790fbd1f92fa3f3d2b7230c37f889ec290"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"0b1aeb95295402c3855adfe79fe3d41e7b6d924e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3dc205ce_81bc334b","updated":"2025-10-12 16:19:55.000000000","message":"Thank you for addressing my comments. Adding more comments based on the latest patch.","commit_id":"5a606c790fbd1f92fa3f3d2b7230c37f889ec290"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"b6db3329d00d21a8f90ffbd378f18e5202203513","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"89948910_5f45cfb0","updated":"2025-10-13 15:14:23.000000000","message":"Thank you. Now the code seems fine. But.. how to execute the script?\nTo test with it, should I execute all the three scripts? What are orders?\n\nI think describing such details into README.rst on tools/migration folder would be a good idea.","commit_id":"f6d9e7b582bd553b7854937aa8eca0955270ecb2"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"58c8cd6b778a920487c5933e3115d6372201a1f0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d42c6c5e_56057f4c","updated":"2025-10-14 15:23:53.000000000","message":"@S0okJu: For *.rst on OpenStack, you need to follow this convention. https://docs.openstack.org/doc-contrib-guide/rst-conv/titles.html\n\nOnce you follow it and reply, I will review your patch. Thanks.","commit_id":"7f6694e95388868b048b6bf3d78f4f7231fb52c9"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"9928dd5ddcb09efdf7b9b9dbfeaf463a08adadb7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"6fd9dbee_2e6f54a4","updated":"2025-10-17 15:33:40.000000000","message":"I will more review.","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"7f7e6dc7b7f8768f1a8e9cb754c05e26a1ed8f0b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"d39462f8_2d264b21","updated":"2025-10-17 15:27:51.000000000","message":"Q: I mentioned separately that moving the folder into like tools/migration/setupenv will be a great idea. Please reply from this.","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"bc61031bf940f3ad57797e60fd1b9330f216ff43","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"f251e917_16a2ce9e","updated":"2025-10-22 11:12:58.000000000","message":"In my opinion, the purpose of this patch is to set up the environment.\nTherefore, it would be better if this patch only included a common library, without the migration.sh file.\n\nAlso, the library file should not be executable — please remove the executable flag.\n\nThe execution instructions should also be removed from the README.rst for now.\nIt seems possible to combine the library files into a single file as well.","commit_id":"e989822556e966693e4931bcf7b7c27127d20af2"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"0ef516c253a01f2915caa3533a0d5cb84c508540","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"e037c736_aa794fcb","in_reply_to":"e9df7068_e494f358","updated":"2025-10-23 11:14:08.000000000","message":"I fully agree with your opinion. I did not intend to present a different viewpoint.\nTo clarify, my comments are specifically about the shell script files themselves:\n\n1. Since the purpose of this patch is to set up the environment, I think the migration.sh file, which executes the migration job, should be excluded from this patch.\n2. Since this is an environment setup file and not meant to be executed, I believe the executable flag can be removed.\n3. I suggest combining pretty-printer.sh and prepare-workspace.sh into a single file to be used like a common library.","commit_id":"e989822556e966693e4931bcf7b7c27127d20af2"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"d3d11a5e81028aebb167b7ee357651e133b95e4b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"e9df7068_e494f358","in_reply_to":"f251e917_16a2ce9e","updated":"2025-10-22 18:37:11.000000000","message":"@seongsoocho I clearly see that your opinion and my opinion are very different. I have been suggesting like \"separately that moving the folder into like tools/migration/setupenv will be a great idea\". Are you acknowledging my comment? Since our review directions are different, it seems that the contributor is losing what to do next.\n\nWithout our agreement, the patch cannot move forward. Each patch requires two +2 core reviewers\u0027 agreement so please do step up in more comprehensive manner - your goal and patch direction setting for overall Weblate migration would be a great step I think, rather than providing rather scattered comments. Also, I am very worried that your overall reviews are delayed too much. How much time can you allocate to review the patches? Please do understand my concern. Thanks.","commit_id":"e989822556e966693e4931bcf7b7c27127d20af2"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"75be1e4c_c22ef799","updated":"2025-10-30 15:36:23.000000000","message":"1. Please address my comments.\n2. Any clue of the error from my execution on the script? Pasting the log: https://paste.openstack.org/show/bTUwb22GWPLVX1hSNCup/","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"b9e513436a876cb0e1764d27b3e5cfa41e91e87f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"eb977605_16122487","updated":"2025-10-31 15:02:34.000000000","message":"Can you also comment on my previous question?\n\n- Any clue of the error from my execution on the script? Pasting the log: https://paste.openstack.org/show/bTUwb22GWPLVX1hSNCup/","commit_id":"00c9e1f2ff5b1932e4aea1ed20b6a3e65af6ed8a"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"1d3462e849faf8a7e71fd0b365393f31ece29ce3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"5cbdb9da_46bb0011","updated":"2025-11-01 04:46:18.000000000","message":"One more comment: `tox -evenv -- doc8 tools/migration/README.rst` helps to write RST file following with OpenStack documentation convention. Sharing a log for visibility: https://paste.opendev.org/show/bOVKfDqzRcsb9m7Q1Ogy/","commit_id":"00c9e1f2ff5b1932e4aea1ed20b6a3e65af6ed8a"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"dc350703c08dfe0c7bcc19278174b9523391cc04","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"80a01e8a_db0ada41","in_reply_to":"5cbdb9da_46bb0011","updated":"2025-11-03 06:55:48.000000000","message":"I\u0027ll keep checking this going forward.\n\nThank you.","commit_id":"00c9e1f2ff5b1932e4aea1ed20b6a3e65af6ed8a"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"232def8ee0d4e9c0efe8f955afef1ecea8fe68ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"c5ded9df_b4a15fb2","in_reply_to":"68d2f2b0_5b9f3b69","updated":"2025-11-04 12:11:51.000000000","message":"Seems my execution results are wrong - it doesn\u0027t download from Zanata-cli, right?\n\n- https://paste.openstack.org/show/bsiaZsGNpAAmRmjCITqU/\n- https://paste.openstack.org/show/bKUK9IfEgOQBIGiZWNAE/","commit_id":"00c9e1f2ff5b1932e4aea1ed20b6a3e65af6ed8a"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"1125411c3e83a11a60ad34a3f01cbcf76308091d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"97ce8fd2_26a5c6f9","in_reply_to":"b1dd667d_ea0d3734","updated":"2025-11-05 14:18:38.000000000","message":"Thank you. I will give my opinions once @ppiyakk2@printf.kr reviews with his score \u0026 opinions.","commit_id":"00c9e1f2ff5b1932e4aea1ed20b6a3e65af6ed8a"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"c7652bcc6541b720d9baffa768bd7feeed117e73","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"b1dd667d_ea0d3734","in_reply_to":"c5ded9df_b4a15fb2","updated":"2025-11-04 12:56:30.000000000","message":"Yes, your result is correct and the pot files didn\u0027t be downloaded yet. \n\nI\u0027ll create a pot files from zanata-cli in the next step.\n\nI also add the \"zanata-cli exist\" message.","commit_id":"00c9e1f2ff5b1932e4aea1ed20b6a3e65af6ed8a"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"dc350703c08dfe0c7bcc19278174b9523391cc04","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"68d2f2b0_5b9f3b69","in_reply_to":"eb977605_16122487","updated":"2025-11-03 06:55:48.000000000","message":"I apologize for missing your request. \n\nI remove the requirements package and horizon requirements that were used when creating the pot file.\n\nThe first time I try to generate the pot file using gettext with correct branch, but I found that the results weren\u0027t accurate. So I decide to get pot files using zanata-cli not generating pot files with gettext. \n\nWhen any packages are needed in the next step, I\u0027ll add them step by step.\n\nI also add tox.ini to check the dependencies based on the python version.","commit_id":"00c9e1f2ff5b1932e4aea1ed20b6a3e65af6ed8a"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"756860a62c7fdfa9dd5c667ed64ff9b8f52f34f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"ba65fbf7_9eb2dde3","updated":"2025-11-25 15:22:58.000000000","message":"I believe the initial patch for developing the tool to migrate from Zanata to Weblate is now at a stage where it can be merged.","commit_id":"b305d3839c2de3bc2fa0ea271aab1bffdb659855"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"c9b0c2e128b78a70d96a887c466ed383185ffe5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"c6edfe61_1d8b6e87","updated":"2025-12-03 14:09:29.000000000","message":"Thank you all for the patch. Let\u0027s merge it, and more work to move forward on Weblate migration, together.","commit_id":"b305d3839c2de3bc2fa0ea271aab1bffdb659855"}],"tools/migration/README.rst":[{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"9928dd5ddcb09efdf7b9b9dbfeaf463a08adadb7","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Background"},{"line_number":8,"context_line":"----------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Zanata was officially discontinued in late 2018, with all servers now offline. "},{"line_number":11,"context_line":"To ensure continued translation management and improve our internationalization "},{"line_number":12,"context_line":"workflow, we are migrating to Weblate."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"964510bb_d169a8a2","line":10,"range":{"start_line":10,"start_character":78,"end_line":10,"end_character":79},"updated":"2025-10-17 15:33:40.000000000","message":"Nit: \u0027 \u0027","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"9928dd5ddcb09efdf7b9b9dbfeaf463a08adadb7","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Background"},{"line_number":8,"context_line":"----------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Zanata was officially discontinued in late 2018, with all servers now offline. "},{"line_number":11,"context_line":"To ensure continued translation management and improve our internationalization "},{"line_number":12,"context_line":"workflow, we are migrating to Weblate."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"c5a618ad_3c88ece7","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":77},"updated":"2025-10-17 15:33:40.000000000","message":"This is not true. Proposed statement:\n\n```\n\nOpenStack I18n team has been using `Zanata \u003chttps://github.com/zanata/zanata-platform\u003e`__ as translation platform, which development and release is discountinued from August 2018.\n\n\n```","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"d7166615d68221ed4494ffd13c8b8a82aa3a5fb9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Background"},{"line_number":8,"context_line":"----------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Zanata was officially discontinued in late 2018, with all servers now offline. "},{"line_number":11,"context_line":"To ensure continued translation management and improve our internationalization "},{"line_number":12,"context_line":"workflow, we are migrating to Weblate."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"66b332bd_68c9feef","line":10,"range":{"start_line":10,"start_character":78,"end_line":10,"end_character":79},"in_reply_to":"964510bb_d169a8a2","updated":"2025-10-20 02:32:04.000000000","message":"I remove it.","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"d7166615d68221ed4494ffd13c8b8a82aa3a5fb9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Background"},{"line_number":8,"context_line":"----------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Zanata was officially discontinued in late 2018, with all servers now offline. "},{"line_number":11,"context_line":"To ensure continued translation management and improve our internationalization "},{"line_number":12,"context_line":"workflow, we are migrating to Weblate."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"148975d0_8659386d","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":77},"in_reply_to":"c5a618ad_3c88ece7","updated":"2025-10-20 02:32:04.000000000","message":"I change the purpose of migration.\n\nThank you.","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"9928dd5ddcb09efdf7b9b9dbfeaf463a08adadb7","unresolved":true,"context_lines":[{"line_number":8,"context_line":"----------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Zanata was officially discontinued in late 2018, with all servers now offline. "},{"line_number":11,"context_line":"To ensure continued translation management and improve our internationalization "},{"line_number":12,"context_line":"workflow, we are migrating to Weblate."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Objectives"}],"source_content_type":"text/x-rst","patch_set":9,"id":"468c84ef_0b1427da","line":11,"range":{"start_line":11,"start_character":79,"end_line":11,"end_character":80},"updated":"2025-10-17 15:33:40.000000000","message":"Nit: \u0027 \u0027","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"9928dd5ddcb09efdf7b9b9dbfeaf463a08adadb7","unresolved":true,"context_lines":[{"line_number":8,"context_line":"----------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Zanata was officially discontinued in late 2018, with all servers now offline. "},{"line_number":11,"context_line":"To ensure continued translation management and improve our internationalization "},{"line_number":12,"context_line":"workflow, we are migrating to Weblate."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Objectives"}],"source_content_type":"text/x-rst","patch_set":9,"id":"c4f694a9_8bcdbcb2","line":11,"range":{"start_line":11,"start_character":55,"end_line":11,"end_character":58},"updated":"2025-10-17 15:33:40.000000000","message":"out -\u003e OpenStack","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"d7166615d68221ed4494ffd13c8b8a82aa3a5fb9","unresolved":false,"context_lines":[{"line_number":8,"context_line":"----------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Zanata was officially discontinued in late 2018, with all servers now offline. "},{"line_number":11,"context_line":"To ensure continued translation management and improve our internationalization "},{"line_number":12,"context_line":"workflow, we are migrating to Weblate."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Objectives"}],"source_content_type":"text/x-rst","patch_set":9,"id":"07662506_a1da662c","line":11,"range":{"start_line":11,"start_character":79,"end_line":11,"end_character":80},"in_reply_to":"468c84ef_0b1427da","updated":"2025-10-20 02:32:04.000000000","message":"I remove it.","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"d7166615d68221ed4494ffd13c8b8a82aa3a5fb9","unresolved":false,"context_lines":[{"line_number":8,"context_line":"----------"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Zanata was officially discontinued in late 2018, with all servers now offline. "},{"line_number":11,"context_line":"To ensure continued translation management and improve our internationalization "},{"line_number":12,"context_line":"workflow, we are migrating to Weblate."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Objectives"}],"source_content_type":"text/x-rst","patch_set":9,"id":"26a593b0_2ca7877a","line":11,"range":{"start_line":11,"start_character":55,"end_line":11,"end_character":58},"in_reply_to":"c4f694a9_8bcdbcb2","updated":"2025-10-20 02:32:04.000000000","message":"I change it.\n\nThank you.","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"9928dd5ddcb09efdf7b9b9dbfeaf463a08adadb7","unresolved":true,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Zanata was officially discontinued in late 2018, with all servers now offline. "},{"line_number":11,"context_line":"To ensure continued translation management and improve our internationalization "},{"line_number":12,"context_line":"workflow, we are migrating to Weblate."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Objectives"},{"line_number":15,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"2c35a748_c6fc7791","line":12,"range":{"start_line":12,"start_character":10,"end_line":12,"end_character":37},"updated":"2025-10-17 15:33:40.000000000","message":"OpenStack I18n SIG","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"d7166615d68221ed4494ffd13c8b8a82aa3a5fb9","unresolved":true,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Zanata was officially discontinued in late 2018, with all servers now offline. "},{"line_number":11,"context_line":"To ensure continued translation management and improve our internationalization "},{"line_number":12,"context_line":"workflow, we are migrating to Weblate."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Objectives"},{"line_number":15,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"eb364ca3_7d35ae69","line":12,"range":{"start_line":12,"start_character":10,"end_line":12,"end_character":37},"in_reply_to":"2c35a748_c6fc7791","updated":"2025-10-20 02:32:04.000000000","message":"I understand your comments that changes the subject \"we\" -\u003e \"OpenStack l18n SIG\".","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"7723a792d2a12be5dae8e0faa8915a06019be602","unresolved":false,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Zanata was officially discontinued in late 2018, with all servers now offline. "},{"line_number":11,"context_line":"To ensure continued translation management and improve our internationalization "},{"line_number":12,"context_line":"workflow, we are migrating to Weblate."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Objectives"},{"line_number":15,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"a8b3a1ff_592dc80c","line":12,"range":{"start_line":12,"start_character":10,"end_line":12,"end_character":37},"in_reply_to":"eb364ca3_7d35ae69","updated":"2025-10-28 16:14:06.000000000","message":"Done","commit_id":"1caebc1681f346974aa26a73fcd8c7d8861d4366"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":2,"context_line":"Migration Tools from Zanata to Weblate"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"This project provides tools to migrate translation projects from Zanata to Weblate."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Background"},{"line_number":8,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"d1b0fdfc_ef26c1cf","line":5,"range":{"start_line":5,"start_character":5,"end_line":5,"end_character":13},"updated":"2025-10-30 15:36:23.000000000","message":"project -\u003e folder","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Migration Tools from Zanata to Weblate"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"This project provides tools to migrate translation projects from Zanata to Weblate."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Background"},{"line_number":8,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3ca5c71f_9548bfff","line":5,"range":{"start_line":5,"start_character":5,"end_line":5,"end_character":13},"in_reply_to":"d1b0fdfc_ef26c1cf","updated":"2025-10-31 08:16:01.000000000","message":"I changed it\n\nThank you for your review.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"This project provides tools to migrate translation projects from Zanata to Weblate."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Background"},{"line_number":8,"context_line":"----------"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"ef2d9a57_b12d197e","line":6,"updated":"2025-10-30 15:36:23.000000000","message":"Let\u0027s add:\n\n```\n.. note:\n\n  The tool currently works with horizon and plugin projects.\n\n```","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"This project provides tools to migrate translation projects from Zanata to Weblate."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Background"},{"line_number":8,"context_line":"----------"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1c9eb6f8_6a0703a5","line":6,"in_reply_to":"ef2d9a57_b12d197e","updated":"2025-10-31 08:16:01.000000000","message":"I add it.\n\nThank you for your review.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":39,"context_line":"Arguments:"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* project_name: The name of the OpenStack project to migrate."},{"line_number":42,"context_line":"* version: The version of the project. The default is \"master\". e.g. 2025.01"},{"line_number":43,"context_line":"* workspace_name: The folder name for the migration workspace."},{"line_number":44,"context_line":"It will be installed in the home directory. The default is \"workspace\"."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"6da2034b_ff15f849","line":42,"range":{"start_line":42,"start_character":69,"end_line":42,"end_character":76},"updated":"2025-10-30 15:36:23.000000000","message":"Also, it seems that stable versions are not migrated yet - right?","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":39,"context_line":"Arguments:"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* project_name: The name of the OpenStack project to migrate."},{"line_number":42,"context_line":"* version: The version of the project. The default is \"master\". e.g. 2025.01"},{"line_number":43,"context_line":"* workspace_name: The folder name for the migration workspace."},{"line_number":44,"context_line":"It will be installed in the home directory. The default is \"workspace\"."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9690f1b3_342298a6","line":42,"range":{"start_line":42,"start_character":69,"end_line":42,"end_character":76},"updated":"2025-10-30 15:36:23.000000000","message":"Are you really sure with value \"2025.01\"? In Zanata, stable version names are like \"stable-2025.1\" and \"stable-zed\".","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Arguments:"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* project_name: The name of the OpenStack project to migrate."},{"line_number":42,"context_line":"* version: The version of the project. The default is \"master\". e.g. 2025.01"},{"line_number":43,"context_line":"* workspace_name: The folder name for the migration workspace."},{"line_number":44,"context_line":"It will be installed in the home directory. The default is \"workspace\"."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"c5c7dcb9_a9041fa8","line":42,"range":{"start_line":42,"start_character":69,"end_line":42,"end_character":76},"in_reply_to":"6da2034b_ff15f849","updated":"2025-10-31 08:16:01.000000000","message":"I\u0027m not sure I fully understand your question.\n \nCould you clarify whether you\u0027re asking about:\n1. The stable/2025.1 is excluded from the migration scope. \n2. The stable/2025.1 hasn\u0027t been migrated to Weblate yet.\n\nIf it\u0027s something else, please let me know.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Arguments:"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"* project_name: The name of the OpenStack project to migrate."},{"line_number":42,"context_line":"* version: The version of the project. The default is \"master\". e.g. 2025.01"},{"line_number":43,"context_line":"* workspace_name: The folder name for the migration workspace."},{"line_number":44,"context_line":"It will be installed in the home directory. The default is \"workspace\"."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"89d5d2c4_697f683f","line":42,"range":{"start_line":42,"start_character":69,"end_line":42,"end_character":76},"in_reply_to":"9690f1b3_342298a6","updated":"2025-10-31 08:16:01.000000000","message":"I did not consider the real-world example. I\u0027ll be more careful going forward. \n\nI change it.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":43,"context_line":"* workspace_name: The folder name for the migration workspace."},{"line_number":44,"context_line":"It will be installed in the home directory. The default is \"workspace\"."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"File Structure"},{"line_number":47,"context_line":"--------------"},{"line_number":48,"context_line":".. code-block:: text"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"be80eb4b_b4ea222e","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":5},"updated":"2025-10-30 15:36:23.000000000","message":"-\u003e Folder and File Structure","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"* workspace_name: The folder name for the migration workspace."},{"line_number":44,"context_line":"It will be installed in the home directory. The default is \"workspace\"."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"File Structure"},{"line_number":47,"context_line":"--------------"},{"line_number":48,"context_line":".. code-block:: text"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"95e52908_6dd83e6f","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":5},"in_reply_to":"be80eb4b_b4ea222e","updated":"2025-10-31 08:16:01.000000000","message":"I change it.\n\nThank you for your review.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":48,"context_line":".. code-block:: text"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"  ├── setup_env/"},{"line_number":51,"context_line":"  └── migration.sh"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* setup_env/: Scripts to create a virtual environment and install dependencies. "},{"line_number":54,"context_line":"These scripts also create a workspace folder for migration tasks."}],"source_content_type":"text/x-rst","patch_set":12,"id":"703ff2fd_9fe5cf32","line":51,"range":{"start_line":51,"start_character":6,"end_line":51,"end_character":18},"updated":"2025-10-30 15:36:23.000000000","message":"-\u003e migrate_resources.sh","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":48,"context_line":".. code-block:: text"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"  ├── setup_env/"},{"line_number":51,"context_line":"  └── migration.sh"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* setup_env/: Scripts to create a virtual environment and install dependencies. "},{"line_number":54,"context_line":"These scripts also create a workspace folder for migration tasks."}],"source_content_type":"text/x-rst","patch_set":12,"id":"16d989d2_340dda89","line":51,"range":{"start_line":51,"start_character":6,"end_line":51,"end_character":18},"in_reply_to":"703ff2fd_9fe5cf32","updated":"2025-10-31 08:16:01.000000000","message":"I change it.\n\nThank you for your review.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":50,"context_line":"  ├── setup_env/"},{"line_number":51,"context_line":"  └── migration.sh"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* setup_env/: Scripts to create a virtual environment and install dependencies. "},{"line_number":54,"context_line":"These scripts also create a workspace folder for migration tasks."},{"line_number":55,"context_line":"* migration.sh: Main script for migration tasks."},{"line_number":56,"context_line":"They include various modules to perform migration tasks."}],"source_content_type":"text/x-rst","patch_set":12,"id":"6fbcd4fa_44bb93b9","line":53,"range":{"start_line":53,"start_character":79,"end_line":53,"end_character":80},"updated":"2025-10-30 15:36:23.000000000","message":"nit: whitespace","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"  ├── setup_env/"},{"line_number":51,"context_line":"  └── migration.sh"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* setup_env/: Scripts to create a virtual environment and install dependencies. "},{"line_number":54,"context_line":"These scripts also create a workspace folder for migration tasks."},{"line_number":55,"context_line":"* migration.sh: Main script for migration tasks."},{"line_number":56,"context_line":"They include various modules to perform migration tasks."}],"source_content_type":"text/x-rst","patch_set":12,"id":"2b444617_fe9e4b65","line":53,"range":{"start_line":53,"start_character":79,"end_line":53,"end_character":80},"in_reply_to":"6fbcd4fa_44bb93b9","updated":"2025-10-31 08:16:01.000000000","message":"Done","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* setup_env/: Scripts to create a virtual environment and install dependencies. "},{"line_number":54,"context_line":"These scripts also create a workspace folder for migration tasks."},{"line_number":55,"context_line":"* migration.sh: Main script for migration tasks."},{"line_number":56,"context_line":"They include various modules to perform migration tasks."},{"line_number":57,"context_line":"Additional modules will be added as the tool evolves."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"b4da58ec_725051b9","line":55,"range":{"start_line":55,"start_character":2,"end_line":55,"end_character":14},"updated":"2025-10-30 15:36:23.000000000","message":"-\u003e migrate_resources.sh: Main script to migrate translation resources.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* setup_env/: Scripts to create a virtual environment and install dependencies. "},{"line_number":54,"context_line":"These scripts also create a workspace folder for migration tasks."},{"line_number":55,"context_line":"* migration.sh: Main script for migration tasks."},{"line_number":56,"context_line":"They include various modules to perform migration tasks."},{"line_number":57,"context_line":"Additional modules will be added as the tool evolves."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"94ceecd4_6f3cc710","line":55,"range":{"start_line":55,"start_character":2,"end_line":55,"end_character":14},"in_reply_to":"b4da58ec_725051b9","updated":"2025-10-31 08:16:01.000000000","message":"Done","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":53,"context_line":"* setup_env/: Scripts to create a virtual environment and install dependencies. "},{"line_number":54,"context_line":"These scripts also create a workspace folder for migration tasks."},{"line_number":55,"context_line":"* migration.sh: Main script for migration tasks."},{"line_number":56,"context_line":"They include various modules to perform migration tasks."},{"line_number":57,"context_line":"Additional modules will be added as the tool evolves."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Workspace Structure"}],"source_content_type":"text/x-rst","patch_set":12,"id":"6d867d1e_9aa725a7","line":56,"range":{"start_line":56,"start_character":40,"end_line":56,"end_character":55},"updated":"2025-10-30 15:36:23.000000000","message":"migration tasks -\u003e actual tasks for resource migration step by step","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":53,"context_line":"* setup_env/: Scripts to create a virtual environment and install dependencies. "},{"line_number":54,"context_line":"These scripts also create a workspace folder for migration tasks."},{"line_number":55,"context_line":"* migration.sh: Main script for migration tasks."},{"line_number":56,"context_line":"They include various modules to perform migration tasks."},{"line_number":57,"context_line":"Additional modules will be added as the tool evolves."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Workspace Structure"}],"source_content_type":"text/x-rst","patch_set":12,"id":"91d7e4c7_1101cf1e","line":56,"range":{"start_line":56,"start_character":40,"end_line":56,"end_character":55},"in_reply_to":"6d867d1e_9aa725a7","updated":"2025-10-31 08:16:01.000000000","message":"Done","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":54,"context_line":"These scripts also create a workspace folder for migration tasks."},{"line_number":55,"context_line":"* migration.sh: Main script for migration tasks."},{"line_number":56,"context_line":"They include various modules to perform migration tasks."},{"line_number":57,"context_line":"Additional modules will be added as the tool evolves."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Workspace Structure"},{"line_number":60,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"f40403f7_89afddca","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":53},"updated":"2025-10-30 15:36:23.000000000","message":"Please change as note like:\n\n```\n.. note::\n\n  The current tool mainly focuses on translation resource migration,\n  and actual resource migration process currently requires careful supervision to make sure that each migration step is performed well or not.\n```","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"These scripts also create a workspace folder for migration tasks."},{"line_number":55,"context_line":"* migration.sh: Main script for migration tasks."},{"line_number":56,"context_line":"They include various modules to perform migration tasks."},{"line_number":57,"context_line":"Additional modules will be added as the tool evolves."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Workspace Structure"},{"line_number":60,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1ff5c69a_b12a95a2","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":53},"in_reply_to":"f40403f7_89afddca","updated":"2025-10-31 08:16:01.000000000","message":"Done","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":60,"context_line":"-------------------"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"The migration workspace is installed in the home directory with the following structure:"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* .venv/: Python virtual environment containing migration dependencies"},{"line_number":65,"context_line":"* projects/: Migration workspace"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"51e0ac6a_7f7422f5","line":63,"updated":"2025-10-30 15:36:23.000000000","message":"-\u003e \"By default, the migration workspace is installed to your home directory with the following folder structure:\"\n\n2. Let\u0027s add note like:\n\n```\n.. note::\n\n  You can change the base directory by manually setting WORK_DIR on setup_env/setup.sh.\n\n```","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":60,"context_line":"-------------------"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"The migration workspace is installed in the home directory with the following structure:"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* .venv/: Python virtual environment containing migration dependencies"},{"line_number":65,"context_line":"* projects/: Migration workspace"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f9efa1d_cdc2e977","line":63,"in_reply_to":"51e0ac6a_7f7422f5","updated":"2025-10-31 08:16:01.000000000","message":"I change the comments about the workspace creation.\nI learn that we should leave notes about the custom settings.\n\nThank you for your review.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"}],"tools/migration/bindep.txt":[{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"0b1aeb95295402c3855adfe79fe3d41e7b6d924e","unresolved":true,"context_lines":[{"line_number":4,"context_line":"gettext"},{"line_number":5,"context_line":"jq"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"# PDF Docs package dependencies"},{"line_number":8,"context_line":"tex-gyre [platform:dpkg doc]"}],"source_content_type":"text/plain","patch_set":4,"id":"100ce54e_2f3e8bb7","line":8,"range":{"start_line":7,"start_character":0,"end_line":8,"end_character":28},"updated":"2025-10-12 16:19:55.000000000","message":"I think L7-8 is not needed for the target migration scripts.","commit_id":"ecf589ab50a735c4df46314f154a649abd2bf79a"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"cc52005c25c95225d27a545c4a7e482019082298","unresolved":false,"context_lines":[{"line_number":4,"context_line":"gettext"},{"line_number":5,"context_line":"jq"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"# PDF Docs package dependencies"},{"line_number":8,"context_line":"tex-gyre [platform:dpkg doc]"}],"source_content_type":"text/plain","patch_set":4,"id":"2208ada9_8871c367","line":8,"range":{"start_line":7,"start_character":0,"end_line":8,"end_character":28},"in_reply_to":"100ce54e_2f3e8bb7","updated":"2025-10-13 02:37:54.000000000","message":"I remove it.\n\nThanks for your comment.","commit_id":"ecf589ab50a735c4df46314f154a649abd2bf79a"}],"tools/migration/migration.sh":[{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"124f1c05d26dd480b03c9b4c5fd6c1c1e66ea19b","unresolved":true,"context_lines":[{"line_number":28,"context_line":"# TODO: Replace with actual values"},{"line_number":29,"context_line":"# WEBLATE_URL\u003d\u003cweblate_url\u003e"},{"line_number":30,"context_line":"# WEBLATE_TOKEN\u003d\u003cweblate_token\u003e"},{"line_number":31,"context_line":"WEBLATE_URL\u003d\"https://skj.printf.kr\""},{"line_number":32,"context_line":"WEBLATE_TOKEN\u003d\"wlu_q3bHMVRgYQ8axxDbe2R4rzezIxUZsVzEyqMF\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"SCRIPTSDIR\u003d\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" \u0026\u0026 pwd )\""},{"line_number":35,"context_line":"source $SCRIPTSDIR/prepare-workspace.sh"}],"source_content_type":"text/x-sh","patch_set":3,"id":"b26d0af4_711975e1","line":32,"range":{"start_line":31,"start_character":0,"end_line":32,"end_character":56},"updated":"2025-10-11 18:58:10.000000000","message":"Why do you upload the token IDs? @ppiyakk2@printf.kr You should invalidate the token value.","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"0b1aeb95295402c3855adfe79fe3d41e7b6d924e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"# TODO: Replace with actual values"},{"line_number":29,"context_line":"# WEBLATE_URL\u003d\u003cweblate_url\u003e"},{"line_number":30,"context_line":"# WEBLATE_TOKEN\u003d\u003cweblate_token\u003e"},{"line_number":31,"context_line":"WEBLATE_URL\u003d\"https://skj.printf.kr\""},{"line_number":32,"context_line":"WEBLATE_TOKEN\u003d\"wlu_q3bHMVRgYQ8axxDbe2R4rzezIxUZsVzEyqMF\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"SCRIPTSDIR\u003d\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" \u0026\u0026 pwd )\""},{"line_number":35,"context_line":"source $SCRIPTSDIR/prepare-workspace.sh"}],"source_content_type":"text/x-sh","patch_set":3,"id":"ec843bdc_53becd93","line":32,"range":{"start_line":31,"start_character":0,"end_line":32,"end_character":56},"in_reply_to":"61454377_4b271001","updated":"2025-10-12 16:19:55.000000000","message":"Uploading such keys into public servers is not always a good idea.","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"b3cbec5bf49e55bb15d4d57d537e9b721fe72a4b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"# TODO: Replace with actual values"},{"line_number":29,"context_line":"# WEBLATE_URL\u003d\u003cweblate_url\u003e"},{"line_number":30,"context_line":"# WEBLATE_TOKEN\u003d\u003cweblate_token\u003e"},{"line_number":31,"context_line":"WEBLATE_URL\u003d\"https://skj.printf.kr\""},{"line_number":32,"context_line":"WEBLATE_TOKEN\u003d\"wlu_q3bHMVRgYQ8axxDbe2R4rzezIxUZsVzEyqMF\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"SCRIPTSDIR\u003d\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" \u0026\u0026 pwd )\""},{"line_number":35,"context_line":"source $SCRIPTSDIR/prepare-workspace.sh"}],"source_content_type":"text/x-sh","patch_set":3,"id":"61454377_4b271001","line":32,"range":{"start_line":31,"start_character":0,"end_line":32,"end_character":56},"in_reply_to":"b26d0af4_711975e1","updated":"2025-10-12 02:43:56.000000000","message":"This is my test Weblate server.\nI changed my tokens for security. I think it could be a potential security issue later, so I decide to use system environment variables instead of hardcoding the values.","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"0b1aeb95295402c3855adfe79fe3d41e7b6d924e","unresolved":true,"context_lines":[{"line_number":32,"context_line":"# We need a UTF-8 locale, set it properly in case it\u0027s not set."},{"line_number":33,"context_line":"export LANG\u003den_US.UTF-8"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"# You should set WEBLATE_URL and WEBLATE_TOKEN "},{"line_number":36,"context_line":"# system environment variables."},{"line_number":37,"context_line":"stage \"Check variables\""},{"line_number":38,"context_line":"if [ -z \"$WEBLATE_URL\" ] || [ \"$WEBLATE_URL\" \u003d\u003d \"\u003cweblate_url\u003e\" ]; then"}],"source_content_type":"text/x-sh","patch_set":4,"id":"79c46c4f_511a72d5","line":35,"range":{"start_line":35,"start_character":46,"end_line":35,"end_character":47},"updated":"2025-10-12 16:19:55.000000000","message":"nit: white space on the last part","commit_id":"ecf589ab50a735c4df46314f154a649abd2bf79a"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"cc52005c25c95225d27a545c4a7e482019082298","unresolved":false,"context_lines":[{"line_number":32,"context_line":"# We need a UTF-8 locale, set it properly in case it\u0027s not set."},{"line_number":33,"context_line":"export LANG\u003den_US.UTF-8"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"# You should set WEBLATE_URL and WEBLATE_TOKEN "},{"line_number":36,"context_line":"# system environment variables."},{"line_number":37,"context_line":"stage \"Check variables\""},{"line_number":38,"context_line":"if [ -z \"$WEBLATE_URL\" ] || [ \"$WEBLATE_URL\" \u003d\u003d \"\u003cweblate_url\u003e\" ]; then"}],"source_content_type":"text/x-sh","patch_set":4,"id":"4efb9e0a_65d90dbb","line":35,"range":{"start_line":35,"start_character":46,"end_line":35,"end_character":47},"in_reply_to":"79c46c4f_511a72d5","updated":"2025-10-13 02:37:54.000000000","message":"I remove it.\n\nThanks for your comment.","commit_id":"ecf589ab50a735c4df46314f154a649abd2bf79a"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":"# Migration script to create Weblate components and translations"},{"line_number":3,"context_line":"# migration.sh"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"a7f8b36e_fbcec86e","line":1,"updated":"2025-10-30 15:36:23.000000000","message":"Let\u0027s change the file name to migrate_resources.sh","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":"# Migration script to create Weblate components and translations"},{"line_number":3,"context_line":"# migration.sh"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"91a6de1a_6fe7a118","line":1,"in_reply_to":"a7f8b36e_fbcec86e","updated":"2025-10-31 08:16:01.000000000","message":"That is a intutive name than migration.sh. I change it.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":"# Migration script to create Weblate components and translations"},{"line_number":3,"context_line":"# migration.sh"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-sh","patch_set":12,"id":"e299f667_6e9253f5","line":3,"range":{"start_line":3,"start_character":2,"end_line":3,"end_character":14},"updated":"2025-10-30 15:36:23.000000000","message":"No need to put file name here","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":"# Migration script to create Weblate components and translations"},{"line_number":3,"context_line":"# migration.sh"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-sh","patch_set":12,"id":"ec329e2a_681099e5","line":3,"range":{"start_line":3,"start_character":2,"end_line":3,"end_character":14},"in_reply_to":"e299f667_6e9253f5","updated":"2025-10-31 08:16:01.000000000","message":"I removed the name in all scripts.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"}],"tools/migration/prepare-workspace.sh":[{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"124f1c05d26dd480b03c9b4c5fd6c1c1e66ea19b","unresolved":true,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"WORK_DIR\u003d\"$HOME/workspace\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"source $SCRIPTSDIR/pretty-printer.sh"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-sh","patch_set":3,"id":"b84b6cb8_f773c55c","line":17,"range":{"start_line":17,"start_character":16,"end_line":17,"end_character":25},"updated":"2025-10-11 18:58:10.000000000","message":"Q: Can we work \"workspace\" value as variable instead?","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"b3cbec5bf49e55bb15d4d57d537e9b721fe72a4b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"WORK_DIR\u003d\"$HOME/workspace\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"source $SCRIPTSDIR/pretty-printer.sh"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-sh","patch_set":3,"id":"bd6bda24_b72b3da2","line":17,"range":{"start_line":17,"start_character":16,"end_line":17,"end_character":25},"in_reply_to":"b84b6cb8_f773c55c","updated":"2025-10-12 02:43:56.000000000","message":"Yes, I added a third variable in migration.sh. \nThe default value is workspace.","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"124f1c05d26dd480b03c9b4c5fd6c1c1e66ea19b","unresolved":true,"context_lines":[{"line_number":22,"context_line":"# jq is used to print JSON response pretty"},{"line_number":23,"context_line":"# gettext is used to extract messages from source code"},{"line_number":24,"context_line":"function install_system_dependencies() {"},{"line_number":25,"context_line":"    local dependencies\u003d(\"gettext\" \"jq\")"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    for dependency in ${dependencies[@]}; do"},{"line_number":28,"context_line":"        sudo apt install -y $dependency 2\u003e\u00261"}],"source_content_type":"text/x-sh","patch_set":3,"id":"916fff97_203382fe","line":25,"range":{"start_line":25,"start_character":35,"end_line":25,"end_character":37},"updated":"2025-10-11 18:58:10.000000000","message":"If you think jq is needed, please add \"bindep.txt\" file on this folder. (note: gettext is already in https://opendev.org/openstack/i18n/src/branch/master/bindep.txt but you can also add to the \"bindep.txt\" file on this folder).","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"b3cbec5bf49e55bb15d4d57d537e9b721fe72a4b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"# jq is used to print JSON response pretty"},{"line_number":23,"context_line":"# gettext is used to extract messages from source code"},{"line_number":24,"context_line":"function install_system_dependencies() {"},{"line_number":25,"context_line":"    local dependencies\u003d(\"gettext\" \"jq\")"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    for dependency in ${dependencies[@]}; do"},{"line_number":28,"context_line":"        sudo apt install -y $dependency 2\u003e\u00261"}],"source_content_type":"text/x-sh","patch_set":3,"id":"7b75926e_96771228","line":25,"range":{"start_line":25,"start_character":35,"end_line":25,"end_character":37},"in_reply_to":"916fff97_203382fe","updated":"2025-10-12 02:43:56.000000000","message":"I placed bindep.txt in this folder and included the jq librariy in it.","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"124f1c05d26dd480b03c9b4c5fd6c1c1e66ea19b","unresolved":true,"context_lines":[{"line_number":37,"context_line":"function create_python_venv() {"},{"line_number":38,"context_line":"    local python_cmd"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    # check python is 3.10"},{"line_number":41,"context_line":"    # NOTE: we only test 3.10 version"},{"line_number":42,"context_line":"    if command -v python3.10 \u0026\u003e /dev/null; then"},{"line_number":43,"context_line":"        python_cmd\u003d\"python3.10\""},{"line_number":44,"context_line":"    elif command -v python3 \u0026\u003e /dev/null; then"},{"line_number":45,"context_line":"        PYTHON_VERSION\u003d$(python3 -c \"import sys; print(f\u0027{sys.version_info.major}.{sys.version_info.minor}\u0027)\")"},{"line_number":46,"context_line":"        if [[ \"$PYTHON_VERSION\" !\u003d \"3.10\" ]]; then"},{"line_number":47,"context_line":"            fail \"Python 3.10 is not installed\""},{"line_number":48,"context_line":"            return 1"},{"line_number":49,"context_line":"        fi"},{"line_number":50,"context_line":"        python_cmd\u003d\"python3\""},{"line_number":51,"context_line":"    else"},{"line_number":52,"context_line":"        fail \"Please check python3 or python3.10 is installed\""},{"line_number":53,"context_line":"        return 1"},{"line_number":54,"context_line":"    fi"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    # create venv"},{"line_number":57,"context_line":"    if [ ! -d \"$WORK_DIR/.venv\" ]; then"}],"source_content_type":"text/x-sh","patch_set":3,"id":"4246785a_0e529f83","line":54,"range":{"start_line":40,"start_character":5,"end_line":54,"end_character":6},"updated":"2025-10-11 18:58:10.000000000","message":"No. OpenStack project repo source codes should work all the supported Python versions.","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"b3cbec5bf49e55bb15d4d57d537e9b721fe72a4b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"function create_python_venv() {"},{"line_number":38,"context_line":"    local python_cmd"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    # check python is 3.10"},{"line_number":41,"context_line":"    # NOTE: we only test 3.10 version"},{"line_number":42,"context_line":"    if command -v python3.10 \u0026\u003e /dev/null; then"},{"line_number":43,"context_line":"        python_cmd\u003d\"python3.10\""},{"line_number":44,"context_line":"    elif command -v python3 \u0026\u003e /dev/null; then"},{"line_number":45,"context_line":"        PYTHON_VERSION\u003d$(python3 -c \"import sys; print(f\u0027{sys.version_info.major}.{sys.version_info.minor}\u0027)\")"},{"line_number":46,"context_line":"        if [[ \"$PYTHON_VERSION\" !\u003d \"3.10\" ]]; then"},{"line_number":47,"context_line":"            fail \"Python 3.10 is not installed\""},{"line_number":48,"context_line":"            return 1"},{"line_number":49,"context_line":"        fi"},{"line_number":50,"context_line":"        python_cmd\u003d\"python3\""},{"line_number":51,"context_line":"    else"},{"line_number":52,"context_line":"        fail \"Please check python3 or python3.10 is installed\""},{"line_number":53,"context_line":"        return 1"},{"line_number":54,"context_line":"    fi"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    # create venv"},{"line_number":57,"context_line":"    if [ ! -d \"$WORK_DIR/.venv\" ]; then"}],"source_content_type":"text/x-sh","patch_set":3,"id":"7e8a0494_bcacdcde","line":54,"range":{"start_line":40,"start_character":5,"end_line":54,"end_character":6},"in_reply_to":"4246785a_0e529f83","updated":"2025-10-12 02:43:56.000000000","message":"I keep only the python3 validation logic and removed the 3.10 version check.","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"124f1c05d26dd480b03c9b4c5fd6c1c1e66ea19b","unresolved":true,"context_lines":[{"line_number":70,"context_line":"    source $WORK_DIR/.venv/bin/activate"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    # Install dependencies for custom python scripts"},{"line_number":73,"context_line":"    pip3 install polib\u003d\u003d1.2.0 lxml\u003d\u003d4.9.3"},{"line_number":74,"context_line":"    if [ $? -ne 0 ]; then"},{"line_number":75,"context_line":"        fail \"Failed to install dependencies for custom python scripts\""},{"line_number":76,"context_line":"        return 1"}],"source_content_type":"text/x-sh","patch_set":3,"id":"43ae777d_e1ff9d5e","line":73,"range":{"start_line":73,"start_character":4,"end_line":73,"end_character":41},"updated":"2025-10-11 18:58:10.000000000","message":"If such libraries are needed, please add \"requirements.txt\" file on this folder.","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"b3cbec5bf49e55bb15d4d57d537e9b721fe72a4b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    source $WORK_DIR/.venv/bin/activate"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    # Install dependencies for custom python scripts"},{"line_number":73,"context_line":"    pip3 install polib\u003d\u003d1.2.0 lxml\u003d\u003d4.9.3"},{"line_number":74,"context_line":"    if [ $? -ne 0 ]; then"},{"line_number":75,"context_line":"        fail \"Failed to install dependencies for custom python scripts\""},{"line_number":76,"context_line":"        return 1"}],"source_content_type":"text/x-sh","patch_set":3,"id":"50ee6d7a_30c1d7a8","line":73,"range":{"start_line":73,"start_character":4,"end_line":73,"end_character":41},"in_reply_to":"43ae777d_e1ff9d5e","updated":"2025-10-12 02:43:56.000000000","message":"Yes, I move the Python dependencies into requirements.txt.","commit_id":"d87b2481e45b3fcd9b9c7cffdd0b5e87f7210462"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"0b1aeb95295402c3855adfe79fe3d41e7b6d924e","unresolved":true,"context_lines":[{"line_number":48,"context_line":"    fi"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    # Install dependencies with bindep"},{"line_number":51,"context_line":"    pip3 install bindep"},{"line_number":52,"context_line":"    bindep_packages\u003d$($WORK_DIR/.venv/bin/bindep -b -f bindep.txt 2\u003e/dev/null)"},{"line_number":53,"context_line":"    if [ -n \"$bindep_packages\" ]; then"},{"line_number":54,"context_line":"        echo \"Installing system dependencies with bindep: $bindep_packages\""}],"source_content_type":"text/x-sh","patch_set":4,"id":"27046880_9336bc4c","line":51,"range":{"start_line":51,"start_character":4,"end_line":51,"end_character":23},"updated":"2025-10-12 16:19:55.000000000","message":"How about adding \"bindep\" into requirements.txt?","commit_id":"ecf589ab50a735c4df46314f154a649abd2bf79a"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"cc52005c25c95225d27a545c4a7e482019082298","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    fi"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    # Install dependencies with bindep"},{"line_number":51,"context_line":"    pip3 install bindep"},{"line_number":52,"context_line":"    bindep_packages\u003d$($WORK_DIR/.venv/bin/bindep -b -f bindep.txt 2\u003e/dev/null)"},{"line_number":53,"context_line":"    if [ -n \"$bindep_packages\" ]; then"},{"line_number":54,"context_line":"        echo \"Installing system dependencies with bindep: $bindep_packages\""}],"source_content_type":"text/x-sh","patch_set":4,"id":"bef03272_e182d022","line":51,"range":{"start_line":51,"start_character":4,"end_line":51,"end_character":23},"in_reply_to":"27046880_9336bc4c","updated":"2025-10-13 02:37:54.000000000","message":"I moved bindep into requirements.txt.","commit_id":"ecf589ab50a735c4df46314f154a649abd2bf79a"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"0b1aeb95295402c3855adfe79fe3d41e7b6d924e","unresolved":true,"context_lines":[{"line_number":120,"context_line":"}"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"function setup_env() {"},{"line_number":123,"context_line":"    if ! prepare_workspace; then"},{"line_number":124,"context_line":"        return 1"},{"line_number":125,"context_line":"    fi"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    if ! create_python_venv; then"},{"line_number":128,"context_line":"        return 1"},{"line_number":129,"context_line":"    fi"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    if ! install_dependencies; then"},{"line_number":132,"context_line":"        return 1"},{"line_number":133,"context_line":"    fi"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    if ! install_horizon; then"},{"line_number":136,"context_line":"        return 1"},{"line_number":137,"context_line":"    fi"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    if ! check_zanata_cli; then"},{"line_number":140,"context_line":"        return 1"},{"line_number":141,"context_line":"    fi"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    return 0"},{"line_number":144,"context_line":"}"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-sh","patch_set":4,"id":"99ef6596_6e55217f","line":142,"range":{"start_line":123,"start_character":4,"end_line":142,"end_character":0},"updated":"2025-10-12 16:19:55.000000000","message":"Can you echo relevant error messages (using fail - like L158) and return 1?","commit_id":"ecf589ab50a735c4df46314f154a649abd2bf79a"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"cc52005c25c95225d27a545c4a7e482019082298","unresolved":false,"context_lines":[{"line_number":120,"context_line":"}"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"function setup_env() {"},{"line_number":123,"context_line":"    if ! prepare_workspace; then"},{"line_number":124,"context_line":"        return 1"},{"line_number":125,"context_line":"    fi"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    if ! create_python_venv; then"},{"line_number":128,"context_line":"        return 1"},{"line_number":129,"context_line":"    fi"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    if ! install_dependencies; then"},{"line_number":132,"context_line":"        return 1"},{"line_number":133,"context_line":"    fi"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    if ! install_horizon; then"},{"line_number":136,"context_line":"        return 1"},{"line_number":137,"context_line":"    fi"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    if ! check_zanata_cli; then"},{"line_number":140,"context_line":"        return 1"},{"line_number":141,"context_line":"    fi"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    return 0"},{"line_number":144,"context_line":"}"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-sh","patch_set":4,"id":"e4c3be7c_c9498b66","line":142,"range":{"start_line":123,"start_character":4,"end_line":142,"end_character":0},"in_reply_to":"99ef6596_6e55217f","updated":"2025-10-13 02:37:54.000000000","message":"Yes, I leave failure messages and checking tips.","commit_id":"ecf589ab50a735c4df46314f154a649abd2bf79a"}],"tools/migration/setup_env/setup.sh":[{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"66724c906387e0c84ee25a7198817b4e081e7321","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":"# Set venv and folder structure for migration"},{"line_number":3,"context_line":"# prepare-workspace.sh"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-sh","patch_set":12,"id":"642f9e5c_2bb96284","line":3,"range":{"start_line":3,"start_character":0,"end_line":3,"end_character":22},"updated":"2025-10-30 15:36:23.000000000","message":"No need to mention file name here","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":"# Set venv and folder structure for migration"},{"line_number":3,"context_line":"# prepare-workspace.sh"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-sh","patch_set":12,"id":"4bebe16d_3c9ba074","line":3,"range":{"start_line":3,"start_character":0,"end_line":3,"end_character":22},"in_reply_to":"642f9e5c_2bb96284","updated":"2025-10-31 08:16:01.000000000","message":"I remove it.\n\nThank you for your review.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"98df523bb932b6d564328e65d87d0419d786d210","unresolved":true,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    cd $SCRIPTSDIR/setup_env"},{"line_number":42,"context_line":"    # Install python dependencies"},{"line_number":43,"context_line":"    pip3 install -r requirements.txt"},{"line_number":44,"context_line":"    if [ $? -ne 0 ]; then"},{"line_number":45,"context_line":"        echo \"[ERROR] Failed to install requirements.txt in venv.\""},{"line_number":46,"context_line":"        return 1"}],"source_content_type":"text/x-sh","patch_set":12,"id":"6d1c3f2b_5e932f70","line":43,"updated":"2025-10-30 15:47:38.000000000","message":"Where is this requirements.txt file located?","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"8441dbb6225784b356de3b0b5c8b027987798348","unresolved":true,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    cd $SCRIPTSDIR/setup_env"},{"line_number":42,"context_line":"    # Install python dependencies"},{"line_number":43,"context_line":"    pip3 install -r requirements.txt"},{"line_number":44,"context_line":"    if [ $? -ne 0 ]; then"},{"line_number":45,"context_line":"        echo \"[ERROR] Failed to install requirements.txt in venv.\""},{"line_number":46,"context_line":"        return 1"}],"source_content_type":"text/x-sh","patch_set":12,"id":"b0493a82_c9152a06","line":43,"in_reply_to":"6d1c3f2b_5e932f70","updated":"2025-10-30 17:39:42.000000000","message":"Can\u0027t you see \"tools/migration/setup_env/requirements.txt\" on this patch?","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    cd $SCRIPTSDIR/setup_env"},{"line_number":42,"context_line":"    # Install python dependencies"},{"line_number":43,"context_line":"    pip3 install -r requirements.txt"},{"line_number":44,"context_line":"    if [ $? -ne 0 ]; then"},{"line_number":45,"context_line":"        echo \"[ERROR] Failed to install requirements.txt in venv.\""},{"line_number":46,"context_line":"        return 1"}],"source_content_type":"text/x-sh","patch_set":12,"id":"04c7e5f6_808a2dbb","line":43,"in_reply_to":"b0493a82_c9152a06","updated":"2025-10-31 08:16:01.000000000","message":"I moved to requirements in setup_env/ because it only used when setting up the environment.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"98df523bb932b6d564328e65d87d0419d786d210","unresolved":true,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    if ! check_zanata_cli; then"},{"line_number":144,"context_line":"        echo \"[ERROR] Failed to check zanata-cli.\""},{"line_number":145,"context_line":"        echo \"[ERROR] Please check if zanata-cli is installed and zanata.ini file exists.\""},{"line_number":146,"context_line":"        return 1"},{"line_number":147,"context_line":"    fi"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"7e916199_e382009f","line":145,"updated":"2025-10-30 15:47:38.000000000","message":"How about improving it so that it installs the Zanata CLI if it\u0027s not already installed? Since it\u0027s an essential CLI, I think it would be better to make it install automatically when missing.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":37966,"name":"DaGyeong Kim","display_name":"S0okJu","email":"damekyung98@gmail.com","username":"S0okJu"},"change_message_id":"014006503c80b96477ce229c243f2b91f967153d","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    if ! check_zanata_cli; then"},{"line_number":144,"context_line":"        echo \"[ERROR] Failed to check zanata-cli.\""},{"line_number":145,"context_line":"        echo \"[ERROR] Please check if zanata-cli is installed and zanata.ini file exists.\""},{"line_number":146,"context_line":"        return 1"},{"line_number":147,"context_line":"    fi"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"2a96d06f_db4763fb","line":145,"in_reply_to":"055aacc4_f5d1746b","updated":"2025-10-31 08:16:01.000000000","message":"I\u0027ll consider the zanata-cli installation process after merging.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"8441dbb6225784b356de3b0b5c8b027987798348","unresolved":true,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    if ! check_zanata_cli; then"},{"line_number":144,"context_line":"        echo \"[ERROR] Failed to check zanata-cli.\""},{"line_number":145,"context_line":"        echo \"[ERROR] Please check if zanata-cli is installed and zanata.ini file exists.\""},{"line_number":146,"context_line":"        return 1"},{"line_number":147,"context_line":"    fi"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"9c928b86_d5b22ae6","line":145,"in_reply_to":"7e916199_e382009f","updated":"2025-10-30 17:39:42.000000000","message":"This is for enhancement so I think it can be done once it merges.","commit_id":"e633d43494333614685b51080638d90fe45da6ee"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"64b8dd11e30da5b22c9b49a19d2f6de2ca5ad48b","unresolved":true,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    if ! check_zanata_cli; then"},{"line_number":144,"context_line":"        echo \"[ERROR] Failed to check zanata-cli.\""},{"line_number":145,"context_line":"        echo \"[ERROR] Please check if zanata-cli is installed and zanata.ini file exists.\""},{"line_number":146,"context_line":"        return 1"},{"line_number":147,"context_line":"    fi"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-sh","patch_set":12,"id":"055aacc4_f5d1746b","line":145,"in_reply_to":"9c928b86_d5b22ae6","updated":"2025-10-30 17:41:27.000000000","message":"Also, zanata-cli requires 0install from official manual, which is different from rather standardized requirements.txt and bindep.txt","commit_id":"e633d43494333614685b51080638d90fe45da6ee"}]}
