{"thread":{"id":"46079","subject":"bug: `git log --grep ... --invert-grep --author=...` negates / ignores --author","startedAt":"2017-05-31T15:45:38Z","lastAt":"2017-06-01T21:38:17Z","messageCount":7,"participants":["Anthony Sottile","Ævar Arnfjörð Bjarmason","Jeff King","Junio C Hamano"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"321140","messageId":"CA+dzEBn4EKzDqS0pCHHsPtGGJc1orf5weKKh0GN-GkE+fVYGcg@mail.gmail.com","threadId":"46079","inReplyTo":null,"subject":"bug: `git log --grep ... --invert-grep --author=...` negates / ignores --author","fromName":"Anthony Sottile","fromEmail":"asottile@umich.edu","sentAt":"2017-05-31T15:45:31Z","receivedAt":"2017-05-31T15:45:38Z","isPatch":false,"sender":{"key":"asottile@umich.edu","avatar":"https://avatars.githubusercontent.com/u/1810591?v=4"},"body":"Given the following commits:\n\n```\nasottile@asottile-VirtualBox:/tmp$ git init test\nInitialized empty Git repository in /tmp/test/.git/\nasottile@asottile-VirtualBox:/tmp$ cd test/\nasottile@asottile-VirtualBox:/tmp/test$\nGIT_COMMITTER_EMAIL=foo@example.com GIT_AUTHOR_EMAIL=foo@example.com\ngit commit --allow-empty -m \"foo\"\n[master (root-commit) c9df62b] foo\nasottile@asottile-VirtualBox:/tmp/test$ git commit -m \"blah\" --allow-empty\n[master 9e3ee9b] blah\nasottile@asottile-VirtualBox:/tmp/test$ git log\ncommit 9e3ee9bc1adab2ae8eb1884a8f6237da18dfd27b\nAuthor: Anthony Sottile <asottile@umich.edu>\nDate:   Wed May 31 08:40:59 2017 -0700\n\n    blah\n\ncommit c9df62b93298a247fcfbe24ed4282ccf95448f47\nAuthor: Anthony Sottile <foo@example.com>\nDate:   Wed May 31 08:40:49 2017 -0700\n\n    foo\nasottile@asottile-VirtualBox:/tmp/test$ git log --grep bar\n--invert-grep --author=foo\ncommit 9e3ee9bc1adab2ae8eb1884a8f6237da18dfd27b\nAuthor: Anthony Sottile <asottile@umich.edu>\nDate:   Wed May 31 08:40:59 2017 -0700\n\n    blah\n\ncommit c9df62b93298a247fcfbe24ed4282ccf95448f47\nAuthor: Anthony Sottile <foo@example.com>\nDate:   Wed May 31 08:40:49 2017 -0700\n\n    foo\nasottile@asottile-VirtualBox:/tmp/test$ git log --author=foocommit\nc9df62b93298a247fcfbe24ed4282ccf95448f47\nAuthor: Anthony Sottile <foo@example.com>\nDate:   Wed May 31 08:40:49 2017 -0700\n\n    foo\n```\n\nI expect the same output from the last two commands, but the\n`--invert-grep` one seems to match _all_ the commits.\n\nI can try and dig into this if I have time, just trying to get a count\nusing this as a workaround\n\ngit log --grep ... --invert-grep --format=%ce | grep ... | wc -l\n\nAnthony\n"},{"id":"321147","messageId":"CACBZZX7OhdRM+Mhx4FVX-Upvq169ZLvArL5ZxcTgz8u=WRh3aw@mail.gmail.com","threadId":"46079","inReplyTo":"CA+dzEBn4EKzDqS0pCHHsPtGGJc1orf5weKKh0GN-GkE+fVYGcg@mail.gmail.com","subject":"Re: bug: `git log --grep ... --invert-grep --author=...` negates / ignores --author","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2017-05-31T18:08:54Z","receivedAt":"2017-05-31T18:09:20Z","isPatch":false,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Wed, May 31, 2017 at 5:45 PM, Anthony Sottile <asottile@umich.edu> wrote:\n> Given the following commits:\n> ```\n> asottile@asottile-VirtualBox:/tmp$ git init test\n> Initialized empty Git repository in /tmp/test/.git/\n> asottile@asottile-VirtualBox:/tmp$ cd test/\n> asottile@asottile-VirtualBox:/tmp/test$\n> GIT_COMMITTER_EMAIL=foo@example.com GIT_AUTHOR_EMAIL=foo@example.com\n> git commit --allow-empty -m \"foo\"\n> [master (root-commit) c9df62b] foo\n> asottile@asottile-VirtualBox:/tmp/test$ git commit -m \"blah\" --allow-empty\n> [master 9e3ee9b] blah\n> asottile@asottile-VirtualBox:/tmp/test$ git log\n> commit 9e3ee9bc1adab2ae8eb1884a8f6237da18dfd27b\n> Author: Anthony Sottile <asottile@umich.edu>\n> Date:   Wed May 31 08:40:59 2017 -0700\n>\n>     blah\n>\n> commit c9df62b93298a247fcfbe24ed4282ccf95448f47\n> Author: Anthony Sottile <foo@example.com>\n> Date:   Wed May 31 08:40:49 2017 -0700\n>\n>     foo\n> asottile@asottile-VirtualBox:/tmp/test$ git log --grep bar\n> --invert-grep --author=foo\n> commit 9e3ee9bc1adab2ae8eb1884a8f6237da18dfd27b\n> Author: Anthony Sottile <asottile@umich.edu>\n> Date:   Wed May 31 08:40:59 2017 -0700\n>\n>     blah\n>\n> commit c9df62b93298a247fcfbe24ed4282ccf95448f47\n> Author: Anthony Sottile <foo@example.com>\n> Date:   Wed May 31 08:40:49 2017 -0700\n>\n>     foo\n> asottile@asottile-VirtualBox:/tmp/test$ git log --author=foocommit\n> c9df62b93298a247fcfbe24ed4282ccf95448f47\n> Author: Anthony Sottile <foo@example.com>\n> Date:   Wed May 31 08:40:49 2017 -0700\n>\n>     foo\n> ```\n>\n> I expect the same output from the last two commands, but the\n> `--invert-grep` one seems to match _all_ the commits.\n>\n> I can try and dig into this if I have time, just trying to get a count\n> using this as a workaround\n>\n> git log --grep ... --invert-grep --format=%ce | grep ... | wc -l\n\nI had to squint a bit to see what you were getting at here, which is\npretty simple: When you provide --invert-grep the --author filter is\ncompletely discarded. This is a bug.\n\nI.e. on git.git:\n\nOK:\n\n$ git log --grep=bar --author=Ævar --pretty=format:%an -100 origin/pu\n|sort|uniq -c|sort -nr\n5 Ævar Arnfjörð Bjarmason\n\n$ git log --author=Ævar --pretty=format:%an -100 origin/pu |sort|uniq\n-c|sort -nr\n100 Ævar Arnfjörð Bjarmason\n\n$ git log --grep=bar --invert-grep --author=Ævar --pretty=format:%an\n-100 origin/pu |sort|uniq -c|sort -nr\n     78 Junio C Hamano\n     14 Jeff King\n      2 Andreas Heiduk\n      1 Sahil Dua\n      1 Rikard Falkeborn\n      1 Johannes Sixt\n      1 Johannes Schindelin\n      1 Ben Peart\n      1 Ævar Arnfjörð Bjarmason\n\nThat last command should only find my commits, but instead --author is\ndiscarded.\n"},{"id":"321170","messageId":"20170531214019.bbhjdaejvgje3v6g@sigill.intra.peff.net","threadId":"46079","inReplyTo":"CACBZZX7OhdRM+Mhx4FVX-Upvq169ZLvArL5ZxcTgz8u=WRh3aw@mail.gmail.com","subject":"Re: bug: `git log --grep ... --invert-grep --author=...` negates / ignores --author","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2017-05-31T21:40:20Z","receivedAt":"2017-05-31T21:40:24Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Wed, May 31, 2017 at 08:08:54PM +0200, Ævar Arnfjörð Bjarmason wrote:\n\n> $ git log --grep=bar --author=Ævar --pretty=format:%an -100 origin/pu\n> |sort|uniq -c|sort -nr\n> 5 Ævar Arnfjörð Bjarmason\n> \n> $ git log --author=Ævar --pretty=format:%an -100 origin/pu |sort|uniq\n> -c|sort -nr\n> 100 Ævar Arnfjörð Bjarmason\n> \n> $ git log --grep=bar --invert-grep --author=Ævar --pretty=format:%an\n> -100 origin/pu |sort|uniq -c|sort -nr\n>      78 Junio C Hamano\n>      14 Jeff King\n>       2 Andreas Heiduk\n>       1 Sahil Dua\n>       1 Rikard Falkeborn\n>       1 Johannes Sixt\n>       1 Johannes Schindelin\n>       1 Ben Peart\n>       1 Ævar Arnfjörð Bjarmason\n> \n> That last command should only find my commits, but instead --author is\n> discarded.\n\nI would have thought that the last command wouldn't find _any_ of your\ncommits. Don't we consider --author a greppable pattern and invert it?\n\nBy itself:\n\n  $ git log --author=Ævar --invert-grep --format=%an -100 origin/pu |\n    sort | uniq -c | sort -rn\n       79 Junio C Hamano\n        8 Stefan Beller\n        8 Jeff King\n        1 Sahil Dua\n        1 Rikard Falkeborn\n        1 Johannes Sixt\n        1 Johannes Schindelin\n        1 Andreas Heiduk\n\nSo that makes sense from the \"--author is invertable\" world-view.\n\nBut I'm puzzled that you show up at all when --grep=bar is added (and\nmoreover, that we get _one_ commit from you, not the 5 found in your\ninitial command). That seems like a bug.\n\n-Peff\n"},{"id":"321240","messageId":"xmqqtw4078ka.fsf@gitster.mtv.corp.google.com","threadId":"46079","inReplyTo":"CACBZZX7OhdRM+Mhx4FVX-Upvq169ZLvArL5ZxcTgz8u=WRh3aw@mail.gmail.com","subject":"Re: bug: `git log --grep ... --invert-grep --author=...` negates / ignores --author","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2017-06-01T02:20:21Z","receivedAt":"2017-06-01T02:20:29Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:\n\n> $ git log --grep=bar --invert-grep --author=Ævar --pretty=format:%an\n> -100 origin/pu |sort|uniq -c|sort -nr\n>      78 Junio C Hamano\n>      14 Jeff King\n>       2 Andreas Heiduk\n>       1 Sahil Dua\n>       1 Rikard Falkeborn\n>       1 Johannes Sixt\n>       1 Johannes Schindelin\n>       1 Ben Peart\n>       1 Ævar Arnfjörð Bjarmason\n>\n> That last command should only find my commits, but instead --author is\n> discarded.\n\nHmph, the way I read revision.c::commit_match() is that we check\nwith \"--grep=bar --author=Ævar\" and then emit the commit if that\ncheck fails when --invert-grep is in effect (instead of emitting the\ncommit when the check succeeds, which is the normal case).\n\nSo there is one commit that didn't pass \"has 'bar' and written by\nÆvar\" check that was written by you in the recent past (iow,\nrecently you were writing bar all over the place).  Changes by other\npeople by definition does not pass \"has 'bar' and written by Ævar\"\ncheck, on the other hand.\n\n\n"},{"id":"321319","messageId":"CACBZZX5j=g=Lnv-X9F5Uaf0wW922R3N=LgrzRKPw853ECmoqYQ@mail.gmail.com","threadId":"46079","inReplyTo":"20170531214019.bbhjdaejvgje3v6g@sigill.intra.peff.net","subject":"Re: bug: `git log --grep ... --invert-grep --author=...` negates / ignores --author","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2017-06-01T19:45:51Z","receivedAt":"2017-06-01T19:46:18Z","isPatch":false,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Wed, May 31, 2017 at 11:40 PM, Jeff King <peff@peff.net> wrote:\n> On Wed, May 31, 2017 at 08:08:54PM +0200, Ævar Arnfjörð Bjarmason wrote:\n>\n>> $ git log --grep=bar --author=Ævar --pretty=format:%an -100 origin/pu\n>> |sort|uniq -c|sort -nr\n>> 5 Ævar Arnfjörð Bjarmason\n>>\n>> $ git log --author=Ævar --pretty=format:%an -100 origin/pu |sort|uniq\n>> -c|sort -nr\n>> 100 Ævar Arnfjörð Bjarmason\n>>\n>> $ git log --grep=bar --invert-grep --author=Ævar --pretty=format:%an\n>> -100 origin/pu |sort|uniq -c|sort -nr\n>>      78 Junio C Hamano\n>>      14 Jeff King\n>>       2 Andreas Heiduk\n>>       1 Sahil Dua\n>>       1 Rikard Falkeborn\n>>       1 Johannes Sixt\n>>       1 Johannes Schindelin\n>>       1 Ben Peart\n>>       1 Ævar Arnfjörð Bjarmason\n>>\n>> That last command should only find my commits, but instead --author is\n>> discarded.\n>\n> I would have thought that the last command wouldn't find _any_ of your\n> commits. Don't we consider --author a greppable pattern and invert it?\n\nThere's two unrelated things going on here AFAICT:\n\n* Anthony expected --author to be inverted by --invert-grep, but this\nis not how it's documented, it's *only* for inverting the --grep\npattern: \"Limit the commits output to ones with log message that do\nnot match the pattern specified with --grep=<pattern>.\"\n\n* The --author filter should be applied un-inverted, but isn't, it's\nseemingly just ignored in the presence of --grep, actually mostly\nignored, this is bizarre:\n\n$ diff -ru <(git log --grep=bar --invert-grep --pretty=format:%an -100\norigin/pu |sort|uniq -c|sort -nr) <(git log --grep=bar --invert-grep\n--pretty=format:%an -100 --author=WeMostlyIgnoreThisButNotReally\norigin/pu |sort|uniq -c|sort -nr)\n--- /dev/fd/63  2017-06-01 21:44:08.952583804 +0200\n+++ /dev/fd/62  2017-06-01 21:44:08.952583804 +0200\n@@ -1,6 +1,6 @@\n-     66 Junio C Hamano\n+     65 Junio C Hamano\n      10 Jeff King\n-      8 Stefan Beller\n+      9 Stefan Beller\n       5 Lars Schneider\n       2 SZEDER Gábor\n       1 Tyler Brazier\n\n\n> By itself:\n>\n>   $ git log --author=Ævar --invert-grep --format=%an -100 origin/pu |\n>     sort | uniq -c | sort -rn\n>        79 Junio C Hamano\n>         8 Stefan Beller\n>         8 Jeff King\n>         1 Sahil Dua\n>         1 Rikard Falkeborn\n>         1 Johannes Sixt\n>         1 Johannes Schindelin\n>         1 Andreas Heiduk\n>\n> So that makes sense from the \"--author is invertable\" world-view.\n>\n> But I'm puzzled that you show up at all when --grep=bar is added (and\n> moreover, that we get _one_ commit from you, not the 5 found in your\n> initial command). That seems like a bug.\n\nI think that's the only thing that's not a bug, i.e. we just find 1\nmatch in the first 100 (note -100), sorry for the confusing example.\n\nAnyway, much of the above may be incorrect, I haven't dug deeply\nbeyond just finding that something's funny going on and we definitely\nhave *some* bugs here.\n"},{"id":"321325","messageId":"CA+dzEBkUgzz4Jrsm=VZOE=YNezPEPEMoUDW9iL1vDLxDJstz8w@mail.gmail.com","threadId":"46079","inReplyTo":"CACBZZX5j=g=Lnv-X9F5Uaf0wW922R3N=LgrzRKPw853ECmoqYQ@mail.gmail.com","subject":"Re: bug: `git log --grep ... --invert-grep --author=...` negates / ignores --author","fromName":"Anthony Sottile","fromEmail":"asottile@umich.edu","sentAt":"2017-06-01T21:05:58Z","receivedAt":"2017-06-01T21:06:04Z","isPatch":false,"sender":{"key":"asottile@umich.edu","avatar":"https://avatars.githubusercontent.com/u/1810591?v=4"},"body":"I actually only expected the --grep to be inverted -- I think I'm on\nthe same page with what's documented.\n\nI'd be happy to dig into the code and investigate this some more but I\nam not familiar with the git codebase, any code hints on where to get\nbootstrapped?\n\nAnthony\n\nOn Thu, Jun 1, 2017 at 12:45 PM, Ævar Arnfjörð Bjarmason\n<avarab@gmail.com> wrote:\n> On Wed, May 31, 2017 at 11:40 PM, Jeff King <peff@peff.net> wrote:\n>> On Wed, May 31, 2017 at 08:08:54PM +0200, Ævar Arnfjörð Bjarmason wrote:\n>>\n>>> $ git log --grep=bar --author=Ævar --pretty=format:%an -100 origin/pu\n>>> |sort|uniq -c|sort -nr\n>>> 5 Ævar Arnfjörð Bjarmason\n>>>\n>>> $ git log --author=Ævar --pretty=format:%an -100 origin/pu |sort|uniq\n>>> -c|sort -nr\n>>> 100 Ævar Arnfjörð Bjarmason\n>>>\n>>> $ git log --grep=bar --invert-grep --author=Ævar --pretty=format:%an\n>>> -100 origin/pu |sort|uniq -c|sort -nr\n>>>      78 Junio C Hamano\n>>>      14 Jeff King\n>>>       2 Andreas Heiduk\n>>>       1 Sahil Dua\n>>>       1 Rikard Falkeborn\n>>>       1 Johannes Sixt\n>>>       1 Johannes Schindelin\n>>>       1 Ben Peart\n>>>       1 Ævar Arnfjörð Bjarmason\n>>>\n>>> That last command should only find my commits, but instead --author is\n>>> discarded.\n>>\n>> I would have thought that the last command wouldn't find _any_ of your\n>> commits. Don't we consider --author a greppable pattern and invert it?\n>\n> There's two unrelated things going on here AFAICT:\n>\n> * Anthony expected --author to be inverted by --invert-grep, but this\n> is not how it's documented, it's *only* for inverting the --grep\n> pattern: \"Limit the commits output to ones with log message that do\n> not match the pattern specified with --grep=<pattern>.\"\n>\n> * The --author filter should be applied un-inverted, but isn't, it's\n> seemingly just ignored in the presence of --grep, actually mostly\n> ignored, this is bizarre:\n>\n> $ diff -ru <(git log --grep=bar --invert-grep --pretty=format:%an -100\n> origin/pu |sort|uniq -c|sort -nr) <(git log --grep=bar --invert-grep\n> --pretty=format:%an -100 --author=WeMostlyIgnoreThisButNotReally\n> origin/pu |sort|uniq -c|sort -nr)\n> --- /dev/fd/63  2017-06-01 21:44:08.952583804 +0200\n> +++ /dev/fd/62  2017-06-01 21:44:08.952583804 +0200\n> @@ -1,6 +1,6 @@\n> -     66 Junio C Hamano\n> +     65 Junio C Hamano\n>       10 Jeff King\n> -      8 Stefan Beller\n> +      9 Stefan Beller\n>        5 Lars Schneider\n>        2 SZEDER Gábor\n>        1 Tyler Brazier\n>\n>\n>> By itself:\n>>\n>>   $ git log --author=Ævar --invert-grep --format=%an -100 origin/pu |\n>>     sort | uniq -c | sort -rn\n>>        79 Junio C Hamano\n>>         8 Stefan Beller\n>>         8 Jeff King\n>>         1 Sahil Dua\n>>         1 Rikard Falkeborn\n>>         1 Johannes Sixt\n>>         1 Johannes Schindelin\n>>         1 Andreas Heiduk\n>>\n>> So that makes sense from the \"--author is invertable\" world-view.\n>>\n>> But I'm puzzled that you show up at all when --grep=bar is added (and\n>> moreover, that we get _one_ commit from you, not the 5 found in your\n>> initial command). That seems like a bug.\n>\n> I think that's the only thing that's not a bug, i.e. we just find 1\n> match in the first 100 (note -100), sorry for the confusing example.\n>\n> Anyway, much of the above may be incorrect, I haven't dug deeply\n> beyond just finding that something's funny going on and we definitely\n> have *some* bugs here.\n"},{"id":"321334","messageId":"xmqqshjj4ce5.fsf@gitster.mtv.corp.google.com","threadId":"46079","inReplyTo":"CACBZZX5j=g=Lnv-X9F5Uaf0wW922R3N=LgrzRKPw853ECmoqYQ@mail.gmail.com","subject":"Re: bug: `git log --grep ... --invert-grep --author=...` negates / ignores --author","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2017-06-01T21:38:10Z","receivedAt":"2017-06-01T21:38:17Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:\n\n> Anyway, much of the above may be incorrect, I haven't dug deeply\n> beyond just finding that something's funny going on and we definitely\n> have *some* bugs here.\n\nOne thing that is very correct in what you said is that the\ndocumentation of \"--invert-grep\" is wrong to mention only \"--grep\".\nIt probably is because the author of \"--invert-grep\" did not realize\nthat the \"--author\" thing internally is considered a part of \"grep\"\nprocessing done in revision.c::commit_match() that chooses which\ncommit to show.\n\nAs you may have noticed, the integration to the grep infrastructure\nwith \"git log\" and friends does not expose the power of combination\n(e.g. \"--and\", \"--not\", etc.), unlike \"git grep\", to the command\nline.  This is purely a technical limitation (e.g. \"--not\" is taken\nto mean a completely different thing in \"git log\" family) and there\nis no fundamental reason why we shouldn't, but the fact that the end\nuser cannot combine the \"--grep\" like terms in a flexible way\nremains from the beginning to this day.\n\nWithin that constraint, --grep and things like --author are defined\nto interact in a certain hardcoded way (the former searches\nsubstring in the body part of commit objects while the latter\nsearches substrings in the \"header\" part of them), simply because\ndefining them to be all ORed together does not give us a very useful\nsemantics.\n\nIn general, two or more of these searches always \"OR\" together,\ne.g. \"git log --grep=foo --grep=bar\" finds commits that mention foo\nor commits that mention bar.  However, searches in body and searches\nin header \"AND\" together, e.g. \"git log --author=Ævar --grep=foo\"\nfinds commits that mention foo and written by you.  \"git log\n--author=Ævar --author=gitster@ --grep=foo --grep=bar\" finds commits\nthat mention either foo or bar and written by either you or me.\nIIRC, its parse tree would look like\n\n    (AND (OR (author Ævar) (author gitster@))\n         (OR (grep foo) (grep bar))\n\nThe \"--invert-grep\" merely adds (NOT ...) around it.\n\nI vaguely recall there was impliations to \"all match\" when the\nheader search and the body search is used together.  Without header\nsearch, the usual \"git log --grep=foo --grep=bar\" becomes\n\n         (OR (grep foo) (grep bar))\n\nand \"--all-match\" is applied to this \"OR\" (i.e. by the time the\nmatcher finishes a single commit's body, all of the terms ORed\ntogether, i.e. (grep foo) and (grep bar), must have matched at least\nonce for the commit to be considered a match.  Obviously, a commit\ncan be authored and commited by only a single person, and applying\nall-match naively to \"git log --author=Ævar --author=gitster@\" would\nnot make any sense (by definition the result would be an empty set),\nand IIRC there is a code that copes with this to avoid requiring a\ncommit that is written by two people (or committed by two people)\nwhen \"--all-match\" is in effect.\n\nSo taken all together, your example and its output makes all sense\nto me.  As you mentioned, the examples by the OP was written a bit\ntoo dense for me to grok quickly and I didn't look too carefully at\nthem to comment.\n"}]}