Merge branch 'ab/pcre-v2'
[gitweb.git] / refs.c
diff --git a/refs.c b/refs.c
index beb49fb2979fe7780e721237cc0e4d7c47c355ee..f0685c92513e306188d89380a1c3020024a4edb4 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -1259,6 +1259,11 @@ struct ref_iterator *refs_ref_iterator_begin(
 {
        struct ref_iterator *iter;
 
+       if (ref_paranoia < 0)
+               ref_paranoia = git_env_bool("GIT_REF_PARANOIA", 0);
+       if (ref_paranoia)
+               flags |= DO_FOR_EACH_INCLUDE_BROKEN;
+
        iter = refs->be->iterator_begin(refs, prefix, flags);
 
        /*
@@ -1705,17 +1710,23 @@ int create_symref(const char *ref_target, const char *refs_heads_master,
 int ref_update_reject_duplicates(struct string_list *refnames,
                                 struct strbuf *err)
 {
-       int i, n = refnames->nr;
+       size_t i, n = refnames->nr;
 
        assert(err);
 
-       for (i = 1; i < n; i++)
-               if (!strcmp(refnames->items[i - 1].string, refnames->items[i].string)) {
+       for (i = 1; i < n; i++) {
+               int cmp = strcmp(refnames->items[i - 1].string,
+                                refnames->items[i].string);
+
+               if (!cmp) {
                        strbuf_addf(err,
                                    "multiple updates for ref '%s' not allowed.",
                                    refnames->items[i].string);
                        return 1;
+               } else if (cmp > 0) {
+                       die("BUG: ref_update_reject_duplicates() received unsorted list");
                }
+       }
        return 0;
 }