From 93ba78d6f4632ef1c5228965e3edc8c0faf88c1e Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 26 May 2020 00:06:52 +0100 Subject: revert(3p/git): Revert merge of git upstream at v2.26.2 This causes cgit to serve error pages, which is undesirable. This reverts commit 5229c9b232de5bfa959ad6ebbb4c8192ac513352, reversing changes made to f2b211131f2347342dde63975b09cf603149f1a3. --- third_party/git/sha1-name.c | 87 +++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 42 deletions(-) (limited to 'third_party/git/sha1-name.c') diff --git a/third_party/git/sha1-name.c b/third_party/git/sha1-name.c index 5bb006e5a9e0..2989e27b717a 100644 --- a/third_party/git/sha1-name.c +++ b/third_party/git/sha1-name.c @@ -155,6 +155,7 @@ static void unique_in_pack(struct packed_git *p, struct disambiguate_state *ds) { uint32_t num, i, first = 0; + const struct object_id *current = NULL; if (p->multi_pack_index) return; @@ -172,10 +173,10 @@ static void unique_in_pack(struct packed_git *p, */ for (i = first; i < num && !ds->ambiguous; i++) { struct object_id oid; - nth_packed_object_id(&oid, p, i); - if (!match_sha(ds->len, ds->bin_pfx.hash, oid.hash)) + current = nth_packed_object_oid(&oid, p, i); + if (!match_sha(ds->len, ds->bin_pfx.hash, current->hash)) break; - update_candidates(ds, &oid); + update_candidates(ds, current); } } @@ -402,9 +403,9 @@ static int repo_collect_ambiguous(struct repository *r, return collect_ambiguous(oid, data); } -static int sort_ambiguous(const void *a, const void *b, void *ctx) +static struct repository *sort_ambiguous_repo; +static int sort_ambiguous(const void *a, const void *b) { - struct repository *sort_ambiguous_repo = ctx; int a_type = oid_object_info(sort_ambiguous_repo, a, NULL); int b_type = oid_object_info(sort_ambiguous_repo, b, NULL); int a_type_sort; @@ -433,7 +434,10 @@ static int sort_ambiguous(const void *a, const void *b, void *ctx) static void sort_ambiguous_oid_array(struct repository *r, struct oid_array *a) { - QSORT_S(a->oid, a->nr, sort_ambiguous, r); + /* mutex will be needed if this code is to be made thread safe */ + sort_ambiguous_repo = r; + QSORT(a->oid, a->nr, sort_ambiguous); + sort_ambiguous_repo = NULL; } static enum get_oid_result get_short_oid(struct repository *r, @@ -642,14 +646,14 @@ static void find_abbrev_len_for_pack(struct packed_git *p, */ mad->init_len = 0; if (!match) { - if (!nth_packed_object_id(&oid, p, first)) + if (nth_packed_object_oid(&oid, p, first)) extend_abbrev_len(&oid, mad); } else if (first < num - 1) { - if (!nth_packed_object_id(&oid, p, first + 1)) + if (nth_packed_object_oid(&oid, p, first + 1)) extend_abbrev_len(&oid, mad); } if (first > 0) { - if (!nth_packed_object_id(&oid, p, first - 1)) + if (nth_packed_object_oid(&oid, p, first - 1)) extend_abbrev_len(&oid, mad); } mad->init_len = mad->cur_len; @@ -907,21 +911,26 @@ static int get_oid_basic(struct repository *r, const char *str, int len, real_ref, flags, at_time, nth, oid, NULL, &co_time, &co_tz, &co_cnt)) { if (!len) { - if (!skip_prefix(real_ref, "refs/heads/", &str)) + if (starts_with(real_ref, "refs/heads/")) { + str = real_ref + 11; + len = strlen(real_ref + 11); + } else { + /* detached HEAD */ str = "HEAD"; - len = strlen(str); + len = 4; + } } if (at_time) { if (!(flags & GET_OID_QUIETLY)) { - warning(_("log for '%.*s' only goes back to %s"), - len, str, + warning("Log for '%.*s' only goes " + "back to %s.", len, str, show_date(co_time, co_tz, DATE_MODE(RFC2822))); } } else { if (flags & GET_OID_QUIETLY) { exit(128); } - die(_("log for '%.*s' only has %d entries"), + die("Log for '%.*s' only has %d entries.", len, str, co_cnt); } } @@ -1154,22 +1163,13 @@ static enum get_oid_result get_oid_1(struct repository *r, } if (has_suffix) { - unsigned int num = 0; + int num = 0; int len1 = cp - name; cp++; - while (cp < name + len) { - unsigned int digit = *cp++ - '0'; - if (unsigned_mult_overflows(num, 10)) - return MISSING_OBJECT; - num *= 10; - if (unsigned_add_overflows(num, digit)) - return MISSING_OBJECT; - num += digit; - } + while (cp < name + len) + num = num * 10 + *cp++ - '0'; if (!num && len1 == len - 1) num = 1; - else if (num > INT_MAX) - return MISSING_OBJECT; if (has_suffix == '^') return get_parent(r, name, len1, oid, num); /* else if (has_suffix == '~') -- goes without saying */ @@ -1289,7 +1289,7 @@ static int get_oid_oneline(struct repository *r, struct grab_nth_branch_switch_cbdata { int remaining; - struct strbuf *sb; + struct strbuf buf; }; static int grab_nth_branch_switch(struct object_id *ooid, struct object_id *noid, @@ -1307,8 +1307,8 @@ static int grab_nth_branch_switch(struct object_id *ooid, struct object_id *noid return 0; if (--(cb->remaining) == 0) { len = target - match; - strbuf_reset(cb->sb); - strbuf_add(cb->sb, match, len); + strbuf_reset(&cb->buf); + strbuf_add(&cb->buf, match, len); return 1; /* we are done */ } return 0; @@ -1341,15 +1341,18 @@ static int interpret_nth_prior_checkout(struct repository *r, if (nth <= 0) return -1; cb.remaining = nth; - cb.sb = buf; + strbuf_init(&cb.buf, 20); retval = refs_for_each_reflog_ent_reverse(get_main_ref_store(r), "HEAD", grab_nth_branch_switch, &cb); if (0 < retval) { + strbuf_reset(buf); + strbuf_addbuf(buf, &cb.buf); retval = brace - name + 1; } else retval = 0; + strbuf_release(&cb.buf); return retval; } @@ -1686,14 +1689,14 @@ static void diagnose_invalid_oid_path(struct repository *r, prefix = ""; if (file_exists(filename)) - die(_("path '%s' exists on disk, but not in '%.*s'"), + die("Path '%s' exists on disk, but not in '%.*s'.", filename, object_name_len, object_name); if (is_missing_file_error(errno)) { char *fullname = xstrfmt("%s%s", prefix, filename); if (!get_tree_entry(r, tree_oid, fullname, &oid, &mode)) { - die(_("path '%s' exists, but not '%s'\n" - "hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"), + die("Path '%s' exists, but not '%s'.\n" + "Did you mean '%.*s:%s' aka '%.*s:./%s'?", fullname, filename, object_name_len, object_name, @@ -1701,7 +1704,7 @@ static void diagnose_invalid_oid_path(struct repository *r, object_name_len, object_name, filename); } - die(_("path '%s' does not exist in '%.*s'"), + die("Path '%s' does not exist in '%.*s'", filename, object_name_len, object_name); } } @@ -1729,8 +1732,8 @@ static void diagnose_invalid_index_path(struct repository *r, ce = istate->cache[pos]; if (ce_namelen(ce) == namelen && !memcmp(ce->name, filename, namelen)) - die(_("path '%s' is in the index, but not at stage %d\n" - "hint: Did you mean ':%d:%s'?"), + die("Path '%s' is in the index, but not at stage %d.\n" + "Did you mean ':%d:%s'?", filename, stage, ce_stage(ce), filename); } @@ -1745,17 +1748,17 @@ static void diagnose_invalid_index_path(struct repository *r, ce = istate->cache[pos]; if (ce_namelen(ce) == fullname.len && !memcmp(ce->name, fullname.buf, fullname.len)) - die(_("path '%s' is in the index, but not '%s'\n" - "hint: Did you mean ':%d:%s' aka ':%d:./%s'?"), + die("Path '%s' is in the index, but not '%s'.\n" + "Did you mean ':%d:%s' aka ':%d:./%s'?", fullname.buf, filename, ce_stage(ce), fullname.buf, ce_stage(ce), filename); } if (repo_file_exists(r, filename)) - die(_("path '%s' exists on disk, but not in the index"), filename); + die("Path '%s' exists on disk, but not in the index.", filename); if (is_missing_file_error(errno)) - die(_("path '%s' does not exist (neither on disk nor in the index)"), + die("Path '%s' does not exist (neither on disk nor in the index).", filename); strbuf_release(&fullname); @@ -1768,7 +1771,7 @@ static char *resolve_relative_path(struct repository *r, const char *rel) return NULL; if (r != the_repository || !is_inside_work_tree()) - die(_("relative path syntax can't be used outside working tree")); + die("relative path syntax can't be used outside working tree."); /* die() inside prefix_path() if resolved path is outside worktree */ return prefix_path(startup_info->prefix, @@ -1906,7 +1909,7 @@ static enum get_oid_result get_oid_with_context_1(struct repository *repo, return ret; } else { if (only_to_die) - die(_("invalid object name '%.*s'."), len, name); + die("Invalid object name '%.*s'.", len, name); } } return ret; -- cgit 1.4.1