git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/5] convert: Keep foreign $Id$ on checkout.

From
Henrik Grubbström (Grubba) <grubba@grubba.org>
Date
Mar 29, 2010, 11:28 UTC
Message-ID
<6d9d8b0eaa022f441c507b141ff0efa3f21d1988.1269860022.git.grubba@grubba.org>
In-Reply-To
<a75a46b1b6fdb9d52f608643676512e87474e16d.1269860022.git.grubba@grubba.org>

If there are foreign $Id$ keywords in the repository, they are most likely there for a reason. Let's keep them on checkout (which is also what the documentation indicates). Foreign $Id$ keywords are now recognized by there being multiple space separated fields in $Id:xxxxx$.

Signed-off-by: Henrik Grubbström <grubba@grubba.org>
---
The typical use case is for repositories that have been converted
from some other VCS, where it is desirable to keep the old identifiers
around until there's some other reason to alter the file.
 convert.c             |   16 ++++++++++++++--
 t/t0021-conversion.sh |    2 +-
 2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/convert.c b/convert.c
index 239fa0a..5a0b7fb 100644
--- a/convert.c
+++ b/convert.c
@@ -477,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)
@@ -513,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) {
@@ -526,6 +529,15 @@ static int ident_to_worktree(const char *path, const char *src, size_t len,
 				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 {
diff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh
index 29438c5..828e35b 100755
--- a/t/t0021-conversion.sh
+++ b/t/t0021-conversion.sh
@@ -78,7 +78,7 @@ test_expect_success expanded_in_repo '
 		echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
 		echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
 		echo "\$Id: NoTerminatingSymbol"
-		echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
+		echo "\$Id: Foreign Commit With Spaces \$"
 		echo "\$Id: NoTerminatingSymbolAtEOF"
 	} > expected-output &&
 
-- 
1.6.4.122.g6ffd7
Previous: Henrik Grubbström (Grubba)Next: Henrik Grubbström (Grubba)
Message 3 of 14 in “ident attribute related patches (resend w/ testsuite v3)”
  1. 0/5 ident attribute related patches (resend w/ testsuite v3)Henrik Grubbström (Grubba), Mar 29, 2010
  2. 1/5 convert: Safer handling of $Id$ contraction.Henrik Grubbström (Grubba), Mar 29, 2010
  3. 2/5 convert: Keep foreign $Id$ on checkout.Henrik Grubbström (Grubba), Mar 29, 2010
  4. 3/5 convert: Use the enum constant SAFE_CRLF_FALSE.Henrik Grubbström (Grubba), Mar 29, 2010
  5. 4/5 convert: Inhibit contraction of foreign $Id$ during stats.Henrik Grubbström (Grubba), Mar 29, 2010
  6. 5/5 convert: Added core.refilteronadd feature.Henrik Grubbström (Grubba), Mar 29, 2010
  7. Stephen R. van den BergMar 29, 2010
  8. Stephen R. van den BergMar 29, 2010
  9. Junio C HamanoApr 1, 2010
  10. Henrik GrubbströmApr 6, 2010
  11. Stephen R. van den BergMar 29, 2010
  12. Junio C HamanoApr 1, 2010
  13. Stephen R. van den BergMar 29, 2010
  14. Stephen R. van den BergMar 29, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.