Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes: > I have a remote named "jch" and it has a branch with the same name. And > fetch.output is set to "compact". Fetching this remote looks like this > > From https://github.com/gitster/git > + eb7fd39f6b...835363af2f jch -> */jch (forced update) > 6f11fd5edb..59b12ae96a nd/config-move-to -> jch/* > * [new branch] nd/diff-parseopt -> jch/* > * [new branch] nd/the-index-final -> jch/* > > Notice that the local side of branch jch starts with "*" instead of > ending with it like the rest. It's not exactly wrong. It just looks > weird. > > This patch changes the find-and-replace code a bit to try finding prefix > first before falling back to strstr() which finds a substring from left > to right. Now we have something less OCD > > From https://github.com/gitster/git > + eb7fd39f6b...835363af2f jch -> jch/* (forced update) > 6f11fd5edb..59b12ae96a nd/config-move-to -> jch/* > * [new branch] nd/diff-parseopt -> jch/* > * [new branch] nd/the-index-final -> jch/* Sounds good. I do not think strstr() would ever be correct in this application in the first place. In what situation would it produce a reasonable result, I wonder? > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > --- > builtin/fetch.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/builtin/fetch.c b/builtin/fetch.c > index e0140327aa..e0173f8a33 100644 > --- a/builtin/fetch.c > +++ b/builtin/fetch.c > @@ -629,9 +629,14 @@ static int find_and_replace(struct strbuf *haystack, > const char *needle, > const char *placeholder) > { > - const char *p = strstr(haystack->buf, needle); > + const char *p = NULL; > int plen, nlen; > > + nlen = strlen(needle); > + if (ends_with(haystack->buf, needle)) > + p = haystack->buf + haystack->len - nlen; > + else > + p = strstr(haystack->buf, needle); > if (!p) > return 0; > > @@ -639,7 +644,6 @@ static int find_and_replace(struct strbuf *haystack, > return 0; > > plen = strlen(p); > - nlen = strlen(needle); > if (plen > nlen && p[nlen] != '/') > return 0;