)]}'
{"id":"openstack%2Fdiskimage-builder~324811","triplet_id":"openstack%2Fdiskimage-builder~master~I0af65298bae6cc9a4e6f5a664e3ffc054cc28e87","project":"openstack/diskimage-builder","branch":"master","topic":"block-device/refactor/A100-add-exit-phase","hashtags":[],"change_id":"I0af65298bae6cc9a4e6f5a664e3ffc054cc28e87","subject":"Introduce `exit` phase","status":"ABANDONED","created":"2016-06-02 20:52:47.000000000","updated":"2017-01-14 20:11:26.000000000","total_comment_count":14,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"4c7a7e124beda4bb33ef2fdcdf32f903c8905c3e","_number":324811,"virtual_id_number":324811,"owner":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"all":[{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},{"date":"2016-07-28 16:43:30.000000000","_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},{"value":1,"date":"2016-06-07 05:57:55.000000000","_account_id":3,"name":"Jenkins","username":"jenkins"},{"date":"2016-06-08 19:30:19.000000000","_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":1,"default_value":0,"optional":true},"Code-Review":{"disliked":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":3,"name":"Jenkins","username":"jenkins"},{"value":-1,"date":"2016-06-16 20:38:12.000000000","permitted_voting_range":{"min":-1,"max":1},"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},{"value":-1,"date":"2016-06-07 23:45:24.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","value":-1,"default_value":0,"optional":true},"Workflow":{"rejected":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"all":[{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},{"_account_id":3,"name":"Jenkins","username":"jenkins"},{"value":-1,"date":"2016-06-16 20:38:12.000000000","permitted_voting_range":{"min":-1,"max":0},"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":3,"name":"Jenkins","username":"jenkins"},{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2016-06-03 08:33:51.000000000","updated_by":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"reviewer":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"state":"REVIEWER"},{"updated":"2016-06-07 05:57:55.000000000","updated_by":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"reviewer":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"state":"REVIEWER"},{"updated":"2016-06-07 23:45:24.000000000","updated_by":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"reviewer":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"state":"REVIEWER"},{"updated":"2016-07-28 16:43:30.000000000","updated_by":{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},"reviewer":{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},"state":"REVIEWER"}],"messages":[{"id":"3cee63dd6f10c806328e8ccd23aa2912a90827a0","author":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"date":"2016-06-02 20:52:47.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"9a11f4645c78eb6b2f7f7b0eaf8986e207033463","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2016-06-02 21:30:41.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-diskimage-builder-docs http://docs-draft.openstack.org/11/324811/1/check/gate-diskimage-builder-docs/4b886a2//doc/build/html/ : SUCCESS in 3m 22s\n- gate-diskimage-builder-pep8 http://logs.openstack.org/11/324811/1/check/gate-diskimage-builder-pep8/746bd97/ : SUCCESS in 2m 30s\n- gate-diskimage-builder-python27 http://logs.openstack.org/11/324811/1/check/gate-diskimage-builder-python27/eb350b7/ : SUCCESS in 2m 04s\n- gate-diskimage-builder-python34 http://logs.openstack.org/11/324811/1/check/gate-diskimage-builder-python34/d83cc6e/ : SUCCESS in 2m 13s\n- gate-dib-dsvm-functests-ubuntu-trusty http://logs.openstack.org/11/324811/1/check/gate-dib-dsvm-functests-ubuntu-trusty/982f8ec/ : SUCCESS in 21m 22s\n- gate-dib-dsvm-functests-centos-7 http://logs.openstack.org/11/324811/1/check/gate-dib-dsvm-functests-centos-7/101ead9/ : SUCCESS in 18m 42s\n- gate-dib-dsvm-functests-ubuntu-trusty-extras-nv http://logs.openstack.org/11/324811/1/check/gate-dib-dsvm-functests-ubuntu-trusty-extras-nv/f9f6976/ : SUCCESS in 11m 25s (non-voting)\n- gate-dib-dsvm-functests-centos-7-extras-nv http://logs.openstack.org/11/324811/1/check/gate-dib-dsvm-functests-centos-7-extras-nv/57665cb/ : SUCCESS in 14m 49s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"7b8c393c0ad3f87f19c2987756aab4fc0907408a","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2016-06-02 22:54:10.000000000","message":"Patch Set 1:\n\nBuild succeeded (check-tripleo pipeline).\n\n- gate-tripleo-ci-f22-nonha http://logs.openstack.org/11/324811/1/check-tripleo/gate-tripleo-ci-f22-nonha/73f49e5/ : SUCCESS in 1h 32m 03s","accounts_in_message":[],"_revision_number":1},{"id":"3819fe47ccb43eb3c830fa0ac319b4725ccd4988","author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"date":"2016-06-03 08:33:51.000000000","message":"Patch Set 1: Code-Review+1","accounts_in_message":[],"_revision_number":1},{"id":"3a87067f747a8f6675cb4cc9bb3037909829bf70","author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"date":"2016-06-06 00:29:25.000000000","message":"Patch Set 1: Code-Review-1\n\n(5 comments)\n\nSo some minor nits on the documentation; see inline\n\nThe bigger question -- are we not better off having elements doing \"trap EXIT\" calls themselves to make sure they clean-up?  that seems to have the advantage of having error handling localised","accounts_in_message":[],"_revision_number":1},{"id":"27dd5093046dc1c930f6ba8cc4bf7878c60a0b8b","author":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"date":"2016-06-07 05:31:09.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"c75e8ed6835f092f927b7ab037ef76ff50b70f90","author":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"date":"2016-06-07 05:48:47.000000000","message":"Patch Set 1:\n\n(5 comments)\n\nThe local \u0027trap ... EXIT\u0027 does not work, because the resources must remain when a script of a phase exists - but must be cleaned up later.\nExample: an element in one phase mounts a disk for further use by other elements; a local \u0027trap ... EXIT\u0027 might umount the disk at the end of the script - which is not what is needed. Instead during a later phase (exactly the \u0027exit\u0027 phase) another script of the element can umount the disk.","accounts_in_message":[],"_revision_number":1},{"id":"42e1a88a4a4338d585f722e9cc4cf505fb0dfea4","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2016-06-07 05:57:55.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-diskimage-builder-docs http://docs-draft.openstack.org/11/324811/2/check/gate-diskimage-builder-docs/55a83ac//doc/build/html/ : SUCCESS in 2m 38s\n- gate-diskimage-builder-pep8 http://logs.openstack.org/11/324811/2/check/gate-diskimage-builder-pep8/80abdc6/ : SUCCESS in 2m 14s\n- gate-diskimage-builder-python27 http://logs.openstack.org/11/324811/2/check/gate-diskimage-builder-python27/520891d/ : SUCCESS in 2m 00s\n- gate-diskimage-builder-python34 http://logs.openstack.org/11/324811/2/check/gate-diskimage-builder-python34/9abdf8c/ : SUCCESS in 2m 36s\n- gate-dib-dsvm-functests-ubuntu-trusty http://logs.openstack.org/11/324811/2/check/gate-dib-dsvm-functests-ubuntu-trusty/22c4e8e/ : SUCCESS in 23m 08s\n- gate-dib-dsvm-functests-centos-7 http://logs.openstack.org/11/324811/2/check/gate-dib-dsvm-functests-centos-7/01e41d0/ : SUCCESS in 24m 15s\n- gate-dib-dsvm-functests-ubuntu-trusty-extras-nv http://logs.openstack.org/11/324811/2/check/gate-dib-dsvm-functests-ubuntu-trusty-extras-nv/d66aec2/ : SUCCESS in 6m 25s (non-voting)\n- gate-dib-dsvm-functests-centos-7-extras-nv http://logs.openstack.org/11/324811/2/check/gate-dib-dsvm-functests-centos-7-extras-nv/09db1e2/ : SUCCESS in 5m 26s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"0cfdac60ae963d7e573e5cedeeb90e6e945a5b04","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2016-06-07 06:01:44.000000000","message":"Patch Set 2:\n\nBuild failed (check-tripleo pipeline).  For information on how to proceed, see http://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- gate-tripleo-ci-centos-7-nonha http://logs.openstack.org/11/324811/2/check-tripleo/gate-tripleo-ci-centos-7-nonha/aa0178a/ : FAILURE in 30m 14s","accounts_in_message":[],"_revision_number":2},{"id":"d0cc3bf71ec3c666a7288c7508642dd2176a09a5","author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"date":"2016-06-07 23:45:24.000000000","message":"Patch Set 2: Code-Review-1\n\n(2 comments)\n\nJust one final nit/comment after a re-read, otherwise LGTM\n\nSorry to go over this a bit ... but once we add a phase it\u0027s there forever, we\u0027ll never get rid of it :)\n\nI\u0027ve convinced myself this is usefully differentiated from cleanup.d by looking at what we do there.  For example, clearing out ssh keys or cleaning package meta-data are good things to do in a cleanup.d phase, as they are clearly related to the successful operation of previous phases.  Although we *could* just make cleanup.d be a finaliser and always run like this exit phase, I feel there\u0027s enough distinction there to keep them as separate phases.","accounts_in_message":[],"_revision_number":2},{"id":"be1da6315124b6c3f076177c7f2b07302fed5b8b","author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"date":"2016-06-07 23:47:35.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"635a8ec37f4b06ec0be2d2e46538269b41ca11fd","author":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"date":"2016-06-08 19:30:19.000000000","message":"Patch Set 2:\n\nAfter reading your comments I\u0027m not that convinced any more about a single exit phase.\nI tried to get some structural picture about what is allocated where and what has to be cleaned up when and identified three different cleanup phases?!?\n\nI outlined my thoughts but came to no conclusion [1].  Would it be possible to help me out there what I got wrong?\n\n[1] https://etherpad.openstack.org/p/AeAJRQn1j6","accounts_in_message":[],"_revision_number":2},{"id":"0bc1b8b1c769bfa0baed5533279baf916b3ab11b","author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"date":"2016-06-09 04:37:42.000000000","message":"Patch Set 2:\n\nI\u0027m going to have to think about this ... but my first thought is that your (H) phase ... why does it matter if that comes later in (J)?  i guess it\u0027s just a safety thing that the image is unmounted so can\u0027t change?","accounts_in_message":[],"_revision_number":2},{"id":"cd131c67d2cc08864dc27e0da4227a17ee324a22","author":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"date":"2016-06-09 05:41:33.000000000","message":"Patch Set 2:\n\nI think I found a solution:\nInstead of having static cleanup phases, use a dynamic approach.\nEach time a resource is allocated a function is called that cleans up the resource later on, like:\n\n   TMP_BUILD_DIR\u003d$(mktemp ...)\n   register_cleanup FINAL_CLEANUP \"rm -fr ${TMP_BUILD_DIR}\"\n\nor\n\n   mount ....\n   register_cleanup DETACH_IMAGE \"umount ...\"\n\nCleanups will run for each phase in reverse order as registered.  When an error occurs, the registered cleanups can be used to exactly cleanup the resources that were allocated. (I like this approach, because when allocating a resource you directly also define how and when to free it - no spread knowledge.)\nBased on the etherpad outline, I\u0027d currently use three \u0027logical\u0027 cleanup phases:\no ROOTFS_CLEANUP\n  This can maybe in long-term replace the cleanup.d\no DETACH_IMAGE\no FINAL_CLEANUP\n\n\nTo your question: The file-systems must be unmounted before the image can be used. IMHO it is more than a safety thing: If a file system is not unmounted, parts might be not written to disk (image).","accounts_in_message":[],"_revision_number":2},{"id":"0525c84b8993b76640d680a71828ff354d370142","author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"date":"2016-06-09 06:04:08.000000000","message":"Patch Set 2:\n\nhmm, on a practical note, writing bash within \"\"\u0027s as arguments to functions gets pretty messy pretty quickly; it\u0027s ok for a one-liner but when you start doing loops and using variables...\n\nalso, how do does the cleanup run them?  are you suggesting like writing them out to a temporary script file that then gets run in cleanup?","accounts_in_message":[],"_revision_number":2},{"id":"b17570d5b53e70f1814e50969805c1a934e2231c","author":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"date":"2016-06-09 19:38:40.000000000","message":"Patch Set 2:\n\nGive me another try...\n\nYou are right with your remarks: it\u0027s still not that easy and straight\nforward.  Because there is no other way of passing things around with\ndib-run-parts, temporarily files might be a (bad?) solution here. Also\nthe remark about passing everything as a one liner is valid.\n\nLet me try to rephrase things into another paradigm: OO.\nWhen we interpret each element as a class, the environment.d can be\nseen as the default parameters of the constructor and each phase as a\nmethod call. The \u0027exit\u0027 phase could be interpreted as the destructor.\n\nIn this case an element allocating resources needs to store the\ninternal state of the object and later read it back.  (Like s11n and\ndes11n.)\nI.e. for using the exit phase in a sensible way, there is the need for\n(maybe generic?) write_state() and read_state() functions.\n(Implementation possibility: Files in the file system that must be\naccessible from outside and inside the chroot.)\n\nSounds better to me - until I\u0027ll read your next comment ;-)\n\n\nOne difficulty might be, that the disk-image-create main itself\nignores the OO approach - maybe (on very long term) extract the\nfunctionality to a \u0027main\u0027 element and the disk-image-create script\nonly call elements and itself \u0027does\u0027 nothing.\n\n\n[If we\u0027ll finally come to a conclusion, I\u0027d love to put the essence of\nthis discussion in a small doc file.]","accounts_in_message":[],"_revision_number":2},{"id":"a629f5c8deda09444972588946b60953cee301d2","author":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"date":"2016-06-16 20:38:12.000000000","message":"Patch Set 2: Code-Review-1 Workflow-1\n\nI\u0027ll set this to WIP, because when the block-image part gets integral part of dib itself, this phase is (currently) not needed.\n\nsee\nhttps://review.openstack.org/319591","accounts_in_message":[],"_revision_number":2},{"id":"5c293ad57cdf93ea0234cc50f86c387b8e37e646","author":{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},"date":"2016-07-28 16:43:30.000000000","message":"Patch Set 2:\n\n(1 comment)","accounts_in_message":[],"_revision_number":2},{"id":"49473ae1261edcc1a8e5f2e92f136b1713bd775d","author":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"date":"2017-01-14 20:11:16.000000000","message":"Patch Set 2:\n\nDue to some restructuring, this is not needed any more for the block-device handling.","accounts_in_message":[],"_revision_number":2},{"id":"825fd6e8efc2a53e01041e64e66aec71c8c95424","author":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"date":"2017-01-14 20:11:26.000000000","message":"Abandoned","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"2e6958b4ff0ab171dc3851f0779d67164761866a","revisions":{"a575bd07c27a7aa096725894aa4ac27bffb6ac4f":{"kind":"REWORK","_number":1,"created":"2016-06-02 20:52:47.000000000","uploader":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"ref":"refs/changes/11/324811/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/diskimage-builder","ref":"refs/changes/11/324811/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/diskimage-builder refs/changes/11/324811/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/diskimage-builder refs/changes/11/324811/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/diskimage-builder refs/changes/11/324811/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/diskimage-builder refs/changes/11/324811/1"}}},"commit":{"parents":[{"commit":"38dcce0fc4c171c2ce6bb1785294c4d441768200","subject":"Merge \"Fix variable unbound error while REPOREF\u003d\"*\"\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/diskimage-builder/commit/38dcce0fc4c171c2ce6bb1785294c4d441768200"}]}],"author":{"name":"Andreas Florath","email":"andreas@florath.net","date":"2016-06-02 19:00:15.000000000","tz":120},"committer":{"name":"Andreas Florath","email":"andreas@florath.net","date":"2016-06-02 20:16:28.000000000","tz":120},"subject":"Introduce `exit` phase","message":"Introduce `exit` phase\n\nFor the upcoming and new block device handling there needs to be a way\nof freeing resources that were allocated in an earlier phase.\n\nThis patch introduces the new phase and a adapts the documentation.\n\nChange-Id: I0af65298bae6cc9a4e6f5a664e3ffc054cc28e87\nSigned-off-by: Andreas Florath \u003candreas@florath.net\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/diskimage-builder/commit/a575bd07c27a7aa096725894aa4ac27bffb6ac4f"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/diskimage-builder/commit/a575bd07c27a7aa096725894aa4ac27bffb6ac4f"}]},"parents_data":[{"branch_name":"refs/heads/master","commit_id":"38dcce0fc4c171c2ce6bb1785294c4d441768200","is_merged_in_target_branch":true}],"branch":"refs/heads/master"},"2e6958b4ff0ab171dc3851f0779d67164761866a":{"kind":"REWORK","_number":2,"created":"2016-06-07 05:31:09.000000000","uploader":{"_account_id":21741,"name":"Andreas Florath","email":"andreas@florath.net","username":"florath"},"ref":"refs/changes/11/324811/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/diskimage-builder","ref":"refs/changes/11/324811/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/diskimage-builder refs/changes/11/324811/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/diskimage-builder refs/changes/11/324811/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/diskimage-builder refs/changes/11/324811/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/diskimage-builder refs/changes/11/324811/2"}}},"commit":{"parents":[{"commit":"c621c5cc82b0eb57f945f340a609b4daa7bc9cef","subject":"Merge \"Release notes for 1.17.0\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/diskimage-builder/commit/c621c5cc82b0eb57f945f340a609b4daa7bc9cef"}]}],"author":{"name":"Andreas Florath","email":"andreas@florath.net","date":"2016-06-02 19:00:15.000000000","tz":120},"committer":{"name":"Andreas Florath","email":"andreas@florath.net","date":"2016-06-07 05:30:42.000000000","tz":120},"subject":"Introduce `exit` phase","message":"Introduce `exit` phase\n\nFor the upcoming and new block device handling there needs to be a way\nof freeing resources that were allocated in an earlier phase.\n\nThis patch introduces the new phase and a adapts the documentation.\n\nChange-Id: I0af65298bae6cc9a4e6f5a664e3ffc054cc28e87\nSigned-off-by: Andreas Florath \u003candreas@florath.net\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/diskimage-builder/commit/2e6958b4ff0ab171dc3851f0779d67164761866a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/diskimage-builder/commit/2e6958b4ff0ab171dc3851f0779d67164761866a"}]},"parents_data":[{"branch_name":"refs/heads/master","commit_id":"c621c5cc82b0eb57f945f340a609b4daa7bc9cef","is_merged_in_target_branch":true}],"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[]}
