{"thread":{"id":"55887","subject":"[PATCH] fix typos which duplicate a word","startedAt":"2021-06-09T10:26:48Z","lastAt":"2021-06-14T01:11:25Z","messageCount":9,"participants":["Andrei Rybak","Eric Sunshine","Felipe Contreras","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"426872","messageId":"20210609102641.3531183-1-rybak.a.v@gmail.com","threadId":"55887","inReplyTo":null,"subject":"[PATCH] fix typos which duplicate a word","fromName":"Andrei Rybak","fromEmail":"rybak.a.v@gmail.com","sentAt":"2021-06-09T10:26:41Z","receivedAt":"2021-06-09T10:26:48Z","isPatch":true,"sender":{"key":"rybak.a.v@gmail.com","avatar":"https://avatars.githubusercontent.com/u/624072?v=4"},"body":"Fix typos in documentation and code comments which repeat various words.\nThese typos were found by searching using scripts like this:\n\n\tfor w in $(grep '^....$' /usr/share/dict/words)\n\tdo\n\t\tgit grep -P \"\\b$w $w\\b\"\n\tdone\n\nSigned-off-by: Andrei Rybak <rybak.a.v@gmail.com>\n---\n\nI'm not sure what to put as the \"area: \" prefix for this patch, as it touches\nboth docs and code comments.\n\n Documentation/technical/protocol-v2.txt | 2 +-\n attr.c                                  | 2 +-\n builtin/log.c                           | 3 +--\n git-compat-util.h                       | 2 +-\n git-cvsserver.perl                      | 2 +-\n remote.c                                | 2 +-\n t/t5505-remote.sh                       | 2 +-\n t/t6416-recursive-corner-cases.sh       | 2 +-\n t/t9100-git-svn-basic.sh                | 2 +-\n 9 files changed, 9 insertions(+), 10 deletions(-)\n\ndiff --git a/Documentation/technical/protocol-v2.txt b/Documentation/technical/protocol-v2.txt\nindex a1e31367f4..1040d85319 100644\n--- a/Documentation/technical/protocol-v2.txt\n+++ b/Documentation/technical/protocol-v2.txt\n@@ -540,7 +540,7 @@ An `object-info` request takes the following arguments:\n \tIndicates to the server an object which the client wants to obtain\n \tinformation for.\n \n-The response of `object-info` is a list of the the requested object ids\n+The response of `object-info` is a list of the requested object ids\n and associated requested information, each separated by a single space.\n \n \toutput = info flush-pkt\ndiff --git a/attr.c b/attr.c\nindex 9e897e43f5..d029e681f2 100644\n--- a/attr.c\n+++ b/attr.c\n@@ -685,7 +685,7 @@ static struct attr_stack *read_attr_from_array(const char **list)\n  * Callers into the attribute system assume there is a single, system-wide\n  * global state where attributes are read from and when the state is flipped by\n  * calling git_attr_set_direction(), the stack frames that have been\n- * constructed need to be discarded so so that subsequent calls into the\n+ * constructed need to be discarded so that subsequent calls into the\n  * attribute system will lazily read from the right place.  Since changing\n  * direction causes a global paradigm shift, it should not ever be called while\n  * another thread could potentially be calling into the attribute system.\ndiff --git a/builtin/log.c b/builtin/log.c\nindex 6102893fcc..516a1142dd 100644\n--- a/builtin/log.c\n+++ b/builtin/log.c\n@@ -1968,8 +1968,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)\n \t} else if (rev.diffopt.close_file) {\n \t\t/*\n \t\t * The diff code parsed --output; it has already opened the\n-\t\t * file, but but we must instruct it not to close after each\n-\t\t * diff.\n+\t\t * file, but we must instruct it not to close after each diff.\n \t\t */\n \t\trev.diffopt.no_free = 1;\n \t} else {\ndiff --git a/git-compat-util.h b/git-compat-util.h\nindex a508dbe5a3..df7dae9be1 100644\n--- a/git-compat-util.h\n+++ b/git-compat-util.h\n@@ -1368,7 +1368,7 @@ static inline void *container_of_or_null_offset(void *ptr, size_t offset)\n \t(type *)container_of_or_null_offset(ptr, offsetof(type, member))\n \n /*\n- * like offsetof(), but takes a pointer to a a variable of type which\n+ * like offsetof(), but takes a pointer to a variable of type which\n  * contains @member, instead of a specified type.\n  * @ptr is subject to multiple evaluation since we can't rely on __typeof__\n  * everywhere.\ndiff --git a/git-cvsserver.perl b/git-cvsserver.perl\nindex f6f3fc192c..ed035f32c2 100755\n--- a/git-cvsserver.perl\n+++ b/git-cvsserver.perl\n@@ -2149,7 +2149,7 @@ sub req_diff\n                    ( $meta2->{revision} or \"workingcopy\" ));\n \n         # TODO: Use --label instead of -L because -L is no longer\n-        #  documented and may go away someday.  Not sure if there there are\n+        #  documented and may go away someday.  Not sure if there are\n         #  versions that only support -L, which would make this change risky?\n         #  http://osdir.com/ml/bug-gnu-utils-gnu/2010-12/msg00060.html\n         #    (\"man diff\" should actually document the best migration strategy,\ndiff --git a/remote.c b/remote.c\nindex 6d1e8d02df..dfb863d808 100644\n--- a/remote.c\n+++ b/remote.c\n@@ -1592,7 +1592,7 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,\n \t\t\telse\n \t\t\t\t/*\n \t\t\t\t * If the ref isn't stale, and is reachable\n-\t\t\t\t * from from one of the reflog entries of\n+\t\t\t\t * from one of the reflog entries of\n \t\t\t\t * the local branch, force the update.\n \t\t\t\t */\n \t\t\t\tforce_ref_update = 1;\ndiff --git a/t/t5505-remote.sh b/t/t5505-remote.sh\nindex c7b392794b..e6e3c8f552 100755\n--- a/t/t5505-remote.sh\n+++ b/t/t5505-remote.sh\n@@ -182,7 +182,7 @@ test_expect_success 'rename errors out early when deleting non-existent branch'\n \t)\n '\n \n-test_expect_success 'rename errors out early when when new name is invalid' '\n+test_expect_success 'rename errors out early when new name is invalid' '\n \ttest_config remote.foo.vcs bar &&\n \techo \"fatal: '\\''invalid...name'\\'' is not a valid remote name\" >expect &&\n \ttest_must_fail git remote rename foo invalid...name 2>actual &&\ndiff --git a/t/t6416-recursive-corner-cases.sh b/t/t6416-recursive-corner-cases.sh\nindex 84f5082366..57be4a4cbb 100755\n--- a/t/t6416-recursive-corner-cases.sh\n+++ b/t/t6416-recursive-corner-cases.sh\n@@ -871,7 +871,7 @@ test_expect_failure 'merge of D2 & E4 merges a2s & reports conflict for a/file'\n # it feels sound to say \"B and C do not agree what the final pathname\n # should be, but we know this content was derived from the common A:a so we\n # use one path whose name is arbitrary in the virtual merge base X between\n-# D and E\" and then further let the rename detection to notice that that\n+# D and E\" and then further let the rename detection to notice that\n # arbitrary path gets renamed between X-D to \"newname\" and X-E also to\n # \"newname\" to resolve it as both sides renaming it to the same new\n # name. It is akin to what we do at the content level, i.e. \"B and C do not\ndiff --git a/t/t9100-git-svn-basic.sh b/t/t9100-git-svn-basic.sh\nindex 1d3fdcc997..ef35a54885 100755\n--- a/t/t9100-git-svn-basic.sh\n+++ b/t/t9100-git-svn-basic.sh\n@@ -330,7 +330,7 @@ test_expect_success 'git-svn works in a bare repository' '\n \tgit svn fetch ) &&\n \trm -rf bare-repo\n \t'\n-test_expect_success 'git-svn works in in a repository with a gitdir: link' '\n+test_expect_success 'git-svn works in a repository with a gitdir: link' '\n \tmkdir worktree gitdir &&\n \t( cd worktree &&\n \tgit svn init \"$svnrepo\" &&\n-- \n2.31.1\n\n"},{"id":"426894","messageId":"CAPig+cTjjNrU9q8UPm+CRuTKq8_XNc+1z7-3F4bvetBi+NjKeQ@mail.gmail.com","threadId":"55887","inReplyTo":"20210609102641.3531183-1-rybak.a.v@gmail.com","subject":"Re: [PATCH] fix typos which duplicate a word","fromName":"Eric Sunshine","fromEmail":"sunshine@sunshineco.com","sentAt":"2021-06-09T15:28:44Z","receivedAt":"2021-06-09T15:29:12Z","isPatch":true,"sender":{"key":"sunshine@sunshineco.com","avatar":"https://avatars.githubusercontent.com/u/163641?v=4"},"body":"On Wed, Jun 9, 2021 at 6:27 AM Andrei Rybak <rybak.a.v@gmail.com> wrote:\n> Fix typos in documentation and code comments which repeat various words.\n> These typos were found by searching using scripts like this:\n> [...]\n> Signed-off-by: Andrei Rybak <rybak.a.v@gmail.com>\n> ---\n> diff --git a/t/t6416-recursive-corner-cases.sh b/t/t6416-recursive-corner-cases.sh\n> @@ -871,7 +871,7 @@ test_expect_failure 'merge of D2 & E4 merges a2s & reports conflict for a/file'\n>  # it feels sound to say \"B and C do not agree what the final pathname\n>  # should be, but we know this content was derived from the common A:a so we\n>  # use one path whose name is arbitrary in the virtual merge base X between\n> -# D and E\" and then further let the rename detection to notice that that\n> +# D and E\" and then further let the rename detection to notice that\n>  # arbitrary path gets renamed between X-D to \"newname\" and X-E also to\n>  # \"newname\" to resolve it as both sides renaming it to the same new\n>  # name. It is akin to what we do at the content level, i.e. \"B and C do not\n\nAll the other fixes for duplicate words look \"obviously correct\", but\nin this case, the duplicate \"that that\" is likely intentional and\ngrammatically sensible, so perhaps drop this hunk from the patch?\n"},{"id":"426908","messageId":"60c0fad989b58_1074920884@natae.notmuch","threadId":"55887","inReplyTo":"20210609102641.3531183-1-rybak.a.v@gmail.com","subject":"RE: [PATCH] fix typos which duplicate a word","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2021-06-09T17:31:05Z","receivedAt":"2021-06-09T17:32:39Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"Andrei Rybak wrote:\n> Fix typos in documentation and code comments which repeat various words.\n> These typos were found by searching using scripts like this:\n> \n> \tfor w in $(grep '^....$' /usr/share/dict/words)\n> \tdo\n> \t\tgit grep -P \"\\b$w $w\\b\"\n> \tdone\n> \n> Signed-off-by: Andrei Rybak <rybak.a.v@gmail.com>\n\nOther than the 'that that' in t6416-recursive-corner-cases.sh everything\nlooks obviously correct.\n\nReviewed-by: Felipe Contreras <felipe.contreras@gmail.com>\n\n> ---\n> \n> I'm not sure what to put as the \"area: \" prefix for this patch, as it touches\n> both docs and code comments.\n\nNot every patch needs to have an area, but when there's no area you\nneed to use uppercase.\n\n  Fix typos which duplicate a word\n\n-- \nFelipe Contreras\n"},{"id":"426949","messageId":"20210610072406.10203-1-rybak.a.v@gmail.com","threadId":"55887","inReplyTo":"20210609102641.3531183-1-rybak.a.v@gmail.com","subject":"[PATCH v2] *: fix typos which duplicate a word","fromName":"Andrei Rybak","fromEmail":"rybak.a.v@gmail.com","sentAt":"2021-06-10T07:24:06Z","receivedAt":"2021-06-10T07:24:41Z","isPatch":true,"sender":{"key":"rybak.a.v@gmail.com","avatar":"https://avatars.githubusercontent.com/u/624072?v=4"},"body":"Fix typos in documentation and code comments which repeat various words.\nThese typos were found by searching using scripts like this:\n\n\tfor w in $(grep '^....$' /usr/share/dict/words)\n\tdo\n\t\tgit grep -P \"\\b$w $w\\b\"\n\tdone\n\nSigned-off-by: Andrei Rybak <rybak.a.v@gmail.com>\n---\n\nThanks to Felipe Contreras for review.\n\nChanges from v1:\n\n  - added \"*: \" as area prefix to follow example of Derrick Stolee\n    https://lore.kernel.org/git/c40ad4a058a75d57adc97b8252ad0f57600b8d86.1623085069.git.gitgitgadget@gmail.com/\n  - Dropped change in t/t6416-recursive-corner-cases.sh where I misread a\n    sentence and the duplicated word \"that\" is used correctly. Quote for\n    reference:\n\n      ... so we use one path whose name is arbitrary in the virtual merge base X\n      between D and E\" and then further let the rename detection to notice that\n      that arbitrary path gets renamed ...\n\n    where first \"that\" is a conjunction between clauses \"we let\" and \"path gets\n    renamed\" and second \"that\" is a determiner to qualify \"arbitrary path\" to\n    refer to \"one path\" mentioned in the first clause\n\n Documentation/technical/protocol-v2.txt | 2 +-\n attr.c                                  | 2 +-\n builtin/log.c                           | 3 +--\n git-compat-util.h                       | 2 +-\n git-cvsserver.perl                      | 2 +-\n remote.c                                | 2 +-\n t/t5505-remote.sh                       | 2 +-\n t/t9100-git-svn-basic.sh                | 2 +-\n 8 files changed, 8 insertions(+), 9 deletions(-)\n\ndiff --git a/Documentation/technical/protocol-v2.txt b/Documentation/technical/protocol-v2.txt\nindex a1e31367f4..1040d85319 100644\n--- a/Documentation/technical/protocol-v2.txt\n+++ b/Documentation/technical/protocol-v2.txt\n@@ -540,7 +540,7 @@ An `object-info` request takes the following arguments:\n \tIndicates to the server an object which the client wants to obtain\n \tinformation for.\n \n-The response of `object-info` is a list of the the requested object ids\n+The response of `object-info` is a list of the requested object ids\n and associated requested information, each separated by a single space.\n \n \toutput = info flush-pkt\ndiff --git a/attr.c b/attr.c\nindex 9e897e43f5..d029e681f2 100644\n--- a/attr.c\n+++ b/attr.c\n@@ -685,7 +685,7 @@ static struct attr_stack *read_attr_from_array(const char **list)\n  * Callers into the attribute system assume there is a single, system-wide\n  * global state where attributes are read from and when the state is flipped by\n  * calling git_attr_set_direction(), the stack frames that have been\n- * constructed need to be discarded so so that subsequent calls into the\n+ * constructed need to be discarded so that subsequent calls into the\n  * attribute system will lazily read from the right place.  Since changing\n  * direction causes a global paradigm shift, it should not ever be called while\n  * another thread could potentially be calling into the attribute system.\ndiff --git a/builtin/log.c b/builtin/log.c\nindex 6102893fcc..516a1142dd 100644\n--- a/builtin/log.c\n+++ b/builtin/log.c\n@@ -1968,8 +1968,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)\n \t} else if (rev.diffopt.close_file) {\n \t\t/*\n \t\t * The diff code parsed --output; it has already opened the\n-\t\t * file, but but we must instruct it not to close after each\n-\t\t * diff.\n+\t\t * file, but we must instruct it not to close after each diff.\n \t\t */\n \t\trev.diffopt.no_free = 1;\n \t} else {\ndiff --git a/git-compat-util.h b/git-compat-util.h\nindex a508dbe5a3..df7dae9be1 100644\n--- a/git-compat-util.h\n+++ b/git-compat-util.h\n@@ -1368,7 +1368,7 @@ static inline void *container_of_or_null_offset(void *ptr, size_t offset)\n \t(type *)container_of_or_null_offset(ptr, offsetof(type, member))\n \n /*\n- * like offsetof(), but takes a pointer to a a variable of type which\n+ * like offsetof(), but takes a pointer to a variable of type which\n  * contains @member, instead of a specified type.\n  * @ptr is subject to multiple evaluation since we can't rely on __typeof__\n  * everywhere.\ndiff --git a/git-cvsserver.perl b/git-cvsserver.perl\nindex f6f3fc192c..ed035f32c2 100755\n--- a/git-cvsserver.perl\n+++ b/git-cvsserver.perl\n@@ -2149,7 +2149,7 @@ sub req_diff\n                    ( $meta2->{revision} or \"workingcopy\" ));\n \n         # TODO: Use --label instead of -L because -L is no longer\n-        #  documented and may go away someday.  Not sure if there there are\n+        #  documented and may go away someday.  Not sure if there are\n         #  versions that only support -L, which would make this change risky?\n         #  http://osdir.com/ml/bug-gnu-utils-gnu/2010-12/msg00060.html\n         #    (\"man diff\" should actually document the best migration strategy,\ndiff --git a/remote.c b/remote.c\nindex 6d1e8d02df..dfb863d808 100644\n--- a/remote.c\n+++ b/remote.c\n@@ -1592,7 +1592,7 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,\n \t\t\telse\n \t\t\t\t/*\n \t\t\t\t * If the ref isn't stale, and is reachable\n-\t\t\t\t * from from one of the reflog entries of\n+\t\t\t\t * from one of the reflog entries of\n \t\t\t\t * the local branch, force the update.\n \t\t\t\t */\n \t\t\t\tforce_ref_update = 1;\ndiff --git a/t/t5505-remote.sh b/t/t5505-remote.sh\nindex c7b392794b..e6e3c8f552 100755\n--- a/t/t5505-remote.sh\n+++ b/t/t5505-remote.sh\n@@ -182,7 +182,7 @@ test_expect_success 'rename errors out early when deleting non-existent branch'\n \t)\n '\n \n-test_expect_success 'rename errors out early when when new name is invalid' '\n+test_expect_success 'rename errors out early when new name is invalid' '\n \ttest_config remote.foo.vcs bar &&\n \techo \"fatal: '\\''invalid...name'\\'' is not a valid remote name\" >expect &&\n \ttest_must_fail git remote rename foo invalid...name 2>actual &&\ndiff --git a/t/t9100-git-svn-basic.sh b/t/t9100-git-svn-basic.sh\nindex 1d3fdcc997..ef35a54885 100755\n--- a/t/t9100-git-svn-basic.sh\n+++ b/t/t9100-git-svn-basic.sh\n@@ -330,7 +330,7 @@ test_expect_success 'git-svn works in a bare repository' '\n \tgit svn fetch ) &&\n \trm -rf bare-repo\n \t'\n-test_expect_success 'git-svn works in in a repository with a gitdir: link' '\n+test_expect_success 'git-svn works in a repository with a gitdir: link' '\n \tmkdir worktree gitdir &&\n \t( cd worktree &&\n \tgit svn init \"$svnrepo\" &&\n-- \n2.31.1\n\n"},{"id":"427016","messageId":"60c225d540231_b25b1208cd@natae.notmuch","threadId":"55887","inReplyTo":"20210610072406.10203-1-rybak.a.v@gmail.com","subject":"RE: [PATCH v2] *: fix typos which duplicate a word","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2021-06-10T14:46:45Z","receivedAt":"2021-06-10T14:47:48Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"> Subject: *: fix typos which duplicate a word\n\nThis is still awkward to me. \"Fix typos...\" is much better.\n\n-- \nFelipe Contreras\n"},{"id":"427067","messageId":"xmqq1r99e0ff.fsf@gitster.g","threadId":"55887","inReplyTo":"20210610072406.10203-1-rybak.a.v@gmail.com","subject":"Re: [PATCH v2] *: fix typos which duplicate a word","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2021-06-10T23:59:16Z","receivedAt":"2021-06-10T23:59:19Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Andrei Rybak <rybak.a.v@gmail.com> writes:\n\n> Subject: Re: [PATCH v2] *: fix typos which duplicate a word\n\nI think Derrick started this use of \"*:\" prefix to mean \"not limited\nto any particular area, but applies to everything\" and it makes\nsense.\n\n> Fix typos in documentation and code comments which repeat various words.\n\nThanks.\n\n> These typos were found by searching using scripts like this:\n>\n> \tfor w in $(grep '^....$' /usr/share/dict/words)\n> \tdo\n> \t\tgit grep -P \"\\b$w $w\\b\"\n> \tdone\n\nThis is clarifying and somewhat puzzling at the same time.\n\nIt says that doubled words that span across line folding, and\ndoubled words that do not have exactly a single space in between,\nhave gone undetected (which is fine and may be useful information)\nby showing that it grepped for lines that has doubled words.  But it\nalso says that you only looked for four-letter words, which I do not\nbelieve is the case (you fixed \"the the\", for example), which is\nmisleading.  The \"like this\" part can be an excuse for that\ninaccuracy, but then the whole thing pretty much has already been\nsummarized nicely with your first line already, i.e. \"which repeate\nvarious words\".  If you update it the end part of the sentence to\n\"which repeat various words on the same line\", then the entire\nparagaph can go without losing clarity.\n\nNot a huge deal, though.\n\nThe changes themselves all look good to me.  Thanks.  Will apply.\n\n> Signed-off-by: Andrei Rybak <rybak.a.v@gmail.com>\n> ---\n>\n> Thanks to Felipe Contreras for review.\n>\n> Changes from v1:\n>\n>   - added \"*: \" as area prefix to follow example of Derrick Stolee\n>     https://lore.kernel.org/git/c40ad4a058a75d57adc97b8252ad0f57600b8d86.1623085069.git.gitgitgadget@gmail.com/\n>   - Dropped change in t/t6416-recursive-corner-cases.sh where I misread a\n>     sentence and the duplicated word \"that\" is used correctly. Quote for\n>     reference:\n>\n>       ... so we use one path whose name is arbitrary in the virtual merge base X\n>       between D and E\" and then further let the rename detection to notice that\n>       that arbitrary path gets renamed ...\n>\n>     where first \"that\" is a conjunction between clauses \"we let\" and \"path gets\n>     renamed\" and second \"that\" is a determiner to qualify \"arbitrary path\" to\n>     refer to \"one path\" mentioned in the first clause\n>\n>  Documentation/technical/protocol-v2.txt | 2 +-\n>  attr.c                                  | 2 +-\n>  builtin/log.c                           | 3 +--\n>  git-compat-util.h                       | 2 +-\n>  git-cvsserver.perl                      | 2 +-\n>  remote.c                                | 2 +-\n>  t/t5505-remote.sh                       | 2 +-\n>  t/t9100-git-svn-basic.sh                | 2 +-\n>  8 files changed, 8 insertions(+), 9 deletions(-)\n>\n> diff --git a/Documentation/technical/protocol-v2.txt b/Documentation/technical/protocol-v2.txt\n> index a1e31367f4..1040d85319 100644\n> --- a/Documentation/technical/protocol-v2.txt\n> +++ b/Documentation/technical/protocol-v2.txt\n> @@ -540,7 +540,7 @@ An `object-info` request takes the following arguments:\n>  \tIndicates to the server an object which the client wants to obtain\n>  \tinformation for.\n>  \n> -The response of `object-info` is a list of the the requested object ids\n> +The response of `object-info` is a list of the requested object ids\n>  and associated requested information, each separated by a single space.\n>  \n>  \toutput = info flush-pkt\n> diff --git a/attr.c b/attr.c\n> index 9e897e43f5..d029e681f2 100644\n> --- a/attr.c\n> +++ b/attr.c\n> @@ -685,7 +685,7 @@ static struct attr_stack *read_attr_from_array(const char **list)\n>   * Callers into the attribute system assume there is a single, system-wide\n>   * global state where attributes are read from and when the state is flipped by\n>   * calling git_attr_set_direction(), the stack frames that have been\n> - * constructed need to be discarded so so that subsequent calls into the\n> + * constructed need to be discarded so that subsequent calls into the\n>   * attribute system will lazily read from the right place.  Since changing\n>   * direction causes a global paradigm shift, it should not ever be called while\n>   * another thread could potentially be calling into the attribute system.\n> diff --git a/builtin/log.c b/builtin/log.c\n> index 6102893fcc..516a1142dd 100644\n> --- a/builtin/log.c\n> +++ b/builtin/log.c\n> @@ -1968,8 +1968,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)\n>  \t} else if (rev.diffopt.close_file) {\n>  \t\t/*\n>  \t\t * The diff code parsed --output; it has already opened the\n> -\t\t * file, but but we must instruct it not to close after each\n> -\t\t * diff.\n> +\t\t * file, but we must instruct it not to close after each diff.\n>  \t\t */\n>  \t\trev.diffopt.no_free = 1;\n>  \t} else {\n> diff --git a/git-compat-util.h b/git-compat-util.h\n> index a508dbe5a3..df7dae9be1 100644\n> --- a/git-compat-util.h\n> +++ b/git-compat-util.h\n> @@ -1368,7 +1368,7 @@ static inline void *container_of_or_null_offset(void *ptr, size_t offset)\n>  \t(type *)container_of_or_null_offset(ptr, offsetof(type, member))\n>  \n>  /*\n> - * like offsetof(), but takes a pointer to a a variable of type which\n> + * like offsetof(), but takes a pointer to a variable of type which\n>   * contains @member, instead of a specified type.\n>   * @ptr is subject to multiple evaluation since we can't rely on __typeof__\n>   * everywhere.\n> diff --git a/git-cvsserver.perl b/git-cvsserver.perl\n> index f6f3fc192c..ed035f32c2 100755\n> --- a/git-cvsserver.perl\n> +++ b/git-cvsserver.perl\n> @@ -2149,7 +2149,7 @@ sub req_diff\n>                     ( $meta2->{revision} or \"workingcopy\" ));\n>  \n>          # TODO: Use --label instead of -L because -L is no longer\n> -        #  documented and may go away someday.  Not sure if there there are\n> +        #  documented and may go away someday.  Not sure if there are\n>          #  versions that only support -L, which would make this change risky?\n>          #  http://osdir.com/ml/bug-gnu-utils-gnu/2010-12/msg00060.html\n>          #    (\"man diff\" should actually document the best migration strategy,\n> diff --git a/remote.c b/remote.c\n> index 6d1e8d02df..dfb863d808 100644\n> --- a/remote.c\n> +++ b/remote.c\n> @@ -1592,7 +1592,7 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,\n>  \t\t\telse\n>  \t\t\t\t/*\n>  \t\t\t\t * If the ref isn't stale, and is reachable\n> -\t\t\t\t * from from one of the reflog entries of\n> +\t\t\t\t * from one of the reflog entries of\n>  \t\t\t\t * the local branch, force the update.\n>  \t\t\t\t */\n>  \t\t\t\tforce_ref_update = 1;\n> diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh\n> index c7b392794b..e6e3c8f552 100755\n> --- a/t/t5505-remote.sh\n> +++ b/t/t5505-remote.sh\n> @@ -182,7 +182,7 @@ test_expect_success 'rename errors out early when deleting non-existent branch'\n>  \t)\n>  '\n>  \n> -test_expect_success 'rename errors out early when when new name is invalid' '\n> +test_expect_success 'rename errors out early when new name is invalid' '\n>  \ttest_config remote.foo.vcs bar &&\n>  \techo \"fatal: '\\''invalid...name'\\'' is not a valid remote name\" >expect &&\n>  \ttest_must_fail git remote rename foo invalid...name 2>actual &&\n> diff --git a/t/t9100-git-svn-basic.sh b/t/t9100-git-svn-basic.sh\n> index 1d3fdcc997..ef35a54885 100755\n> --- a/t/t9100-git-svn-basic.sh\n> +++ b/t/t9100-git-svn-basic.sh\n> @@ -330,7 +330,7 @@ test_expect_success 'git-svn works in a bare repository' '\n>  \tgit svn fetch ) &&\n>  \trm -rf bare-repo\n>  \t'\n> -test_expect_success 'git-svn works in in a repository with a gitdir: link' '\n> +test_expect_success 'git-svn works in a repository with a gitdir: link' '\n>  \tmkdir worktree gitdir &&\n>  \t( cd worktree &&\n>  \tgit svn init \"$svnrepo\" &&\n"},{"id":"427096","messageId":"beb55a5a-2507-e194-7e3b-92a028210e43@gmail.com","threadId":"55887","inReplyTo":"xmqq1r99e0ff.fsf@gitster.g","subject":"Re: [PATCH v2] *: fix typos which duplicate a word","fromName":"Andrei Rybak","fromEmail":"rybak.a.v@gmail.com","sentAt":"2021-06-11T09:31:18Z","receivedAt":"2021-06-11T09:32:42Z","isPatch":true,"sender":{"key":"rybak.a.v@gmail.com","avatar":"https://avatars.githubusercontent.com/u/624072?v=4"},"body":"On 11/06/2021 01:59, Junio C Hamano wrote:\n> Andrei Rybak <rybak.a.v@gmail.com> writes:\n> \n>> Fix typos in documentation and code comments which repeat various words.\n> \n> Thanks.\n> \n>> These typos were found by searching using scripts like this:\n>>\n>> \tfor w in $(grep '^....$' /usr/share/dict/words)\n>> \tdo\n>> \t\tgit grep -P \"\\b$w $w\\b\"\n>> \tdone\n> \n> This is clarifying and somewhat puzzling at the same time.\n> \n> It says that doubled words that span across line folding, and\n> doubled words that do not have exactly a single space in between,\n> have gone undetected (which is fine and may be useful information)\n> by showing that it grepped for lines that has doubled words.  But it\n> also says that you only looked for four-letter words, which I do not\n> believe is the case (you fixed \"the the\", for example), which is\n> misleading.  The \"like this\" part can be an excuse for that\n\nIndeed. Basically, it was several scripts with different lists\nof words.  I considered writing:\n\n  \tfor w in <list of words>\n  \tdo\n  \t\tgit grep -P \"\\b$w $w\\b\"\n  \tdone\n\nbut opted for an explicit example of a script used, which may\nbe reused later.\n\n> inaccuracy, but then the whole thing pretty much has already been\n> summarized nicely with your first line already, i.e. \"which repeate\n> various words\".  If you update it the end part of the sentence to\n> \"which repeat various words on the same line\",\n\nSince v2, I've written a script to also check sentences which span\nseveral lines.  I'll send out a v3 with a bunch more fixes.\n\n> then the entire\n> paragaph can go without losing clarity.\n> Not a huge deal, though.\n> \n> The changes themselves all look good to me.  Thanks.  Will apply.\n"},{"id":"427103","messageId":"20210611111850.3430523-1-rybak.a.v@gmail.com","threadId":"55887","inReplyTo":"20210609102641.3531183-1-rybak.a.v@gmail.com","subject":"[PATCH v3] *: fix typos which duplicate a word","fromName":"Andrei Rybak","fromEmail":"rybak.a.v@gmail.com","sentAt":"2021-06-11T11:18:50Z","receivedAt":"2021-06-11T11:20:09Z","isPatch":true,"sender":{"key":"rybak.a.v@gmail.com","avatar":"https://avatars.githubusercontent.com/u/624072?v=4"},"body":"Fix typos in documentation, code comments, and RelNotes which repeat\nvarious words.  In trivial cases, just delete the duplicated word and\nrewrap text, if needed.  Reword the affected sentence in\nDocumentation/RelNotes/1.8.4.txt for it to make sense.\n\nSigned-off-by: Andrei Rybak <rybak.a.v@gmail.com>\n---\n\nThanks to Felipe Contreras and Junio C Hamano for review.\n\nChanges since v2:\n\n  - reworded commit message\n  - new fixes in files:\n    - Documentation/RelNotes/1.6.0.3.txt\n    - Documentation/RelNotes/1.8.4.txt\n    - Documentation/RelNotes/2.29.0.txt\n    - Documentation/RelNotes/2.8.0.txt\n    - Documentation/technical/hash-function-transition.txt\n    - merge-recursive.c\n\n Documentation/RelNotes/1.6.0.3.txt                   | 2 +-\n Documentation/RelNotes/1.8.4.txt                     | 2 +-\n Documentation/RelNotes/2.29.0.txt                    | 4 ++--\n Documentation/RelNotes/2.8.0.txt                     | 2 +-\n Documentation/technical/hash-function-transition.txt | 2 +-\n Documentation/technical/protocol-v2.txt              | 2 +-\n attr.c                                               | 2 +-\n builtin/log.c                                        | 3 +--\n git-compat-util.h                                    | 2 +-\n git-cvsserver.perl                                   | 2 +-\n merge-recursive.c                                    | 2 +-\n remote.c                                             | 2 +-\n t/t5505-remote.sh                                    | 2 +-\n t/t9100-git-svn-basic.sh                             | 2 +-\n 14 files changed, 15 insertions(+), 16 deletions(-)\n\ndiff --git a/Documentation/RelNotes/1.6.0.3.txt b/Documentation/RelNotes/1.6.0.3.txt\nindex ae0577836a..ad36c0f0b7 100644\n--- a/Documentation/RelNotes/1.6.0.3.txt\n+++ b/Documentation/RelNotes/1.6.0.3.txt\n@@ -50,7 +50,7 @@ Fixes since v1.6.0.2\n   if the working tree is currently dirty.\n \n * \"git for-each-ref --format=%(subject)\" fixed for commits with no\n-  no newline in the message body.\n+  newline in the message body.\n \n * \"git remote\" fixed to protect printf from user input.\n \ndiff --git a/Documentation/RelNotes/1.8.4.txt b/Documentation/RelNotes/1.8.4.txt\nindex 255e185af6..882fa713ef 100644\n--- a/Documentation/RelNotes/1.8.4.txt\n+++ b/Documentation/RelNotes/1.8.4.txt\n@@ -365,7 +365,7 @@ details).\n    (merge 2fbd4f9 mh/maint-lockfile-overflow later to maint).\n \n  * Invocations of \"git checkout\" used internally by \"git rebase\" were\n-   counted as \"checkout\", and affected later \"git checkout -\" to the\n+   counted as \"checkout\", and affected later \"git checkout -\" which took\n    the user to an unexpected place.\n    (merge 3bed291 rr/rebase-checkout-reflog later to maint).\n \ndiff --git a/Documentation/RelNotes/2.29.0.txt b/Documentation/RelNotes/2.29.0.txt\nindex 06ba2f803f..1f41302ebb 100644\n--- a/Documentation/RelNotes/2.29.0.txt\n+++ b/Documentation/RelNotes/2.29.0.txt\n@@ -184,8 +184,8 @@ Performance, Internal Implementation, Development Support etc.\n    the ref backend in use, as its format is much richer than the\n    normal refs, and written directly by \"git fetch\" as a plain file..\n \n- * An unused binary has been discarded, and and a bunch of commands\n-   have been turned into into built-in.\n+ * An unused binary has been discarded, and a bunch of commands\n+   have been turned into built-in.\n \n  * A handful of places in in-tree code still relied on being able to\n    execute the git subcommands, especially built-ins, in \"git-foo\"\ndiff --git a/Documentation/RelNotes/2.8.0.txt b/Documentation/RelNotes/2.8.0.txt\nindex 27320b6a9f..38453281b8 100644\n--- a/Documentation/RelNotes/2.8.0.txt\n+++ b/Documentation/RelNotes/2.8.0.txt\n@@ -377,7 +377,7 @@ notes for details).\n    on that order.\n \n  * \"git show 'HEAD:Foo[BAR]Baz'\" did not interpret the argument as a\n-   rev, i.e. the object named by the the pathname with wildcard\n+   rev, i.e. the object named by the pathname with wildcard\n    characters in a tree object.\n    (merge aac4fac nd/dwim-wildcards-as-pathspecs later to maint).\n \ndiff --git a/Documentation/technical/hash-function-transition.txt b/Documentation/technical/hash-function-transition.txt\nindex 7c1630bf83..260224b033 100644\n--- a/Documentation/technical/hash-function-transition.txt\n+++ b/Documentation/technical/hash-function-transition.txt\n@@ -599,7 +599,7 @@ supports four different modes of operation:\n     convert any object names written to output to SHA-1, but store\n     objects using SHA-256.  This allows users to test the code with no\n     visible behavior change except for performance.  This allows\n-    allows running even tests that assume the SHA-1 hash function, to\n+    running even tests that assume the SHA-1 hash function, to\n     sanity-check the behavior of the new mode.\n \n  2. (\"early transition\") Allow both SHA-1 and SHA-256 object names in\ndiff --git a/Documentation/technical/protocol-v2.txt b/Documentation/technical/protocol-v2.txt\nindex a1e31367f4..1040d85319 100644\n--- a/Documentation/technical/protocol-v2.txt\n+++ b/Documentation/technical/protocol-v2.txt\n@@ -540,7 +540,7 @@ An `object-info` request takes the following arguments:\n \tIndicates to the server an object which the client wants to obtain\n \tinformation for.\n \n-The response of `object-info` is a list of the the requested object ids\n+The response of `object-info` is a list of the requested object ids\n and associated requested information, each separated by a single space.\n \n \toutput = info flush-pkt\ndiff --git a/attr.c b/attr.c\nindex 9e897e43f5..d029e681f2 100644\n--- a/attr.c\n+++ b/attr.c\n@@ -685,7 +685,7 @@ static struct attr_stack *read_attr_from_array(const char **list)\n  * Callers into the attribute system assume there is a single, system-wide\n  * global state where attributes are read from and when the state is flipped by\n  * calling git_attr_set_direction(), the stack frames that have been\n- * constructed need to be discarded so so that subsequent calls into the\n+ * constructed need to be discarded so that subsequent calls into the\n  * attribute system will lazily read from the right place.  Since changing\n  * direction causes a global paradigm shift, it should not ever be called while\n  * another thread could potentially be calling into the attribute system.\ndiff --git a/builtin/log.c b/builtin/log.c\nindex 6102893fcc..516a1142dd 100644\n--- a/builtin/log.c\n+++ b/builtin/log.c\n@@ -1968,8 +1968,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)\n \t} else if (rev.diffopt.close_file) {\n \t\t/*\n \t\t * The diff code parsed --output; it has already opened the\n-\t\t * file, but but we must instruct it not to close after each\n-\t\t * diff.\n+\t\t * file, but we must instruct it not to close after each diff.\n \t\t */\n \t\trev.diffopt.no_free = 1;\n \t} else {\ndiff --git a/git-compat-util.h b/git-compat-util.h\nindex a508dbe5a3..df7dae9be1 100644\n--- a/git-compat-util.h\n+++ b/git-compat-util.h\n@@ -1368,7 +1368,7 @@ static inline void *container_of_or_null_offset(void *ptr, size_t offset)\n \t(type *)container_of_or_null_offset(ptr, offsetof(type, member))\n \n /*\n- * like offsetof(), but takes a pointer to a a variable of type which\n+ * like offsetof(), but takes a pointer to a variable of type which\n  * contains @member, instead of a specified type.\n  * @ptr is subject to multiple evaluation since we can't rely on __typeof__\n  * everywhere.\ndiff --git a/git-cvsserver.perl b/git-cvsserver.perl\nindex f6f3fc192c..ed035f32c2 100755\n--- a/git-cvsserver.perl\n+++ b/git-cvsserver.perl\n@@ -2149,7 +2149,7 @@ sub req_diff\n                    ( $meta2->{revision} or \"workingcopy\" ));\n \n         # TODO: Use --label instead of -L because -L is no longer\n-        #  documented and may go away someday.  Not sure if there there are\n+        #  documented and may go away someday.  Not sure if there are\n         #  versions that only support -L, which would make this change risky?\n         #  http://osdir.com/ml/bug-gnu-utils-gnu/2010-12/msg00060.html\n         #    (\"man diff\" should actually document the best migration strategy,\ndiff --git a/merge-recursive.c b/merge-recursive.c\nindex d146bb116f..4327e0cfa3 100644\n--- a/merge-recursive.c\n+++ b/merge-recursive.c\n@@ -2152,7 +2152,7 @@ static char *handle_path_level_conflicts(struct merge_options *opt,\n  *      implicit renaming of files that should be left in place.  (See\n  *      testcase 6b in t6043 for details.)\n  *   2. Prune directory renames if there are still files left in the\n- *      the original directory.  These represent a partial directory rename,\n+ *      original directory.  These represent a partial directory rename,\n  *      i.e. a rename where only some of the files within the directory\n  *      were renamed elsewhere.  (Technically, this could be done earlier\n  *      in get_directory_renames(), except that would prevent us from\ndiff --git a/remote.c b/remote.c\nindex 6d1e8d02df..dfb863d808 100644\n--- a/remote.c\n+++ b/remote.c\n@@ -1592,7 +1592,7 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,\n \t\t\telse\n \t\t\t\t/*\n \t\t\t\t * If the ref isn't stale, and is reachable\n-\t\t\t\t * from from one of the reflog entries of\n+\t\t\t\t * from one of the reflog entries of\n \t\t\t\t * the local branch, force the update.\n \t\t\t\t */\n \t\t\t\tforce_ref_update = 1;\ndiff --git a/t/t5505-remote.sh b/t/t5505-remote.sh\nindex c7b392794b..e6e3c8f552 100755\n--- a/t/t5505-remote.sh\n+++ b/t/t5505-remote.sh\n@@ -182,7 +182,7 @@ test_expect_success 'rename errors out early when deleting non-existent branch'\n \t)\n '\n \n-test_expect_success 'rename errors out early when when new name is invalid' '\n+test_expect_success 'rename errors out early when new name is invalid' '\n \ttest_config remote.foo.vcs bar &&\n \techo \"fatal: '\\''invalid...name'\\'' is not a valid remote name\" >expect &&\n \ttest_must_fail git remote rename foo invalid...name 2>actual &&\ndiff --git a/t/t9100-git-svn-basic.sh b/t/t9100-git-svn-basic.sh\nindex 1d3fdcc997..ef35a54885 100755\n--- a/t/t9100-git-svn-basic.sh\n+++ b/t/t9100-git-svn-basic.sh\n@@ -330,7 +330,7 @@ test_expect_success 'git-svn works in a bare repository' '\n \tgit svn fetch ) &&\n \trm -rf bare-repo\n \t'\n-test_expect_success 'git-svn works in in a repository with a gitdir: link' '\n+test_expect_success 'git-svn works in a repository with a gitdir: link' '\n \tmkdir worktree gitdir &&\n \t( cd worktree &&\n \tgit svn init \"$svnrepo\" &&\n-- \n2.31.1\n\n"},{"id":"427257","messageId":"xmqqfsxl1c94.fsf@gitster.g","threadId":"55887","inReplyTo":"20210611111850.3430523-1-rybak.a.v@gmail.com","subject":"Re: [PATCH v3] *: fix typos which duplicate a word","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2021-06-14T01:11:19Z","receivedAt":"2021-06-14T01:11:25Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Andrei Rybak <rybak.a.v@gmail.com> writes:\n\n> Fix typos in documentation, code comments, and RelNotes which repeat\n> various words.  In trivial cases, just delete the duplicated word and\n> rewrap text, if needed.  Reword the affected sentence in\n> Documentation/RelNotes/1.8.4.txt for it to make sense.\n\nThanks.  I usually avoid touching published release notes (it is not\nlike we'd issue 1.8.4.1 maintenance release to apply this typofix),\nbut as you spent time to fix them all, and as we spent time to review\nthe changes, let's take all of them.\n\n>   * Invocations of \"git checkout\" used internally by \"git rebase\" were\n> -   counted as \"checkout\", and affected later \"git checkout -\" to the\n> +   counted as \"checkout\", and affected later \"git checkout -\" which took\n>     the user to an unexpected place.\n>     (merge 3bed291 rr/rebase-checkout-reflog later to maint).\n\nI think this one actually wanted to say \"affected later X to take\nthe user to an unexpected place\", but \", which\" is OK, too.\n\nThanks.\n"}]}