diff options
author | Jeff King <peff@peff.net> | 2008-07-08 00:08:02 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-07-08 13:05:11 -0700 |
commit | 0b294c0abf00a9cf7468e0ea62722ae23b0816cc (patch) | |
tree | 5e424be8dc66b52a104328ee212347aa58811db5 | |
parent | 30161e73d17f309f9a7566459035b06ec748be7d (diff) | |
download | git-0b294c0abf00a9cf7468e0ea62722ae23b0816cc.tar.gz git-0b294c0abf00a9cf7468e0ea62722ae23b0816cc.tar.xz |
make deleting a missing ref more quiet
If git attempts to delete a ref, but the unlink of the ref
file fails, we print a message to stderr. This is usually a
good thing, but if the error is ENOENT, then it indicates
that the ref has _already_ been deleted. And since that's
our goal, it doesn't make sense to complain to the user.
This harmonizes the error reporting behavior for the
unpacked and packed cases; the packed case already printed
nothing on ENOENT, but the unpacked printed unconditionally.
Additionally, send-pack would, when deleting the tracking
ref corresponding to a remote delete, print "Failed to
delete" on any failure. This can be a misleading
message, since we actually _did_ delete at the remote side,
but we failed to delete locally. Rather than make the
message more precise, let's just eliminate it entirely; the
delete_ref routine already takes care of printing out a much
more specific message about what went wrong.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin-send-pack.c | 3 | ||||
-rw-r--r-- | refs.c | 2 | ||||
-rwxr-xr-x | t/t5404-tracking-branches.sh | 7 |
3 files changed, 9 insertions, 3 deletions
diff --git a/builtin-send-pack.c b/builtin-send-pack.c index d76260c09..a708d0af4 100644 --- a/builtin-send-pack.c +++ b/builtin-send-pack.c @@ -226,8 +226,7 @@ static void update_tracking_ref(struct remote *remote, struct ref *ref) if (args.verbose) fprintf(stderr, "updating local tracking ref '%s'\n", rs.dst); if (ref->deletion) { - if (delete_ref(rs.dst, NULL)) - error("Failed to delete"); + delete_ref(rs.dst, NULL); } else update_ref("update by push", rs.dst, ref->new_sha1, NULL, 0, 0); @@ -925,7 +925,7 @@ int delete_ref(const char *refname, const unsigned char *sha1) i = strlen(lock->lk->filename) - 5; /* .lock */ lock->lk->filename[i] = 0; err = unlink(lock->lk->filename); - if (err) { + if (err && errno != ENOENT) { ret = 1; error("unlink(%s) failed: %s", lock->lk->filename, strerror(errno)); diff --git a/t/t5404-tracking-branches.sh b/t/t5404-tracking-branches.sh index 1493a92c0..64fe2615a 100755 --- a/t/t5404-tracking-branches.sh +++ b/t/t5404-tracking-branches.sh @@ -10,6 +10,7 @@ test_expect_success 'setup' ' git commit -m 1 && git branch b1 && git branch b2 && + git branch b3 && git clone . aa && git checkout b1 && echo b1 >>file && @@ -50,4 +51,10 @@ test_expect_success 'deleted branches have their tracking branches removed' ' test "$(git rev-parse origin/b1)" = "origin/b1" ' +test_expect_success 'already deleted tracking branches ignored' ' + git branch -d -r origin/b3 && + git push origin :b3 >output 2>&1 && + ! grep error output +' + test_done |