aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2008-05-28 19:29:36 +0400
committerJunio C Hamano <gitster@pobox.com>2008-05-28 10:47:12 -0700
commitefb98b44536300f5daed25da3650033a1ce7fdef (patch)
tree3eb5955b1dd88addafa444b746fd240bdee4389a
parent6eec46bdda7393f1801df70a44d2e0577760a691 (diff)
downloadgit-efb98b44536300f5daed25da3650033a1ce7fdef.tar.gz
git-efb98b44536300f5daed25da3650033a1ce7fdef.tar.xz
builtin-fetch.c (store_updated_refs): Honor update_local_ref() return value
Sync with builtin-fetch--tool.c where append_fetch_head() honors update_local_ref() return value. This fixes non fast forward fetch exit status, http://bugzilla.altlinux.org/show_bug.cgi?id=15037 Signed-off-by: Dmitry V. Levin <ldv@altlinux.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin-fetch.c6
-rwxr-xr-xt/t5518-fetch-exit-status.sh37
2 files changed, 40 insertions, 3 deletions
diff --git a/builtin-fetch.c b/builtin-fetch.c
index bfe7711aa..e81ee2d02 100644
--- a/builtin-fetch.c
+++ b/builtin-fetch.c
@@ -286,7 +286,7 @@ static int store_updated_refs(const char *url, struct ref *ref_map)
{
FILE *fp;
struct commit *commit;
- int url_len, i, note_len, shown_url = 0;
+ int url_len, i, note_len, shown_url = 0, rc = 0;
char note[1024];
const char *what, *kind;
struct ref *rm;
@@ -353,7 +353,7 @@ static int store_updated_refs(const char *url, struct ref *ref_map)
note);
if (ref)
- update_local_ref(ref, what, verbose, note);
+ rc |= update_local_ref(ref, what, verbose, note);
else
sprintf(note, "* %-*s %-*s -> FETCH_HEAD",
SUMMARY_WIDTH, *kind ? kind : "branch",
@@ -368,7 +368,7 @@ static int store_updated_refs(const char *url, struct ref *ref_map)
}
}
fclose(fp);
- return 0;
+ return rc;
}
/*
diff --git a/t/t5518-fetch-exit-status.sh b/t/t5518-fetch-exit-status.sh
new file mode 100755
index 000000000..c6bc65faa
--- /dev/null
+++ b/t/t5518-fetch-exit-status.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# Copyright (c) 2008 Dmitry V. Levin
+#
+
+test_description='fetch exit status test'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+
+ >file &&
+ git add file &&
+ git commit -m initial &&
+
+ git checkout -b side &&
+ echo side >file &&
+ git commit -a -m side &&
+
+ git checkout master &&
+ echo next >file &&
+ git commit -a -m next
+'
+
+test_expect_success 'non fast forward fetch' '
+
+ test_must_fail git fetch . master:side
+
+'
+
+test_expect_success 'forced update' '
+
+ git fetch . +master:side
+
+'
+
+test_done