)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6547,"name":"Andreas Jaeger","email":"jaegerandi@gmail.com","username":"jaegerandi"},"change_message_id":"37f5131774f234c45a7a7f0866b9d6c5d7700bc5","unresolved":false,"context_lines":[{"line_number":21,"context_line":"  - name: openstack/requirements"},{"line_number":22,"context_line":"    dest: ./reqs"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"zuul-cloner -m map.yaml --branch stable/liberty --project-revision \\"},{"line_number":25,"context_line":"openstack/neutron\u003da2Fhc2Rma2FzZHNkZjhkYXM4OWZhc25pb2FzODkK \\"},{"line_number":26,"context_line":"git://git.openstack.org openstack/neutron openstack/requirements"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"ba0121b8_85b9c8ce","line":24,"range":{"start_line":24,"start_character":32,"end_line":24,"end_character":46},"updated":"2016-03-31 18:22:12.000000000","message":"This is liberty","commit_id":"44ec27eca1028847e92ffe37e1ca01b587c342cb"},{"author":{"_account_id":6547,"name":"Andreas Jaeger","email":"jaegerandi@gmail.com","username":"jaegerandi"},"change_message_id":"37f5131774f234c45a7a7f0866b9d6c5d7700bc5","unresolved":false,"context_lines":[{"line_number":26,"context_line":"git://git.openstack.org openstack/neutron openstack/requirements"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"This results with openstack/neutron checked out at rev a2Fhc2 and"},{"line_number":29,"context_line":"openstack/requirements at \u0027heads/stable/kilo\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Change-Id: Ie9b03508a44f04adfbe2696cde136439ebffb9a6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"ba0121b8_45c4d03e","line":29,"range":{"start_line":29,"start_character":27,"end_line":29,"end_character":44},"updated":"2016-03-31 18:22:12.000000000","message":"I expect this to be liberty instead of kilo as well.","commit_id":"44ec27eca1028847e92ffe37e1ca01b587c342cb"},{"author":{"_account_id":12612,"name":"Sachi King","email":"nakato@nakato.io","username":"nakato"},"change_message_id":"d9a218a5797a90b88c0f4549bebff1e71ed30553","unresolved":false,"context_lines":[{"line_number":26,"context_line":"git://git.openstack.org openstack/neutron openstack/requirements"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"This results with openstack/neutron checked out at rev a2Fhc2 and"},{"line_number":29,"context_line":"openstack/requirements at \u0027heads/stable/kilo\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Change-Id: Ie9b03508a44f04adfbe2696cde136439ebffb9a6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"ba0121b8_eb716b0d","line":29,"range":{"start_line":29,"start_character":27,"end_line":29,"end_character":44},"in_reply_to":"ba0121b8_45c4d03e","updated":"2016-03-31 22:58:05.000000000","message":"Woops, that\u0027s what I get for not doing a literal copy-paste.\n\nI\u0027ll fix that up in the next commit.","commit_id":"44ec27eca1028847e92ffe37e1ca01b587c342cb"}],"tests/test_cloner.py":[{"author":{"_account_id":6039,"name":"Joni Harker","email":"code@gentlydownthe.net","username":"jesusaurus"},"change_message_id":"8049de8bc191d11e38171cd48503125a4dda76e7","unresolved":false,"context_lines":[{"line_number":567,"context_line":"        self.worker.release()"},{"line_number":568,"context_line":"        self.waitUntilSettled()"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    def test_post_checkout(self):"},{"line_number":571,"context_line":"        project \u003d \"org/project\""},{"line_number":572,"context_line":"        path \u003d os.path.join(self.upstream_root, project)"},{"line_number":573,"context_line":"        repo \u003d git.Repo(path)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_8324c560","line":570,"updated":"2016-05-02 21:56:34.000000000","message":"Can we expand this to make sure that cloning of other projects works as expected? This currently only clones the active project, but I would like to be sure that giving a revision for a separate project that is explicitly listed also checks out the specified revision.","commit_id":"10660348e2c73e00a79cdc3704448aa690c23fe8"},{"author":{"_account_id":12612,"name":"Sachi King","email":"nakato@nakato.io","username":"nakato"},"change_message_id":"65f93d86a7ee3770b36c0affb361d3e55a7a9767","unresolved":false,"context_lines":[{"line_number":567,"context_line":"        self.worker.release()"},{"line_number":568,"context_line":"        self.waitUntilSettled()"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    def test_post_checkout(self):"},{"line_number":571,"context_line":"        project \u003d \"org/project\""},{"line_number":572,"context_line":"        path \u003d os.path.join(self.upstream_root, project)"},{"line_number":573,"context_line":"        repo \u003d git.Repo(path)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_499be772","line":570,"in_reply_to":"1a122d0e_8324c560","updated":"2016-05-03 04:34:06.000000000","message":"Yea, fair enough, I\u0027ll work on adding a test for that.","commit_id":"10660348e2c73e00a79cdc3704448aa690c23fe8"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"1cdfbf3f3d1b1f180bc3616676bb4c4084c8cb11","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        repos \u003d self.getWorkspaceRepos([project])"},{"line_number":592,"context_line":"        cloned_sha \u003d repos[project].rev_parse(\u0027HEAD\u0027).hexsha"},{"line_number":593,"context_line":"        self.assertEqual(newRev, cloned_sha)"},{"line_number":594,"context_line":"        self.waitUntilSettled()"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def test_post_and_master_checkout(self):"},{"line_number":597,"context_line":"        project \u003d \"org/project1\""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_e9b1ac90","line":594,"updated":"2016-07-11 23:50:04.000000000","message":"We don\u0027t need to wait until settled here (there are no async processes happening in the background).","commit_id":"23d81beb01ebf1d01da6c485cff35ed2adff95d6"},{"author":{"_account_id":12612,"name":"Sachi King","email":"nakato@nakato.io","username":"nakato"},"change_message_id":"df59518f02ff440ddc8f71bfe16208413593671d","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        repos \u003d self.getWorkspaceRepos([project])"},{"line_number":592,"context_line":"        cloned_sha \u003d repos[project].rev_parse(\u0027HEAD\u0027).hexsha"},{"line_number":593,"context_line":"        self.assertEqual(newRev, cloned_sha)"},{"line_number":594,"context_line":"        self.waitUntilSettled()"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def test_post_and_master_checkout(self):"},{"line_number":597,"context_line":"        project \u003d \"org/project1\""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_fc14c344","line":594,"in_reply_to":"1aa78d24_e9b1ac90","updated":"2016-07-12 02:54:03.000000000","message":"Done","commit_id":"23d81beb01ebf1d01da6c485cff35ed2adff95d6"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"1cdfbf3f3d1b1f180bc3616676bb4c4084c8cb11","unresolved":false,"context_lines":[{"line_number":621,"context_line":"        self.assertEqual("},{"line_number":622,"context_line":"            repos[master_project].rev_parse(\u0027HEAD\u0027).hexsha,"},{"line_number":623,"context_line":"            repos[master_project].rev_parse(\u0027master\u0027).hexsha)"},{"line_number":624,"context_line":"        self.waitUntilSettled()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_c9ae702d","line":624,"updated":"2016-07-11 23:50:04.000000000","message":"Same.","commit_id":"23d81beb01ebf1d01da6c485cff35ed2adff95d6"},{"author":{"_account_id":12612,"name":"Sachi King","email":"nakato@nakato.io","username":"nakato"},"change_message_id":"df59518f02ff440ddc8f71bfe16208413593671d","unresolved":false,"context_lines":[{"line_number":621,"context_line":"        self.assertEqual("},{"line_number":622,"context_line":"            repos[master_project].rev_parse(\u0027HEAD\u0027).hexsha,"},{"line_number":623,"context_line":"            repos[master_project].rev_parse(\u0027master\u0027).hexsha)"},{"line_number":624,"context_line":"        self.waitUntilSettled()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_dc110754","line":624,"in_reply_to":"1aa78d24_c9ae702d","updated":"2016-07-12 02:54:03.000000000","message":"Done","commit_id":"23d81beb01ebf1d01da6c485cff35ed2adff95d6"}],"zuul/cmd/cloner.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"50139ab3d62e2e485365f433ee24f4028244880c","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                  \u0027times.\u0027)"},{"line_number":80,"context_line":"        )"},{"line_number":81,"context_line":"        project_env.add_argument("},{"line_number":82,"context_line":"            \u0027--project-revision\u0027, nargs\u003d1, action\u003d\u0027append\u0027,"},{"line_number":83,"context_line":"            metavar\u003d\u0027PROJECT\u003dREV\u0027,"},{"line_number":84,"context_line":"            help\u003d(\u0027request a project be checked out with a specific revision \u0027"},{"line_number":85,"context_line":"                  \u0027from the main tree with precedence over all other options\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_900ac988","line":82,"updated":"2016-04-20 02:27:40.000000000","message":"Here we allow a single project revision due to nargs. Below we attempt to interate over 1 or more project_revisions. Why not set nargs to * here to allow zero or more?","commit_id":"10660348e2c73e00a79cdc3704448aa690c23fe8"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"a9652cf915a42e188fa122ebabe59d676acc9ea7","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                  \u0027times.\u0027)"},{"line_number":80,"context_line":"        )"},{"line_number":81,"context_line":"        project_env.add_argument("},{"line_number":82,"context_line":"            \u0027--project-revision\u0027, nargs\u003d1, action\u003d\u0027append\u0027,"},{"line_number":83,"context_line":"            metavar\u003d\u0027PROJECT\u003dREV\u0027,"},{"line_number":84,"context_line":"            help\u003d(\u0027request a project be checked out with a specific revision \u0027"},{"line_number":85,"context_line":"                  \u0027from the main tree with precedence over all other options\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_30b2d594","line":82,"in_reply_to":"1a122d0e_900ac988","updated":"2016-04-20 02:36:51.000000000","message":"Upon further reading of argparse docs I realize the intent is that users would pass --project-revision multiple times. This is what the action\u003d\u0027append\u0027 achives. This is fine with me.","commit_id":"10660348e2c73e00a79cdc3704448aa690c23fe8"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"716fa03550bbf5f0e6f83ba96a842e0a4823edcf","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        project \u003d os.environ.get(\u0027ZUUL_PROJECT\u0027)"},{"line_number":139,"context_line":"        newrev \u003d os.environ.get(\u0027ZUUL_NEWREV\u0027)"},{"line_number":140,"context_line":"        if newrev and project:"},{"line_number":141,"context_line":"            project_revisions[project] \u003d newrev"},{"line_number":142,"context_line":"        cloner \u003d zuul.lib.cloner.Cloner("},{"line_number":143,"context_line":"            git_base_url\u003dself.args.git_base_url,"},{"line_number":144,"context_line":"            projects\u003dself.args.projects,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_57c6779a","line":141,"updated":"2016-05-20 16:52:06.000000000","message":"I think this logic should go into zuul/lib/cloner, so that zuul/cmd/cloner can be a thin layer on top that is only responsible for interfacing with the shell.  That makes the actual logic easier to test (the tests can pass in zuul_newrev and exercise this logic -- moreover, all the existing tests will exercise this logic too (and hopefully not trigger it).","commit_id":"add25a68248558bf610c45f8dfd0b11395d79ab0"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"e2dfe781a833ed1349bbdd8d47d44882c2fc2745","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        project \u003d os.environ.get(\u0027ZUUL_PROJECT\u0027)"},{"line_number":139,"context_line":"        newrev \u003d os.environ.get(\u0027ZUUL_NEWREV\u0027)"},{"line_number":140,"context_line":"        if newrev and project:"},{"line_number":141,"context_line":"            project_revisions[project] \u003d newrev"},{"line_number":142,"context_line":"        cloner \u003d zuul.lib.cloner.Cloner("},{"line_number":143,"context_line":"            git_base_url\u003dself.args.git_base_url,"},{"line_number":144,"context_line":"            projects\u003dself.args.projects,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_9ffab5bb","line":141,"updated":"2016-06-13 23:23:19.000000000","message":"The fact that they are in environment variables, or shell arguments, is just the method of transmission here.  Especially since project-revisions is not a concept that I think we should expose from the cloner, I think the cloner API should also not expose it.  This is all simplest to test and work with if lib.cloner does the work, and cmd.cloner just parses arguments for it.","commit_id":"add25a68248558bf610c45f8dfd0b11395d79ab0"},{"author":{"_account_id":12612,"name":"Sachi King","email":"nakato@nakato.io","username":"nakato"},"change_message_id":"fb95aef6cb2f356199854ab2e841bdac4889f68b","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        project \u003d os.environ.get(\u0027ZUUL_PROJECT\u0027)"},{"line_number":139,"context_line":"        newrev \u003d os.environ.get(\u0027ZUUL_NEWREV\u0027)"},{"line_number":140,"context_line":"        if newrev and project:"},{"line_number":141,"context_line":"            project_revisions[project] \u003d newrev"},{"line_number":142,"context_line":"        cloner \u003d zuul.lib.cloner.Cloner("},{"line_number":143,"context_line":"            git_base_url\u003dself.args.git_base_url,"},{"line_number":144,"context_line":"            projects\u003dself.args.projects,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_bec79794","line":141,"in_reply_to":"bab6814e_57c6779a","updated":"2016-05-24 07:55:41.000000000","message":"I disagree, I think this is best kept here.\n\nIt seems that these values are consequences of the shell and would move shell/caller logic into lib.cloner.  As well it would make adding multiple revision based checkouts in the future cumbersome requiring logic to be duplicated and additional logic being added in lib.cloner to decide what to do if it receives multiple values that could result in a revision_checkout.","commit_id":"add25a68248558bf610c45f8dfd0b11395d79ab0"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"1cdfbf3f3d1b1f180bc3616676bb4c4084c8cb11","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        if \u0027zuul_ref\u0027 in zuul_args and \u0027zuul_url\u0027 not in zuul_args:"},{"line_number":100,"context_line":"            parser.error(\"Specifying a Zuul ref requires a Zuul url. \""},{"line_number":101,"context_line":"                         \"Define Zuul arguments either via environment \""},{"line_number":102,"context_line":"                         \"variables or using options above.\")"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.args \u003d args"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_89b8e876","line":102,"updated":"2016-07-11 23:50:04.000000000","message":"We might want to put in a sanity check here to indicate that a ZUUL_NEWREV alse requires ZUUL_PROJECT.","commit_id":"23d81beb01ebf1d01da6c485cff35ed2adff95d6"},{"author":{"_account_id":12612,"name":"Sachi King","email":"nakato@nakato.io","username":"nakato"},"change_message_id":"df59518f02ff440ddc8f71bfe16208413593671d","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        if \u0027zuul_ref\u0027 in zuul_args and \u0027zuul_url\u0027 not in zuul_args:"},{"line_number":100,"context_line":"            parser.error(\"Specifying a Zuul ref requires a Zuul url. \""},{"line_number":101,"context_line":"                         \"Define Zuul arguments either via environment \""},{"line_number":102,"context_line":"                         \"variables or using options above.\")"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.args \u003d args"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_3c1beb74","line":102,"in_reply_to":"1aa78d24_89b8e876","updated":"2016-07-12 02:54:03.000000000","message":"Done","commit_id":"23d81beb01ebf1d01da6c485cff35ed2adff95d6"}],"zuul/lib/cloner.py":[{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"f43f8eb514f0c7d5cfadfca309fc664621c65698","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        # If this project has a rev specified for checkout, use it above all"},{"line_number":171,"context_line":"        # else then fall back to the other methods."},{"line_number":172,"context_line":"        # FIXME (Nakato): This should return a failure in the future as we"},{"line_number":173,"context_line":"        # should fail explicitly if we cant do what is asked of us."},{"line_number":174,"context_line":"        if indicated_revision:"},{"line_number":175,"context_line":"            self.log.info(\"Attempting to check out revision %s for\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a1b2928_90c42c41","line":172,"range":{"start_line":172,"start_character":46,"end_line":172,"end_character":69},"updated":"2016-04-11 03:17:55.000000000","message":"Why should we fail in the future and not now (or vice versa).","commit_id":"44ec27eca1028847e92ffe37e1ca01b587c342cb"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"0f0ec1bd6d86cec9816ceeb89e4733a7d5a844f1","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        # If this project has a rev specified for checkout, use it above all"},{"line_number":171,"context_line":"        # else then fall back to the other methods."},{"line_number":172,"context_line":"        # FIXME (Nakato): This should return a failure in the future as we"},{"line_number":173,"context_line":"        # should fail explicitly if we cant do what is asked of us."},{"line_number":174,"context_line":"        if indicated_revision:"},{"line_number":175,"context_line":"            self.log.info(\"Attempting to check out revision %s for\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a1b2928_708697ba","line":172,"range":{"start_line":172,"start_character":46,"end_line":172,"end_character":69},"in_reply_to":"7a1b2928_4b3f8525","updated":"2016-04-11 13:41:52.000000000","message":"So the rest of zuul cloner is opportunistic. If you look at the steps taken (above in the section you modified) zuul tries in preference for ways of getting a commit.\n\nThe reason it\u0027s opportunistic is that a project \"may\" have a certain ref. If it doesn\u0027t, that\u0027s actually expected and in which case we want to make sure we have the most correct branch.\n\nIn this case of specifying very precise commit sha\u0027s, it may be more correct to bail on a particular project. If the intended use is the post queue this is likely desirable.","commit_id":"44ec27eca1028847e92ffe37e1ca01b587c342cb"},{"author":{"_account_id":12612,"name":"Sachi King","email":"nakato@nakato.io","username":"nakato"},"change_message_id":"19a1d069f87b15adf6bbaa06b9773ad829067361","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        # If this project has a rev specified for checkout, use it above all"},{"line_number":171,"context_line":"        # else then fall back to the other methods."},{"line_number":172,"context_line":"        # FIXME (Nakato): This should return a failure in the future as we"},{"line_number":173,"context_line":"        # should fail explicitly if we cant do what is asked of us."},{"line_number":174,"context_line":"        if indicated_revision:"},{"line_number":175,"context_line":"            self.log.info(\"Attempting to check out revision %s for\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a1b2928_4b3f8525","line":172,"range":{"start_line":172,"start_character":46,"end_line":172,"end_character":69},"in_reply_to":"7a1b2928_90c42c41","updated":"2016-04-11 06:18:20.000000000","message":"I didn\u0027t implement any failure logic as it\u0027s contrary to how zuul_cloner is currently designed.  But to leave the topic momentary, I do think that should be tightened up across all clones instead of falling back till we hit master.\n\nThen again, I do think it would make since to implement the failure logic for this addition as when the code under indicated_revision is hit, we have received explicit instructions for what the user is expecting, we would be completely right to fail hard if we cannot check it out.\n\nWhat do think, should I go ahead and implement failing out?","commit_id":"44ec27eca1028847e92ffe37e1ca01b587c342cb"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"56397238a51d8800e4e24bb39bfe6277ce221ac8","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        \"\"\"Clone a repository for project at dest and apply a reference"},{"line_number":116,"context_line":"        suitable for testing. The reference lookup is attempted in this order:"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"         1) The indicated revision for specific project"},{"line_number":119,"context_line":"         2) Zuul reference for the indicated branch"},{"line_number":120,"context_line":"         3) Zuul reference for the master branch"},{"line_number":121,"context_line":"         4) The tip of the indicated branch"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_3195f2dd","line":118,"range":{"start_line":118,"start_character":0,"end_line":118,"end_character":55},"updated":"2016-04-19 04:32:43.000000000","message":"This implies that failing the indicated revision a clone should continue with the other steps/attempts.\n\nI\u0027m not sure which behaviour is more desirable (I think, raising is), but we should document it clearly.","commit_id":"7f24c249907ca243d9f09d7db9c0a986f5336a51"},{"author":{"_account_id":12612,"name":"Sachi King","email":"nakato@nakato.io","username":"nakato"},"change_message_id":"2d4c4659470d0f1cc169cbe11dd4467a8dfb942b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        \"\"\"Clone a repository for project at dest and apply a reference"},{"line_number":116,"context_line":"        suitable for testing. The reference lookup is attempted in this order:"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"         1) The indicated revision for specific project"},{"line_number":119,"context_line":"         2) Zuul reference for the indicated branch"},{"line_number":120,"context_line":"         3) Zuul reference for the master branch"},{"line_number":121,"context_line":"         4) The tip of the indicated branch"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_70abad75","line":118,"range":{"start_line":118,"start_character":0,"end_line":118,"end_character":55},"in_reply_to":"1a122d0e_3195f2dd","updated":"2016-04-20 02:24:52.000000000","message":"Added this above the \"indicated branch\" notes below, as I could not get in-line to feel right.","commit_id":"7f24c249907ca243d9f09d7db9c0a986f5336a51"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"716fa03550bbf5f0e6f83ba96a842e0a4823edcf","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.zuul_ref \u003d zuul_ref or \u0027\u0027"},{"line_number":46,"context_line":"        self.zuul_url \u003d zuul_url"},{"line_number":47,"context_line":"        self.project_branches \u003d project_branches or {}"},{"line_number":48,"context_line":"        self.project_revisions \u003d project_revisions or {}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        if clone_map_file:"},{"line_number":51,"context_line":"            self.readCloneMap(clone_map_file)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_17c86fa7","line":48,"updated":"2016-05-20 16:52:06.000000000","message":"I think the logic in zuul/cmd/cloner can move to this point, with the addition of a zuul_newrev argument.","commit_id":"add25a68248558bf610c45f8dfd0b11395d79ab0"},{"author":{"_account_id":12612,"name":"Sachi King","email":"nakato@nakato.io","username":"nakato"},"change_message_id":"fb95aef6cb2f356199854ab2e841bdac4889f68b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.zuul_ref \u003d zuul_ref or \u0027\u0027"},{"line_number":46,"context_line":"        self.zuul_url \u003d zuul_url"},{"line_number":47,"context_line":"        self.project_branches \u003d project_branches or {}"},{"line_number":48,"context_line":"        self.project_revisions \u003d project_revisions or {}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        if clone_map_file:"},{"line_number":51,"context_line":"            self.readCloneMap(clone_map_file)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_1e3d038f","line":48,"in_reply_to":"bab6814e_17c86fa7","updated":"2016-05-24 07:55:41.000000000","message":"See comment in zuul/cmd/cloner","commit_id":"add25a68248558bf610c45f8dfd0b11395d79ab0"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"716fa03550bbf5f0e6f83ba96a842e0a4823edcf","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                                       self.zuul_ref)"},{"line_number":179,"context_line":"        else:"},{"line_number":180,"context_line":"            fallback_zuul_ref \u003d None"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # If the user has requested an explicit revision to be checked out,"},{"line_number":183,"context_line":"        # we use it above all else, and if we cannot satisfy this requirement"},{"line_number":184,"context_line":"        # we raise an error and do not attempt to continue."}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_f7cccbbc","line":181,"updated":"2016-05-20 16:52:06.000000000","message":"Currenty, GGP performs a fetch of ZUUL_REF in this case.  It does not appear that we need it here -- I think that perhaps the remote update that the cloner performs typically ends up fetching the necessary commits in all the cases I can think of.  I am slightly worried about some case that I can\u0027t think of that would cause us not to have the commit locally.  (Maybe a tag on a commit that is not in a branch?  Yuck.)\n\nI feel like the safest thing would be to fetch ZUUL_REF before checking out the indicated revision.  However, I\u0027m willing to entertain that I\u0027m being paranoid and it\u0027s worth saving the network traffic to skip it for now.","commit_id":"add25a68248558bf610c45f8dfd0b11395d79ab0"},{"author":{"_account_id":12612,"name":"Sachi King","email":"nakato@nakato.io","username":"nakato"},"change_message_id":"fb95aef6cb2f356199854ab2e841bdac4889f68b","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                                       self.zuul_ref)"},{"line_number":179,"context_line":"        else:"},{"line_number":180,"context_line":"            fallback_zuul_ref \u003d None"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # If the user has requested an explicit revision to be checked out,"},{"line_number":183,"context_line":"        # we use it above all else, and if we cannot satisfy this requirement"},{"line_number":184,"context_line":"        # we raise an error and do not attempt to continue."}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_9c19bb7c","line":181,"in_reply_to":"bab6814e_97a8df21","updated":"2016-05-24 07:55:41.000000000","message":"Done","commit_id":"add25a68248558bf610c45f8dfd0b11395d79ab0"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"f9003d5452ee44c4ce17fcb493b06aa3be025806","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                                       self.zuul_ref)"},{"line_number":179,"context_line":"        else:"},{"line_number":180,"context_line":"            fallback_zuul_ref \u003d None"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # If the user has requested an explicit revision to be checked out,"},{"line_number":183,"context_line":"        # we use it above all else, and if we cannot satisfy this requirement"},{"line_number":184,"context_line":"        # we raise an error and do not attempt to continue."}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_97a8df21","line":181,"in_reply_to":"bab6814e_f7cccbbc","updated":"2016-05-20 17:05:09.000000000","message":"This is a good catch. I think we should address it now for two reasons. The first is debugging why this corner case causes a failure 2 years from now is going to be unfun for whoever ends up doing that. And second doing a fetch of an already fetched ref should be really quick so the cost is low here.","commit_id":"add25a68248558bf610c45f8dfd0b11395d79ab0"}]}
