1
0
mirror of https://github.com/git/git.git synced 2024-10-21 04:39:25 +02:00

Merge branch 'hg/id-munging'

* hg/id-munging:
  convert: Keep foreign $Id$ on checkout.
  convert: Safer handling of $Id$ contraction.
This commit is contained in:
Junio C Hamano 2010-06-18 11:16:54 -07:00
commit 6c6f87842b
2 changed files with 36 additions and 8 deletions

@ -425,6 +425,8 @@ static int count_ident(const char *cp, unsigned long size)
cnt++; cnt++;
break; break;
} }
if (ch == '\n')
break;
} }
} }
return cnt; return cnt;
@ -455,6 +457,11 @@ static int ident_to_git(const char *path, const char *src, size_t len,
dollar = memchr(src + 3, '$', len - 3); dollar = memchr(src + 3, '$', len - 3);
if (!dollar) if (!dollar)
break; break;
if (memchr(src + 3, '\n', dollar - src - 3)) {
/* Line break before the next dollar. */
continue;
}
memcpy(dst, "Id$", 3); memcpy(dst, "Id$", 3);
dst += 3; dst += 3;
len -= dollar + 1 - src; len -= dollar + 1 - src;
@ -470,7 +477,7 @@ static int ident_to_worktree(const char *path, const char *src, size_t len,
struct strbuf *buf, int ident) struct strbuf *buf, int ident)
{ {
unsigned char sha1[20]; unsigned char sha1[20];
char *to_free = NULL, *dollar; char *to_free = NULL, *dollar, *spc;
int cnt; int cnt;
if (!ident) if (!ident)
@ -506,7 +513,10 @@ static int ident_to_worktree(const char *path, const char *src, size_t len,
} else if (src[2] == ':') { } else if (src[2] == ':') {
/* /*
* It's possible that an expanded Id has crept its way into the * It's possible that an expanded Id has crept its way into the
* repository, we cope with that by stripping the expansion out * repository, we cope with that by stripping the expansion out.
* This is probably not a good idea, since it will cause changes
* on checkout, which won't go away by stash, but let's keep it
* for git-style ids.
*/ */
dollar = memchr(src + 3, '$', len - 3); dollar = memchr(src + 3, '$', len - 3);
if (!dollar) { if (!dollar) {
@ -514,6 +524,20 @@ static int ident_to_worktree(const char *path, const char *src, size_t len,
break; break;
} }
if (memchr(src + 3, '\n', dollar - src - 3)) {
/* Line break before the next dollar. */
continue;
}
spc = memchr(src + 4, ' ', dollar - src - 4);
if (spc && spc < dollar-1) {
/* There are spaces in unexpected places.
* This is probably an id from some other
* versioning system. Keep it for now.
*/
continue;
}
len -= dollar + 1 - src; len -= dollar + 1 - src;
src = dollar + 1; src = dollar + 1;
} else { } else {

@ -65,17 +65,21 @@ test_expect_success expanded_in_repo '
echo "\$Id:NoSpaceAtFront \$" echo "\$Id:NoSpaceAtFront \$"
echo "\$Id:NoSpaceAtEitherEnd\$" echo "\$Id:NoSpaceAtEitherEnd\$"
echo "\$Id: NoTerminatingSymbol" echo "\$Id: NoTerminatingSymbol"
echo "\$Id: Foreign Commit With Spaces \$"
echo "\$Id: NoTerminatingSymbolAtEOF"
} > expanded-keywords && } > expanded-keywords &&
{ {
echo "File with expanded keywords" echo "File with expanded keywords"
echo "\$Id: 4f21723e7b15065df7de95bd46c8ba6fb1818f4c \$" echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
echo "\$Id: 4f21723e7b15065df7de95bd46c8ba6fb1818f4c \$" echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
echo "\$Id: 4f21723e7b15065df7de95bd46c8ba6fb1818f4c \$" echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
echo "\$Id: 4f21723e7b15065df7de95bd46c8ba6fb1818f4c \$" echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
echo "\$Id: 4f21723e7b15065df7de95bd46c8ba6fb1818f4c \$" echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
echo "\$Id: 4f21723e7b15065df7de95bd46c8ba6fb1818f4c \$" echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
echo "\$Id: NoTerminatingSymbol" echo "\$Id: NoTerminatingSymbol"
echo "\$Id: Foreign Commit With Spaces \$"
echo "\$Id: NoTerminatingSymbolAtEOF"
} > expected-output && } > expected-output &&
git add expanded-keywords && git add expanded-keywords &&