git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <junkio@cox.net>
To: Linus Torvalds <torvalds@osdl.org>
Cc: git@vger.kernel.org
Subject: [PATCH] Short-cut error return path in git-local-pull.
Date: Mon, 02 May 2005 17:26:17 -0700	[thread overview]
Message-ID: <7vll6xnoie.fsf@assigned-by-dhcp.cox.net> (raw)

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.
This patch implements a short-cut to detect that case.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---

local-pull.c |   25 ++++++++++++++++---------
1 files changed, 16 insertions(+), 9 deletions(-)

--- 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;
 }
 


                 reply	other threads:[~2005-05-03  0:21 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7vll6xnoie.fsf@assigned-by-dhcp.cox.net \
    --to=junkio@cox.net \
    --cc=git@vger.kernel.org \
    --cc=torvalds@osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).