summaryrefslogtreecommitdiff
path: root/convert.c
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2010-06-18 11:16:54 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2010-06-18 11:16:54 -0700
commit6c6f87842bcb8ac4d36922cec5b5ce25de14756e (patch)
treea846522ebad998f36a8d5a27a7301fc72825efc9 /convert.c
parentMerge branch 'tc/merge-m-log' (diff)
parentconvert: Keep foreign $Id$ on checkout. (diff)
downloadtgif-6c6f87842bcb8ac4d36922cec5b5ce25de14756e.tar.xz
Merge branch 'hg/id-munging'
* hg/id-munging: convert: Keep foreign $Id$ on checkout. convert: Safer handling of $Id$ contraction.
Diffstat (limited to 'convert.c')
-rw-r--r--convert.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/convert.c b/convert.c
index 4f8fcb7bbb..5a0b7fbca4 100644
--- a/convert.c
+++ b/convert.c
@@ -425,6 +425,8 @@ static int count_ident(const char *cp, unsigned long size)
cnt++;
break;
}
+ if (ch == '\n')
+ break;
}
}
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);
if (!dollar)
break;
+ if (memchr(src + 3, '\n', dollar - src - 3)) {
+ /* Line break before the next dollar. */
+ continue;
+ }
+
memcpy(dst, "Id$", 3);
dst += 3;
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)
{
unsigned char sha1[20];
- char *to_free = NULL, *dollar;
+ char *to_free = NULL, *dollar, *spc;
int cnt;
if (!ident)
@@ -506,7 +513,10 @@ static int ident_to_worktree(const char *path, const char *src, size_t len,
} else if (src[2] == ':') {
/*
* 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);
if (!dollar) {
@@ -514,6 +524,20 @@ static int ident_to_worktree(const char *path, const char *src, size_t len,
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;
src = dollar + 1;
} else {