)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"7fd6fbd19d6e306c1d2c6bf22cc700b223725703","unresolved":false,"context_lines":[{"line_number":16,"context_line":"where \u003cmilestone\u003e becomes an alias for all the revisions for a"},{"line_number":17,"context_line":"milestone."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Partial-Bug: #1499033"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I38623986dd574bec01fe147f9c6a747f3f512bb7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a1a9d01_62a33a50","line":19,"updated":"2015-09-28 17:27:32.000000000","message":"I know that\u0027s not strictly required, but wouldn\u0027t be helpful if we tested this in conjunction with the *-aas ones, by adding Depends-on?","commit_id":"e7327aac05e84dd1c2cb05511c91274a62f2fc2d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"368557d3a1388963ecfaf9aa71d36faafe88bc9a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"where \u003cmilestone\u003e becomes an alias for all the revisions for a"},{"line_number":17,"context_line":"milestone."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Partial-Bug: #1499033"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I38623986dd574bec01fe147f9c6a747f3f512bb7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a1a9d01_4245d66d","line":19,"updated":"2015-09-28 17:28:28.000000000","message":"what does it take to close the bug?\n\nWhen I look at:\n\nhttps://review.openstack.org/#/q/status:open++branch:master+topic:bug/1499033,n,z\n\nI see nothing that closes the issue, I imagine this one is.","commit_id":"e7327aac05e84dd1c2cb05511c91274a62f2fc2d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"4445db5a3aca8ecb22b13de2d7fd0a9f4daa58e0","unresolved":false,"context_lines":[{"line_number":16,"context_line":"where \u003cmilestone\u003e becomes an alias for all the revisions for a"},{"line_number":17,"context_line":"milestone."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Partial-Bug: #1499033"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I38623986dd574bec01fe147f9c6a747f3f512bb7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a1a9d01_5b905843","line":19,"in_reply_to":"9a1a9d01_0acb7073","updated":"2015-09-28 20:35:31.000000000","message":"so long as you edit the cherry-picked commit message, then it\u0027s fine.","commit_id":"e7327aac05e84dd1c2cb05511c91274a62f2fc2d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"40513e4fe2492330a1ab889b8f84f4cca07dc933","unresolved":false,"context_lines":[{"line_number":16,"context_line":"where \u003cmilestone\u003e becomes an alias for all the revisions for a"},{"line_number":17,"context_line":"milestone."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Partial-Bug: #1499033"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I38623986dd574bec01fe147f9c6a747f3f512bb7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a1a9d01_0acb7073","line":19,"in_reply_to":"9a1a9d01_4245d66d","updated":"2015-09-28 19:24:35.000000000","message":"I was hoping to close the bug with the backport to stable/liberty","commit_id":"e7327aac05e84dd1c2cb05511c91274a62f2fc2d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"40513e4fe2492330a1ab889b8f84f4cca07dc933","unresolved":false,"context_lines":[{"line_number":16,"context_line":"where \u003cmilestone\u003e becomes an alias for all the revisions for a"},{"line_number":17,"context_line":"milestone."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Partial-Bug: #1499033"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I38623986dd574bec01fe147f9c6a747f3f512bb7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a1a9d01_4aaf2894","line":19,"in_reply_to":"9a1a9d01_62a33a50","updated":"2015-09-28 19:24:35.000000000","message":"Will do","commit_id":"e7327aac05e84dd1c2cb05511c91274a62f2fc2d"}],"neutron/db/migration/__init__.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"a079cd429fa7f5527b9d1ae90f3ecb808562025c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CREATION_OPERATIONS \u003d (sa.sql.ddl.AddConstraint,"},{"line_number":31,"context_line":"                       sa.sql.ddl.CreateIndex,"},{"line_number":32,"context_line":"                       sa.sql.ddl.CreateTable,"},{"line_number":33,"context_line":"                       sa.sql.ddl.CreateColumn,"},{"line_number":34,"context_line":"                       )"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_a06e4ec7","line":31,"updated":"2015-09-27 20:07:44.000000000","message":"oops, sorry","commit_id":"371d091cd195a674c2a82d942824675e7e0c6ab4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"822dba43135a86c7e89d3e0179f7af454e0ff813","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from sqlalchemy.engine import reflection"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# Neutron milestones for upgrade aliases"},{"line_number":25,"context_line":"neutron_milestones \u003d ["},{"line_number":26,"context_line":"    # earlier milestones were not tagged"},{"line_number":27,"context_line":"    \u0027liberty\u0027,"},{"line_number":28,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_0c160cf1","line":25,"updated":"2015-09-29 13:23:48.000000000","message":"nit: I would prefer if we maintain all milestone literals as some constants that then could be used in subprojects thru that symbol instead of duplicating literals and hoping no one makes a typo there.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"57a386819e8b3d18eed7d2d6434e7c2d5fdb2f9b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from sqlalchemy.engine import reflection"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# Neutron milestones for upgrade aliases"},{"line_number":25,"context_line":"neutron_milestones \u003d ["},{"line_number":26,"context_line":"    # earlier milestones were not tagged"},{"line_number":27,"context_line":"    \u0027liberty\u0027,"},{"line_number":28,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_a74ffb69","line":25,"in_reply_to":"9a1a9d01_0c160cf1","updated":"2015-09-29 13:39:16.000000000","message":"Will do.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"822dba43135a86c7e89d3e0179f7af454e0ff813","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# Neutron milestones for upgrade aliases"},{"line_number":25,"context_line":"neutron_milestones \u003d ["},{"line_number":26,"context_line":"    # earlier milestones were not tagged"},{"line_number":27,"context_line":"    \u0027liberty\u0027,"},{"line_number":28,"context_line":"]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CREATION_OPERATIONS \u003d (sa.sql.ddl.CreateIndex,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_4c964494","line":27,"updated":"2015-09-29 13:23:48.000000000","message":"Let\u0027s say a subproject is happy in its ignorance about split branches, and releases Liberty without it, tagging their last migration script as \u0027liberty\u0027. How would we handle that? It seems that then we effectively make it impossible to refer to the script with \u0027liberty\u0027 tag.\n\nHave you considered a separate format for milestones, like \u0027@liberty\u0027? Of course, such a format would need a new sanity check to make sure no one ever defines a revision with that name.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"57a386819e8b3d18eed7d2d6434e7c2d5fdb2f9b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# Neutron milestones for upgrade aliases"},{"line_number":25,"context_line":"neutron_milestones \u003d ["},{"line_number":26,"context_line":"    # earlier milestones were not tagged"},{"line_number":27,"context_line":"    \u0027liberty\u0027,"},{"line_number":28,"context_line":"]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CREATION_OPERATIONS \u003d (sa.sql.ddl.CreateIndex,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_a7393ba6","line":27,"in_reply_to":"9a1a9d01_4c964494","updated":"2015-09-29 13:39:16.000000000","message":"We are going to (soon) implement a single alembic env for all sub-projects using the neutron db. We cannot have revisions like \u0027liberty\u0027 since revisions must be unique across the env. The \u0027tagging\u0027 method implemented here still works for non-split branches.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d1b176d9ed288393b2aedf4bf56e567cf75bfee7","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# Neutron milestones for upgrade aliases"},{"line_number":25,"context_line":"neutron_milestones \u003d ["},{"line_number":26,"context_line":"    # earlier milestones were not tagged"},{"line_number":27,"context_line":"    \u0027liberty\u0027,"},{"line_number":28,"context_line":"]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CREATION_OPERATIONS \u003d (sa.sql.ddl.CreateIndex,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_0351fa35","line":27,"in_reply_to":"9a1a9d01_a7393ba6","updated":"2015-09-29 14:04:23.000000000","message":"Meaning, we will require everyone to get rid of their old migration scripts that may have \u0027common\u0027 names like \u0027kilo\u0027, or we break them. That\u0027s a bit tough and ideally would require a cycle of deprecations.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"8cd35a78c19d0918fe0b31dbfac69a32e9ea4f81","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# Neutron milestones for upgrade aliases"},{"line_number":25,"context_line":"LIBERTY \u003d \u0027liberty\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"neutron_milestones \u003d ["},{"line_number":28,"context_line":"    # earlier milestones were not tagged"},{"line_number":29,"context_line":"    LIBERTY,"},{"line_number":30,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_492ab191","line":27,"updated":"2015-09-29 14:43:28.000000000","message":"Should it be upper case?","commit_id":"611607308412156d800cc8b4f202f1d336f0b5cd"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"9eddde6da5f6db7c15159b036c2c10c8789f54de","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# Neutron milestones for upgrade aliases"},{"line_number":25,"context_line":"LIBERTY \u003d \u0027liberty\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"neutron_milestones \u003d ["},{"line_number":28,"context_line":"    # earlier milestones were not tagged"},{"line_number":29,"context_line":"    LIBERTY,"},{"line_number":30,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_8ce69713","line":27,"in_reply_to":"9a1a9d01_492ab191","updated":"2015-09-29 14:49:02.000000000","message":"Done","commit_id":"611607308412156d800cc8b4f202f1d336f0b5cd"}],"neutron/db/migration/cli.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"822dba43135a86c7e89d3e0179f7af454e0ff813","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    script \u003d alembic_script.ScriptDirectory.from_config(config)"},{"line_number":138,"context_line":"    return ["},{"line_number":139,"context_line":"        (m.revision, label)"},{"line_number":140,"context_line":"        for m in script.walk_revisions(base\u003d\u0027base\u0027, head\u003d\u0027heads\u0027)"},{"line_number":141,"context_line":"        for label in m.branch_labels"},{"line_number":142,"context_line":"        if milestone in getattr(m.module, \u0027neutron_milestone\u0027, []) and"},{"line_number":143,"context_line":"        (branch is None or branch in m.branch_labels)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_31c7a997","line":140,"updated":"2015-09-29 13:23:48.000000000","message":"for m in _get_revisions(script)","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"57a386819e8b3d18eed7d2d6434e7c2d5fdb2f9b","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    script \u003d alembic_script.ScriptDirectory.from_config(config)"},{"line_number":138,"context_line":"    return ["},{"line_number":139,"context_line":"        (m.revision, label)"},{"line_number":140,"context_line":"        for m in script.walk_revisions(base\u003d\u0027base\u0027, head\u003d\u0027heads\u0027)"},{"line_number":141,"context_line":"        for label in m.branch_labels"},{"line_number":142,"context_line":"        if milestone in getattr(m.module, \u0027neutron_milestone\u0027, []) and"},{"line_number":143,"context_line":"        (branch is None or branch in m.branch_labels)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_c73eaf8b","line":140,"in_reply_to":"9a1a9d01_31c7a997","updated":"2015-09-29 13:39:16.000000000","message":"Done","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3ec226b9380c19036c5f4dca1e63a9f1b4961946","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        (m.revision, label)"},{"line_number":140,"context_line":"        for m in script.walk_revisions(base\u003d\u0027base\u0027, head\u003d\u0027heads\u0027)"},{"line_number":141,"context_line":"        for label in m.branch_labels"},{"line_number":142,"context_line":"        if milestone in getattr(m.module, \u0027neutron_milestone\u0027, []) and"},{"line_number":143,"context_line":"        (branch is None or branch in m.branch_labels)"},{"line_number":144,"context_line":"    ]"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_60a24db0","line":142,"updated":"2015-09-28 20:13:27.000000000","message":"I wonder if we could do less magic than this, and avoid the forloop entirely if we had these declared in a well known place.\n\nThoughts?","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"822dba43135a86c7e89d3e0179f7af454e0ff813","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        (m.revision, label)"},{"line_number":140,"context_line":"        for m in script.walk_revisions(base\u003d\u0027base\u0027, head\u003d\u0027heads\u0027)"},{"line_number":141,"context_line":"        for label in m.branch_labels"},{"line_number":142,"context_line":"        if milestone in getattr(m.module, \u0027neutron_milestone\u0027, []) and"},{"line_number":143,"context_line":"        (branch is None or branch in m.branch_labels)"},{"line_number":144,"context_line":"    ]"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_f19db166","line":142,"in_reply_to":"9a1a9d01_1bd724ee","updated":"2015-09-29 13:23:48.000000000","message":"@Paul, you can refer to any Depends-On patch to see the changes that are needed for subprojects to support milestone upgrades.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"57a386819e8b3d18eed7d2d6434e7c2d5fdb2f9b","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        (m.revision, label)"},{"line_number":140,"context_line":"        for m in script.walk_revisions(base\u003d\u0027base\u0027, head\u003d\u0027heads\u0027)"},{"line_number":141,"context_line":"        for label in m.branch_labels"},{"line_number":142,"context_line":"        if milestone in getattr(m.module, \u0027neutron_milestone\u0027, []) and"},{"line_number":143,"context_line":"        (branch is None or branch in m.branch_labels)"},{"line_number":144,"context_line":"    ]"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_27d1ab23","line":142,"in_reply_to":"9a1a9d01_1bd724ee","updated":"2015-09-29 13:39:16.000000000","message":"@Paul: first of all, sub-projects branches can always be upgraded with \"upgrade heads\" instead of \"upgrade liberty\", so it\u0027s not the end of the world. In the next patch set I will include documentation on how to tag, and provide milestone constants as Ihar requested.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"742f5c86ea34f20c257c0c2e443db9d00f02dd39","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        (m.revision, label)"},{"line_number":140,"context_line":"        for m in script.walk_revisions(base\u003d\u0027base\u0027, head\u003d\u0027heads\u0027)"},{"line_number":141,"context_line":"        for label in m.branch_labels"},{"line_number":142,"context_line":"        if milestone in getattr(m.module, \u0027neutron_milestone\u0027, []) and"},{"line_number":143,"context_line":"        (branch is None or branch in m.branch_labels)"},{"line_number":144,"context_line":"    ]"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_fc67dde6","line":142,"in_reply_to":"9a1a9d01_50eb5213","updated":"2015-09-29 00:56:09.000000000","message":"@Armando: yes, either way there will be trouble for a sub-project if it does not tag its neutron milestone revisions.\n\nI chose this way of tagging after chatting with zzzeek about possibly supporting tags natively in alembic at some point. You can find milestone revisions by running \"git grep neutron_milestone\" in your project.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"5815403baa8bbd06ed414327c36f9bfacf949d7c","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        (m.revision, label)"},{"line_number":140,"context_line":"        for m in script.walk_revisions(base\u003d\u0027base\u0027, head\u003d\u0027heads\u0027)"},{"line_number":141,"context_line":"        for label in m.branch_labels"},{"line_number":142,"context_line":"        if milestone in getattr(m.module, \u0027neutron_milestone\u0027, []) and"},{"line_number":143,"context_line":"        (branch is None or branch in m.branch_labels)"},{"line_number":144,"context_line":"    ]"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_6191ea46","line":142,"in_reply_to":"9a1a9d01_50eb5213","updated":"2015-09-29 00:30:56.000000000","message":"The only mention of milestones I can find in the subproject devref is in relation to Launchpad. Do we need to add something about Alembic? I\u0027m afraid I don\u0027t know enough about Alembic to understand what problem you\u0027re foreseeing if subprojects do not define a milestone.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d184b2d8fe2ae2af6891f0497793c2e3dc44c74d","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        (m.revision, label)"},{"line_number":140,"context_line":"        for m in script.walk_revisions(base\u003d\u0027base\u0027, head\u003d\u0027heads\u0027)"},{"line_number":141,"context_line":"        for label in m.branch_labels"},{"line_number":142,"context_line":"        if milestone in getattr(m.module, \u0027neutron_milestone\u0027, []) and"},{"line_number":143,"context_line":"        (branch is None or branch in m.branch_labels)"},{"line_number":144,"context_line":"    ]"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_50eb5213","line":142,"in_reply_to":"9a1a9d01_60a24db0","updated":"2015-09-28 22:24:47.000000000","message":"Based on the discussion we had in the various channels, it\u0027s probably most convenient to leave the milestone where you put it. I was thinking of having a well-known file alongside HEADS, like MILESTONES with format:\n\n  \u003crelease\u003e \u003crelease-contract-revision\u003e \u003crelease-expand-revision\u003e\n  \u003crelease^1\u003e \u003crelease^1-contract-revision\u003e \u003crelease^1-expand-revision\u003e\n\nbut it\u0027s really an implementation detail at this point, and I am not sure if you had considered that in the first place.\n\nIf sub-projects do not define it a neutron milestone, I believe we\u0027ll have trouble regardless of the approach, no?","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d8aca352bae9e6395ad7460fc3e134c22de37a16","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        (m.revision, label)"},{"line_number":140,"context_line":"        for m in script.walk_revisions(base\u003d\u0027base\u0027, head\u003d\u0027heads\u0027)"},{"line_number":141,"context_line":"        for label in m.branch_labels"},{"line_number":142,"context_line":"        if milestone in getattr(m.module, \u0027neutron_milestone\u0027, []) and"},{"line_number":143,"context_line":"        (branch is None or branch in m.branch_labels)"},{"line_number":144,"context_line":"    ]"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_c149d6b8","line":142,"in_reply_to":"9a1a9d01_6191ea46","updated":"2015-09-29 00:43:53.000000000","message":"I think the milestone is just a convenient way for cli to refer to some reversions","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"742f5c86ea34f20c257c0c2e443db9d00f02dd39","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        (m.revision, label)"},{"line_number":140,"context_line":"        for m in script.walk_revisions(base\u003d\u0027base\u0027, head\u003d\u0027heads\u0027)"},{"line_number":141,"context_line":"        for label in m.branch_labels"},{"line_number":142,"context_line":"        if milestone in getattr(m.module, \u0027neutron_milestone\u0027, []) and"},{"line_number":143,"context_line":"        (branch is None or branch in m.branch_labels)"},{"line_number":144,"context_line":"    ]"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_bc188576","line":142,"in_reply_to":"9a1a9d01_c149d6b8","updated":"2015-09-29 00:56:09.000000000","message":"In the neutron meeting it was mentioned that some installers and/or distributions may have scripts that do something like \"neutron-db-manage upgrade liberty\" for milestone release.\n\nIf this is done on the stable/liberty git branch, then it is the same as \"neutron-db-manage upgrade heads\".\n\nIf this is done on the git master branch, then you still have to follow with \"neutron-db-manage upgrade heads\" to bring the schema in line with the source code before starting neutron server.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"54ba39fcc87dfc19cc2afb87b40be95711ed7887","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        (m.revision, label)"},{"line_number":140,"context_line":"        for m in script.walk_revisions(base\u003d\u0027base\u0027, head\u003d\u0027heads\u0027)"},{"line_number":141,"context_line":"        for label in m.branch_labels"},{"line_number":142,"context_line":"        if milestone in getattr(m.module, \u0027neutron_milestone\u0027, []) and"},{"line_number":143,"context_line":"        (branch is None or branch in m.branch_labels)"},{"line_number":144,"context_line":"    ]"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_1bd724ee","line":142,"in_reply_to":"9a1a9d01_fc67dde6","updated":"2015-09-29 12:32:28.000000000","message":"@Henry, @Armando: You both seem to be in agreement that there will be trouble if a sub-project doesn\u0027t tag correctly, but I\u0027m still not sure if there\u0027s any documentation that tells sub-project contributors what they need to do to get it correct.\n\nI\u0027d be happy to write some documentation for the sub-project devref, but I don\u0027t know Alembic well enough to understand what problem you\u0027re envisioning.\n\nAre you saying that subprojects should include the following code in \u003csubproject\u003e/db/migration/__init__.py in their own subproject repo?\n\n # Neutron milestones for upgrade aliases\n neutron_milestones \u003d [\n     # earlier milestones were not tagged\n     \u0027liberty\u0027,\n ]","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8c32c964945cb6a5f56a098bde8281fe72ec606d","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        (m.revision, label)"},{"line_number":140,"context_line":"        for m in script.walk_revisions(base\u003d\u0027base\u0027, head\u003d\u0027heads\u0027)"},{"line_number":141,"context_line":"        for label in m.branch_labels"},{"line_number":142,"context_line":"        if milestone in getattr(m.module, \u0027neutron_milestone\u0027, []) and"},{"line_number":143,"context_line":"        (branch is None or branch in m.branch_labels)"},{"line_number":144,"context_line":"    ]"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_105e3544","line":142,"in_reply_to":"9a1a9d01_fc67dde6","updated":"2015-09-29 02:19:15.000000000","message":"aye aye captain.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"822dba43135a86c7e89d3e0179f7af454e0ff813","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        if revision \u003d\u003d \u0027head\u0027:"},{"line_number":184,"context_line":"            revision \u003d \u0027heads\u0027"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    revisions \u003d [(revision, desc)]"},{"line_number":187,"context_line":"    if revision in migration.neutron_milestones:"},{"line_number":188,"context_line":"        revisions \u003d _find_milestone_revisions(config, revision, desc)"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_516d7d2f","line":186,"updated":"2015-09-29 13:23:48.000000000","message":"Some pedantry...\n\nI believe now that desc is only a branch name, we should rename the variable, and pass it as desc\u003d\u003cbranch-var-name\u003e into do_alembic_command.\n\nAlso a pedant in me says that there is no need to construct that list here if revision is milestone since it will be overridden.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"57a386819e8b3d18eed7d2d6434e7c2d5fdb2f9b","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        if revision \u003d\u003d \u0027head\u0027:"},{"line_number":184,"context_line":"            revision \u003d \u0027heads\u0027"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    revisions \u003d [(revision, desc)]"},{"line_number":187,"context_line":"    if revision in migration.neutron_milestones:"},{"line_number":188,"context_line":"        revisions \u003d _find_milestone_revisions(config, revision, desc)"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_e79df366","line":186,"in_reply_to":"9a1a9d01_516d7d2f","updated":"2015-09-29 13:39:16.000000000","message":"Done","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"}],"neutron/tests/unit/db/test_migration.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"822dba43135a86c7e89d3e0179f7af454e0ff813","unresolved":false,"context_lines":[{"line_number":659,"context_line":"                                          cli.EXPAND_BRANCH)"},{"line_number":660,"context_line":"        self.assertEqual(0, len(m))"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"        walk_mock.return_value \u003d c_revs + e_revs"},{"line_number":663,"context_line":"        m \u003d cli._find_milestone_revisions(self.configs[0], \u0027liberty\u0027, None)"},{"line_number":664,"context_line":"        self.assertEqual(2, len(m))"},{"line_number":665,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_6ce548da","line":662,"updated":"2015-09-29 13:23:48.000000000","message":"I think the case could be split into more granular checks.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"57a386819e8b3d18eed7d2d6434e7c2d5fdb2f9b","unresolved":false,"context_lines":[{"line_number":659,"context_line":"                                          cli.EXPAND_BRANCH)"},{"line_number":660,"context_line":"        self.assertEqual(0, len(m))"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"        walk_mock.return_value \u003d c_revs + e_revs"},{"line_number":663,"context_line":"        m \u003d cli._find_milestone_revisions(self.configs[0], \u0027liberty\u0027, None)"},{"line_number":664,"context_line":"        self.assertEqual(2, len(m))"},{"line_number":665,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_07c02729","line":662,"in_reply_to":"9a1a9d01_6ce548da","updated":"2015-09-29 13:39:16.000000000","message":"Done","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"822dba43135a86c7e89d3e0179f7af454e0ff813","unresolved":false,"context_lines":[{"line_number":665,"context_line":""},{"line_number":666,"context_line":"        m \u003d cli._find_milestone_revisions(self.configs[0], \u0027mitaka\u0027, None)"},{"line_number":667,"context_line":"        self.assertEqual(0, len(m))"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"class TestSafetyChecks(base.BaseTestCase):"},{"line_number":671,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_ecd95823","line":668,"updated":"2015-09-29 13:23:48.000000000","message":"I think we need a test for branchless migration chain.","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"57a386819e8b3d18eed7d2d6434e7c2d5fdb2f9b","unresolved":false,"context_lines":[{"line_number":665,"context_line":""},{"line_number":666,"context_line":"        m \u003d cli._find_milestone_revisions(self.configs[0], \u0027mitaka\u0027, None)"},{"line_number":667,"context_line":"        self.assertEqual(0, len(m))"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"class TestSafetyChecks(base.BaseTestCase):"},{"line_number":671,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_c7e46fe2","line":668,"in_reply_to":"9a1a9d01_ecd95823","updated":"2015-09-29 13:39:16.000000000","message":"Done","commit_id":"24a9101f28bfe2819da7cfeb414c4b48dfd30dc5"}]}
