[PATCH] Fix "git-local-fetch -s" with packed source repository
authorSergey Vlasov <vsu@altlinux.ru>
Fri, 23 Sep 2005 12:28:33 +0000 (16:28 +0400)
committerJunio C Hamano <junkio@cox.net>
Fri, 23 Sep 2005 21:30:45 +0000 (14:30 -0700)
"git-local-fetch -s" did not work with a packed repository, because
symlink() happily created a link to a non-existing object file,
therefore fetch_file() always returned success, and fetch_pack() was
not called.  Fixed by calling stat() before symlink() to ensure the
file really exists.

Signed-off-by: Sergey Vlasov <vsu@altlinux.ru>
Signed-off-by: Junio C Hamano <junkio@cox.net>
local-fetch.c

index a3e35f9..6216c68 100644 (file)
@@ -65,9 +65,17 @@ static int copy_file(const char *source, const char *dest, const char *hex)
                        return -1;
                }
        }
-       if (use_symlink && !symlink(source, dest)) {
-               pull_say("symlink %s\n", hex);
-               return 0;
+       if (use_symlink) {
+               struct stat st;
+               if (stat(source, &st)) {
+                       fprintf(stderr, "cannot stat %s: %s\n", source,
+                               strerror(errno));
+                       return -1;
+               }
+               if (!symlink(source, dest)) {
+                       pull_say("symlink %s\n", hex);
+                       return 0;
+               }
        }
        if (use_filecopy) {
                int ifd, ofd, status;