builtin-fetch.c (store_updated_refs): Honor update_local_ref() return value
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 28 May 2008 15:29:36 +0000 (19:29 +0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 28 May 2008 17:47:12 +0000 (10:47 -0700)
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>
builtin-fetch.c
t/t5518-fetch-exit-status.sh [new file with mode: 0755]

index bfe7711aa8b032c098eeb630e8cfec5bac364106..e81ee2d02b588c83f9ac355d20559271be73871d 100644 (file)
@@ -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 (executable)
index 0000000..c6bc65f
--- /dev/null
@@ -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