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

Re: builtin-clone does not fallback to copy when link fails

From
Brandon Casey <casey@nrlssc.navy.mil>
Date
May 20, 2008, 16:45 UTC
Message-ID
<C6tFzFdDycYRRcjxtVG00CVX-Nsu7-UblPCaZmTxmWIUTFAsgReYbQ@cipher.nrlssc.navy.mil>
In-Reply-To
<oguFi9b5ZAq84dsDzWpm0tpI_xzucMxL23YhxIjDS5NTdpslAnzo6w@cipher.nrlssc.navy.mil>
Brandon Casey wrote:
Show 9 quoted lines
> 
> When cloning with the new builtin-clone, if the src repo is not
> on the same disk as the dest repo, cloning fails. This is because
> hard linking does not fall back to copying like the shell version
> did.
> 
> The shell version also made a distinction between defaulting to
> hard linking and an explicit request to hard link. In the latter
> case it would not fall back to copying, but would die.
Something like this (if not too ugly) might do the trick:
diff --git a/builtin-clone.c b/builtin-clone.c
index 8713128..1062371 100644
--- a/builtin-clone.c
+++ b/builtin-clone.c
@@ -208,11 +208,17 @@ static void copy_or_link_directory(char *src, char *dest)
 		if (unlink(dest) && errno != ENOENT)
 			die("failed to unlink %s\n", dest);
 		if (option_no_hardlinks) {
+FALLBACK_TO_COPY:
 			if (copy_file(dest, src, 0666))
 				die("failed to copy file to %s\n", dest);
 		} else {
-			if (link(src, dest))
+			if (link(src, dest)) {
+				if (errno == EXDEV && !option_local) {
+				    	option_no_hardlinks = 1;
+					goto FALLBACK_TO_COPY;
+				}
 				die("failed to create link %s\n", dest);
+			}
 		}
 	}
 }
Previous: Brandon CaseyNext: Brandon Casey
Message 2 of 6 in “builtin-clone does not fallback to copy when link fails”
  1. Brandon CaseyMay 20, 2008
  2. Brandon CaseyMay 20, 2008
  3. Brandon CaseyMay 20, 2008
  4. Daniel BarkalowMay 20, 2008
  5. Brandon CaseyMay 20, 2008
  6. Johannes SchindelinMay 20, 2008

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.