{"thread":{"id":"46152","subject":"'pu' broken at t5304 tonight","startedAt":"2017-06-10T06:07:07Z","lastAt":"2017-06-12T18:04:05Z","messageCount":5,"participants":["Junio C Hamano","Kevin Daudt","Christian Couder","Brandon Williams"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"321881","messageId":"xmqq4lvo2x6i.fsf@gitster.mtv.corp.google.com","threadId":"46152","inReplyTo":null,"subject":"'pu' broken at t5304 tonight","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2017-06-10T06:07:01Z","receivedAt":"2017-06-10T06:07:07Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"I didn't check where it goes wrong.  Here is a list of suspects,\ntaken by\n\n    $ git shortlog --no-merges pu@{8.hours}..pu\n\ni.e. patches that weren't in pu before today's integration cycle.\n\nAndreas Heiduk (1):\n      doc: describe git svn init --ignore-refs\n\nBrandon Williams (32):\n      config: create config.h\n      config: remove git_config_iter\n      config: don't include config.h by default\n      config: don't implicitly use gitdir\n      setup: don't perform lazy initialization of repository state\n      environment: remove namespace_len variable\n      repository: introduce the repository object\n      environment: place key repository state in the_repository\n      environment: store worktree in the_repository\n      setup: add comment indicating a hack\n      config: read config from a repository object\n      repository: add index_state to struct repo\n      submodule-config: store the_submodule_cache in the_repository\n      submodule: add repo_read_gitmodules\n      submodule: convert is_submodule_initialized to work on a repository\n      convert: convert get_cached_convert_stats_ascii to take an index\n      convert: convert crlf_to_git to take an index\n      convert: convert convert_to_git_filter_fd to take an index\n      convert: convert convert_to_git to take an index\n      convert: convert renormalize_buffer to take an index\n      tree: convert read_tree to take an index parameter\n      ls-files: convert overlay_tree_on_cache to take an index\n      ls-files: convert write_eolinfo to take an index\n      ls-files: convert show_killed_files to take an index\n      ls-files: convert show_other_files to take an index\n      ls-files: convert show_ru_info to take an index\n      ls-files: convert ce_excluded to take an index\n      ls-files: convert prune_cache to take an index\n      ls-files: convert show_files to take an index\n      ls-files: factor out debug info into a function\n      ls-files: factor out tag calculation\n      ls-files: use repository object\n\nJeff King (1):\n      date: use localtime() for \"-local\" time formats\n\nJohannes Schindelin (8):\n      discover_git_directory(): avoid setting invalid git_dir\n      config: report correct line number upon error\n      help: use early config when autocorrecting aliases\n      read_early_config(): optionally return the worktree's top-level directory\n      t1308: relax the test verifying that empty alias values are disallowed\n      t7006: demonstrate a problem with aliases in subdirectories\n      alias_lookup(): optionally return top-level directory\n      Use the early config machinery to expand aliases\n\nJunio C Hamano (1):\n      ### match next\n\nPrathamesh Chavan (1):\n      dir: create function count_slashes\n\nSZEDER Gábor (5):\n      revision.h: turn rev_info.early_output back into an unsigned int\n      revision.c: stricter parsing of '--no-{min,max}-parents'\n      revision.c: stricter parsing of '--early-output'\n      revision.c: use skip_prefix() in handle_revision_opt()\n      revision.c: use skip_prefix() in handle_revision_pseudo_opt()\n\nStefan Beller (1):\n      t4005: modernize style and drop hard coded sha1\n\n"},{"id":"321916","messageId":"20170610124836.GD27719@alpha.vpn.ikke.info","threadId":"46152","inReplyTo":"xmqq4lvo2x6i.fsf@gitster.mtv.corp.google.com","subject":"Re: 'pu' broken at t5304 tonight","fromName":"Kevin Daudt","fromEmail":"me@ikke.info","sentAt":"2017-06-10T12:48:36Z","receivedAt":"2017-06-10T12:48:45Z","isPatch":false,"sender":{"key":"me@ikke.info","avatar":"https://avatars.githubusercontent.com/u/135698?v=4"},"body":"On Sat, Jun 10, 2017 at 03:07:01PM +0900, Junio C Hamano wrote:\n> I didn't check where it goes wrong.  Here is a list of suspects,\n> taken by\n> \n>     $ git shortlog --no-merges pu@{8.hours}..pu\n> \n> i.e. patches that weren't in pu before today's integration cycle.\n> \n> Andreas Heiduk (1):\n>       doc: describe git svn init --ignore-refs\n> \n> Brandon Williams (32):\n>       config: create config.h\n>       config: remove git_config_iter\n>       config: don't include config.h by default\n>       config: don't implicitly use gitdir\n>       setup: don't perform lazy initialization of repository state\n>       environment: remove namespace_len variable\n>       repository: introduce the repository object\n>       environment: place key repository state in the_repository\n>       environment: store worktree in the_repository\n>       setup: add comment indicating a hack\n>       config: read config from a repository object\n>       repository: add index_state to struct repo\n>       submodule-config: store the_submodule_cache in the_repository\n>       submodule: add repo_read_gitmodules\n>       submodule: convert is_submodule_initialized to work on a repository\n>       convert: convert get_cached_convert_stats_ascii to take an index\n>       convert: convert crlf_to_git to take an index\n>       convert: convert convert_to_git_filter_fd to take an index\n>       convert: convert convert_to_git to take an index\n>       convert: convert renormalize_buffer to take an index\n>       tree: convert read_tree to take an index parameter\n>       ls-files: convert overlay_tree_on_cache to take an index\n>       ls-files: convert write_eolinfo to take an index\n>       ls-files: convert show_killed_files to take an index\n>       ls-files: convert show_other_files to take an index\n>       ls-files: convert show_ru_info to take an index\n>       ls-files: convert ce_excluded to take an index\n>       ls-files: convert prune_cache to take an index\n>       ls-files: convert show_files to take an index\n>       ls-files: factor out debug info into a function\n>       ls-files: factor out tag calculation\n>       ls-files: use repository object\n> \n> Jeff King (1):\n>       date: use localtime() for \"-local\" time formats\n> \n> Johannes Schindelin (8):\n>       discover_git_directory(): avoid setting invalid git_dir\n>       config: report correct line number upon error\n>       help: use early config when autocorrecting aliases\n>       read_early_config(): optionally return the worktree's top-level directory\n>       t1308: relax the test verifying that empty alias values are disallowed\n>       t7006: demonstrate a problem with aliases in subdirectories\n>       alias_lookup(): optionally return top-level directory\n>       Use the early config machinery to expand aliases\n> \n> Junio C Hamano (1):\n>       ### match next\n> \n> Prathamesh Chavan (1):\n>       dir: create function count_slashes\n> \n> SZEDER Gábor (5):\n>       revision.h: turn rev_info.early_output back into an unsigned int\n>       revision.c: stricter parsing of '--no-{min,max}-parents'\n>       revision.c: stricter parsing of '--early-output'\n>       revision.c: use skip_prefix() in handle_revision_opt()\n>       revision.c: use skip_prefix() in handle_revision_pseudo_opt()\n> \n> Stefan Beller (1):\n>       t4005: modernize style and drop hard coded sha1\n> \n\nFor me, this bisects to the latest merge:\n\n2047eebd3 (Merge branch 'bw/repo-object' into pu, 2017-06-10), but\nneither of the parent of the merge break this test, so it looks like\nit's because of an interaction between the repo-object topic and another\ntopic.\n"},{"id":"321931","messageId":"20170610190510.GE27719@alpha.vpn.ikke.info","threadId":"46152","inReplyTo":"20170610124836.GD27719@alpha.vpn.ikke.info","subject":"Re: 'pu' broken at t5304 tonight","fromName":"Kevin Daudt","fromEmail":"me@ikke.info","sentAt":"2017-06-10T19:05:10Z","receivedAt":"2017-06-10T19:05:17Z","isPatch":false,"sender":{"key":"me@ikke.info","avatar":"https://avatars.githubusercontent.com/u/135698?v=4"},"body":"On Sat, Jun 10, 2017 at 02:48:36PM +0200, Kevin Daudt wrote:\n> On Sat, Jun 10, 2017 at 03:07:01PM +0900, Junio C Hamano wrote:\n> > I didn't check where it goes wrong.  Here is a list of suspects,\n> > taken by\n> > \n> >     $ git shortlog --no-merges pu@{8.hours}..pu\n> > \n> > i.e. patches that weren't in pu before today's integration cycle.\n> > \n> > Andreas Heiduk (1):\n> >       doc: describe git svn init --ignore-refs\n> > \n> > Brandon Williams (32):\n> >       config: create config.h\n> >       config: remove git_config_iter\n> >       config: don't include config.h by default\n> >       config: don't implicitly use gitdir\n> >       setup: don't perform lazy initialization of repository state\n> >       environment: remove namespace_len variable\n> >       repository: introduce the repository object\n> >       environment: place key repository state in the_repository\n> >       environment: store worktree in the_repository\n> >       setup: add comment indicating a hack\n> >       config: read config from a repository object\n> >       repository: add index_state to struct repo\n> >       submodule-config: store the_submodule_cache in the_repository\n> >       submodule: add repo_read_gitmodules\n> >       submodule: convert is_submodule_initialized to work on a repository\n> >       convert: convert get_cached_convert_stats_ascii to take an index\n> >       convert: convert crlf_to_git to take an index\n> >       convert: convert convert_to_git_filter_fd to take an index\n> >       convert: convert convert_to_git to take an index\n> >       convert: convert renormalize_buffer to take an index\n> >       tree: convert read_tree to take an index parameter\n> >       ls-files: convert overlay_tree_on_cache to take an index\n> >       ls-files: convert write_eolinfo to take an index\n> >       ls-files: convert show_killed_files to take an index\n> >       ls-files: convert show_other_files to take an index\n> >       ls-files: convert show_ru_info to take an index\n> >       ls-files: convert ce_excluded to take an index\n> >       ls-files: convert prune_cache to take an index\n> >       ls-files: convert show_files to take an index\n> >       ls-files: factor out debug info into a function\n> >       ls-files: factor out tag calculation\n> >       ls-files: use repository object\n> > \n> > Jeff King (1):\n> >       date: use localtime() for \"-local\" time formats\n> > \n> > Johannes Schindelin (8):\n> >       discover_git_directory(): avoid setting invalid git_dir\n> >       config: report correct line number upon error\n> >       help: use early config when autocorrecting aliases\n> >       read_early_config(): optionally return the worktree's top-level directory\n> >       t1308: relax the test verifying that empty alias values are disallowed\n> >       t7006: demonstrate a problem with aliases in subdirectories\n> >       alias_lookup(): optionally return top-level directory\n> >       Use the early config machinery to expand aliases\n> > \n> > Junio C Hamano (1):\n> >       ### match next\n> > \n> > Prathamesh Chavan (1):\n> >       dir: create function count_slashes\n> > \n> > SZEDER Gábor (5):\n> >       revision.h: turn rev_info.early_output back into an unsigned int\n> >       revision.c: stricter parsing of '--no-{min,max}-parents'\n> >       revision.c: stricter parsing of '--early-output'\n> >       revision.c: use skip_prefix() in handle_revision_opt()\n> >       revision.c: use skip_prefix() in handle_revision_pseudo_opt()\n> > \n> > Stefan Beller (1):\n> >       t4005: modernize style and drop hard coded sha1\n> > \n> \n> For me, this bisects to the latest merge:\n> \n> 2047eebd3 (Merge branch 'bw/repo-object' into pu, 2017-06-10), but\n> neither of the parent of the merge break this test, so it looks like\n> it's because of an interaction between the repo-object topic and another\n> topic.\n\nMerging the repo-object with different other topic branches reveals this\ntopic to cause the bad interaction:\n\nb56c91004 (Merge branch 'nd/prune-in-worktree' into pu, 2017-06-10)\n\nStill investigating why it happens.\n"},{"id":"321934","messageId":"CAP8UFD0nDaBCiWiho7zJtUZ3MpgPY97NQ0AXnGq7parQBi=sMw@mail.gmail.com","threadId":"46152","inReplyTo":"20170610190510.GE27719@alpha.vpn.ikke.info","subject":"Re: 'pu' broken at t5304 tonight","fromName":"Christian Couder","fromEmail":"christian.couder@gmail.com","sentAt":"2017-06-11T04:13:43Z","receivedAt":"2017-06-11T04:13:50Z","isPatch":false,"sender":{"key":"christian.couder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/208954?v=4"},"body":"On Sat, Jun 10, 2017 at 9:05 PM, Kevin Daudt <me@ikke.info> wrote:\n> On Sat, Jun 10, 2017 at 02:48:36PM +0200, Kevin Daudt wrote:\n\n>> For me, this bisects to the latest merge:\n>>\n>> 2047eebd3 (Merge branch 'bw/repo-object' into pu, 2017-06-10), but\n>> neither of the parent of the merge break this test, so it looks like\n>> it's because of an interaction between the repo-object topic and another\n>> topic.\n>\n> Merging the repo-object with different other topic branches reveals this\n> topic to cause the bad interaction:\n>\n> b56c91004 (Merge branch 'nd/prune-in-worktree' into pu, 2017-06-10)\n>\n> Still investigating why it happens.\n\nYeah, 9570b25a97 (revision.c: --indexed-objects add objects from all\nworktrees, 2017-04-19) adds the following test to t5304-prune.sh but\nthis fails if nd/prune-in-worktree is rebased on top of\nbw/repo-object:\n\ntest_expect_success 'prune: handle index in multiple worktrees' '\n       git worktree add second-worktree &&\n       echo \"new blob for second-worktree\" >second-worktree/blob &&\n       git -C second-worktree add blob &&\n       git prune --expire=now &&\n       git -C second-worktree show :blob >actual &&\n       test_cmp second-worktree/blob actual\n'\n"},{"id":"321974","messageId":"20170612180357.GA154599@google.com","threadId":"46152","inReplyTo":"CAP8UFD0nDaBCiWiho7zJtUZ3MpgPY97NQ0AXnGq7parQBi=sMw@mail.gmail.com","subject":"Re: 'pu' broken at t5304 tonight","fromName":"Brandon Williams","fromEmail":"bmwill@google.com","sentAt":"2017-06-12T18:03:57Z","receivedAt":"2017-06-12T18:04:05Z","isPatch":false,"sender":{"key":"bwilliams.eng@gmail.com","avatar":null},"body":"On 06/11, Christian Couder wrote:\n> On Sat, Jun 10, 2017 at 9:05 PM, Kevin Daudt <me@ikke.info> wrote:\n> > On Sat, Jun 10, 2017 at 02:48:36PM +0200, Kevin Daudt wrote:\n> \n> >> For me, this bisects to the latest merge:\n> >>\n> >> 2047eebd3 (Merge branch 'bw/repo-object' into pu, 2017-06-10), but\n> >> neither of the parent of the merge break this test, so it looks like\n> >> it's because of an interaction between the repo-object topic and another\n> >> topic.\n> >\n> > Merging the repo-object with different other topic branches reveals this\n> > topic to cause the bad interaction:\n> >\n> > b56c91004 (Merge branch 'nd/prune-in-worktree' into pu, 2017-06-10)\n> >\n> > Still investigating why it happens.\n> \n> Yeah, 9570b25a97 (revision.c: --indexed-objects add objects from all\n> worktrees, 2017-04-19) adds the following test to t5304-prune.sh but\n> this fails if nd/prune-in-worktree is rebased on top of\n> bw/repo-object:\n> \n> test_expect_success 'prune: handle index in multiple worktrees' '\n>        git worktree add second-worktree &&\n>        echo \"new blob for second-worktree\" >second-worktree/blob &&\n>        git -C second-worktree add blob &&\n>        git prune --expire=now &&\n>        git -C second-worktree show :blob >actual &&\n>        test_cmp second-worktree/blob actual\n> '\n\nI think I discovered what is going on here (and its mostly my fault :D).\n\n(e7a6a3b15 revision.c: --indexed-objects add objects from all worktrees)\nqueries each worktree's index to add object which are pending in the\nper-worktree index's.  To do this is uses 'worktree_git_path' in order\nto construct a path to the worktree's index file.  My series introduced\na change to how 'adjust_git_path' functioned, instead of checking if the\nindex file came from the environment before replacing with the result of\n'get_index_file()', i change it to unconditionally do this replacing\nwhich breaks the ability to get a path to a worktree's index.\n\nSo this breakage is definitely my fault, but you would still run into\nthis exact same issue if you had set 'GIT_INDEX_FILE' as no worktree's\nwould be able to find their index files as they would be overridden by\nthe envvar.\n\n-- \nBrandon Williams\n"}]}