diff options
author | Junio C Hamano <junkio@cox.net> | 2005-05-04 01:28:45 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-05-04 01:28:45 -0700 |
commit | fd0ffd3ad12d6aa49b8ac2cce7728976d678cc63 (patch) | |
tree | e9d352181052a3e8a4e4ff25611a14f9aa3a533d | |
parent | b2d62f161ebfb628cbe32900213ac18f9aa5bcb4 (diff) | |
download | git-fd0ffd3ad12d6aa49b8ac2cce7728976d678cc63.tar.gz git-fd0ffd3ad12d6aa49b8ac2cce7728976d678cc63.tar.xz |
Short-cut error return path in git-local-pull.
When git-local-pull with -l option gets ENOENT attempting to create
a hard link, there is no point falling back to other copy methods.
With this patch, git-local-pull detects such a case and gives up
copying the file early.
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | local-pull.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/local-pull.c b/local-pull.c index ea38d87df..4f52bca48 100644 --- a/local-pull.c +++ b/local-pull.c @@ -39,12 +39,19 @@ int fetch(unsigned char *sha1) filename[object_name_start+1] = hex[1]; filename[object_name_start+2] = '/'; strcpy(filename + object_name_start + 3, hex + 2); - if (use_link && !link(filename, dest_filename)) { - say("Hardlinked %s.\n", hex); - return 0; + if (use_link) { + if (!link(filename, dest_filename)) { + say("link %s\n", hex); + return 0; + } + /* If we got ENOENT there is no point continuing. */ + if (errno == ENOENT) { + fprintf(stderr, "does not exist %s\n", filename); + return -1; + } } if (use_symlink && !symlink(filename, dest_filename)) { - say("Symlinked %s.\n", hex); + say("symlink %s\n", hex); return 0; } if (use_filecopy) { @@ -54,13 +61,13 @@ int fetch(unsigned char *sha1) ifd = open(filename, O_RDONLY); if (ifd < 0 || fstat(ifd, &st) < 0) { close(ifd); - fprintf(stderr, "Cannot open %s\n", filename); + fprintf(stderr, "cannot open %s\n", filename); return -1; } map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, ifd, 0); close(ifd); if (-1 == (int)(long)map) { - fprintf(stderr, "Cannot mmap %s\n", filename); + fprintf(stderr, "cannot mmap %s\n", filename); return -1; } ofd = open(dest_filename, O_WRONLY | O_CREAT | O_EXCL, 0666); @@ -69,13 +76,13 @@ int fetch(unsigned char *sha1) munmap(map, st.st_size); close(ofd); if (status) - fprintf(stderr, "Cannot write %s (%ld bytes)\n", + fprintf(stderr, "cannot write %s (%ld bytes)\n", dest_filename, st.st_size); else - say("Copied %s.\n", hex); + say("copy %s\n", hex); return status; } - fprintf(stderr, "No copy method was provided to copy %s.\n", hex); + fprintf(stderr, "failed to copy %s with given copy methods.\n", hex); return -1; } |