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
Daniel Barkalow <barkalow@iabervon.org>
Date
May 20, 2008, 18:16 UTC
Message-ID
<alpine.LNX.1.00.0805201311180.19665@iabervon.org>
In-Reply-To
<C6tFzFdDycYRRcjxtVG00CVX-Nsu7-UblPCaZmTxmWIUTFAsgReYbQ@cipher.nrlssc.navy.mil>
On Tue, 20 May 2008, Brandon Casey wrote:
Show 10 quoted lines
> Brandon Casey wrote:
> > 
> > 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.

I think that the shell version's behavior changed at some point, too. I think I tried at some point to figure out exactly what the specified behavior was, and couldn't come up with anything that entirely matched.

> Something like this (if not too ugly) might do the trick:
I think that's good behavior, but it's kind of ugly. How about:
-----
commit 83afef6a159365c1b9a7a1961cb4c95df24fbcac
Author: Daniel Barkalow <barkalow@iabervon.org>
Date:   Tue May 20 14:15:14 2008 -0400
    Fall back to copying if hardlinking fails
    
    Note that it stops trying hardlinks if any fail.
    
    Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
diff --git a/builtin-clone.c b/builtin-clone.c
index 8713128..42633ae 100644
--- a/builtin-clone.c
+++ b/builtin-clone.c
@@ -207,13 +207,15 @@ 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) {
-			if (copy_file(dest, src, 0666))
-				die("failed to copy file to %s\n", dest);
-		} else {
-			if (link(src, dest))
+		if (!option_no_hardlinks) {
+			if (!link(src, dest))
+				continue;
+			if (option_local)
 				die("failed to create link %s\n", dest);
+			option_no_hardlinks = 1;
 		}
+		if (copy_file(dest, src, 0666))
+			die("failed to copy file to %s\n", dest);
 	}
 }
 
Previous: Brandon CaseyNext: Brandon Casey
Message 4 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.