Otherwise ".git" is removed from every remote path which has it, including "/some/path/somename.git". Signed-off-by: Alex Riesen <raa.lkml@xxxxxxxxx> --- Fixed truncation of "/.git/" (with a trailing slash). The old code broke t5515, because it has left "../.git/" unchanged, but should have removed ".git/". builtin-fetch--tool.c | 21 +++++++++++++++------ 1 files changed, 15 insertions(+), 6 deletions(-)
From c767dcc2000c72909013b9e97b18403686b44498 Mon Sep 17 00:00:00 2001 From: Alex Riesen <raa@xxxxxxxxxxxxxxxxx> Date: Wed, 6 Jun 2007 00:16:14 +0200 Subject: [PATCH] Fix the remote note the fetch-tool prints after storing a fetched reference Otherwise ".git" is removed from every remote name which has it: $ git fetch -v * refs/heads/origin: same as branch 'master' of /home/user/linux commit: 5ecd310 $ ls /home/user/linux ls: /home/user/linux: No such file or directory $ ls /home/user/linux.git HEAD objects packed-refs ... Signed-off-by: Alex Riesen <raa.lkml@xxxxxxxxx> --- builtin-fetch--tool.c | 21 +++++++++++++++------ 1 files changed, 15 insertions(+), 6 deletions(-) diff --git a/builtin-fetch--tool.c b/builtin-fetch--tool.c index ed4d5de..ec4a8c3 100644 --- a/builtin-fetch--tool.c +++ b/builtin-fetch--tool.c @@ -140,7 +140,7 @@ static int append_fetch_head(FILE *fp, int verbose, int force) { struct commit *commit; - int remote_len, i, note_len; + int remote_len, note_len; unsigned char sha1[20]; char note[1024]; const char *what, *kind; @@ -173,11 +173,20 @@ static int append_fetch_head(FILE *fp, } remote_len = strlen(remote); - for (i = remote_len - 1; remote[i] == '/' && 0 <= i; i--) - ; - remote_len = i + 1; - if (4 < i && !strncmp(".git", remote + i - 3, 4)) - remote_len = i - 3; + if (remote_len > 5) { + static const char ending[] = "/.git"; + const char *pe = ending + 4; + const char *pr = remote + remote_len - 1; + /* ignore trailing slashes */ + while (pr > remote && *pr == '/') + --pr; + for (; pr > remote && pe > ending; --pr, --pe) + if (*pr != *pe) + break; + if (pe == ending) + /* "+ 1" to leave the / before .git */ + remote_len = pr - remote + 1; + } note_len = 0; if (*what) { -- 1.5.2.1.868.gb85c1