From patchwork Sun Jan 12 10:01:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ren=C3=A9_Scharfe?= X-Patchwork-Id: 13936304 Received: from mout.web.de (mout.web.de [212.227.15.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 015FB38B for ; Sun, 12 Jan 2025 10:02:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736676151; cv=none; b=I6s0rfzFLUHN07GiRjOmltlv5rysFLYuF5DOHba/ppTyGsjah/oFKoHxb7LoDNo5LwnCh1F4vBt4ygjXhbTohAbIRX4tyHuWFuIwtp4hNZtlJnXE+m7Isx2Za42ZTzC70X/PeNXoBu1VlWNDRQMj0bmWIYHvi3nu93PzbItsA3U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736676151; c=relaxed/simple; bh=mBSYoJc6h9sG66FYsCweG+VaT2yo60Zeu4ud7o1KhuU=; h=Message-ID:Date:MIME-Version:Subject:To:References:Cc:From: In-Reply-To:Content-Type; b=Tdbt+wdhqFx685NWt2OScCdi13cvq42PXUFHR/7PE1p4bWPKDAN16omLM7WISdMlI0tDu6udrE7m+tkf+Ff5aQOiukddStDEM/QTHLUKX3ThgviCUvMXYP8tD+HwAoS3gwvEujJNwZ2AGYeIoYURtnZw4lHpjLNVZGAO/I+q+GM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=web.de; spf=pass smtp.mailfrom=web.de; dkim=pass (2048-bit key) header.d=web.de header.i=l.s.r@web.de header.b=A+LScfrx; arc=none smtp.client-ip=212.227.15.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=web.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=web.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=web.de header.i=l.s.r@web.de header.b="A+LScfrx" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1736676133; x=1737280933; i=l.s.r@web.de; bh=rWm4/wJ3c0lgKBSRuan7sZxpZXSRxRN82Owi0I9Jhow=; h=X-UI-Sender-Class:Message-ID:Date:MIME-Version:Subject:To: References:Cc:From:In-Reply-To:Content-Type: Content-Transfer-Encoding:cc:content-transfer-encoding: content-type:date:from:message-id:mime-version:reply-to:subject: to; b=A+LScfrxTc0+Kasn9Z0kbVXcmGj+YHrTNvsdCri7Xc0nDSjII0XkEdBOe50hVpeq ruqpxwyDw6iLmspTmhzKPrJmmzqKCxsl+QSiaWGR5Jh6Z39b5ZcKdpIqUO/zXHzP7 J7OmSWjeIdH5LHZOqJ2VbdvJJlnVpuQ6Y9+aEVnwnre3/c4S15VtXrs6bD0USE7V2 NUkF/h9OumYAMWzOxoCNrWuxWh1bjqi81leCZdq4W+BhBe+8aA0qiCIOuzyY/qVGP FhGbq/nfOdcPqGopap5tKDCojduRLeam8z6+w8E22NDezkWJDBbTlSS4wL6POI50A c7wODPmvSovfn6mcsw== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Received: from [192.168.178.29] ([79.203.20.45]) by smtp.web.de (mrweb006 [213.165.67.108]) with ESMTPSA (Nemesis) id 1M3Euv-1tZx4C2nM5-00583d; Sun, 12 Jan 2025 11:02:13 +0100 Message-ID: <6b824f05-6f16-4cd9-85b7-3b8b236158b4@web.de> Date: Sun, 12 Jan 2025 11:01:52 +0100 Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH] ref-filter: share bases and is_base_tips between formatting and sorting To: Ross Goldberg , git@vger.kernel.org References: Content-Language: en-US Cc: Jeff King , Derrick Stolee , Junio C Hamano From: =?utf-8?q?Ren=C3=A9_Scharfe?= In-Reply-To: X-Provags-ID: V03:K1:vgewxLrMSdNDbdzTZmjvW2/WWQdxuU14a3syWyveCn9ojN+Ux5y tWshZFdgBHswQjJxy1EUJEPoRfJx7XoPaiz4GKLv+hl1TeOqQqe8JYZO2VfCgpdxoQ5Y8uH y2iPgFhF0UvMaxlVmtDMWYlCH2W+HLIEl8Mg0Bgn0cRFECJPTk4yGyvvBH1X3DFs3vuv4hv 2bukxwlIx0niDYzdM9Vwg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:Cn5wTWWVwPA=;LkGRW2NwgzLLPdNdZVrV8NgiK49 C5GqLUyabNwKgbltBgo4usELqgvd0ioFBn7BAr/H9onjdHRaA/029VjB1Dlt75IU5PmxjGs1+ dMseFxPKyuTbgoNQkB1LEuHeNy7EgBPvnqSu4QqbJWhiDgJeN0wREZrWRH8ANVmcBUNrRKgK6 yk2OuPbcTCDyDdPxMlACZ522Rozcxj1NDrT1e6/Pv0Xihas5srBodil/vb4sHWUj9VgXcXJMO CENIG7yAchRNWtCQyiJ4itblueVkRgmVWcyLImt1uzLXK2AwLoLl1TTwj9NL8LF3uaNI4sEC4 B3wyTUfCFGzWg744D9nPurA/Uaehu4AT16IsTK14jWguI+0og0FtajBeXljYhREMalJMcMYtm +kUSbFD9S/QetBJg150Q32Gb1WGIL5RUr46ItisBQi0bWXUWmqjBhVMyGt5ZeD/9BkiZYRama 8mt6qoxcFb00tzzLGJE2dpFOeNKI9+5+4Z8u08JFBx1R9PshxamNF89yQe2bSKHseEzqZ8iEQ rqTeqvg97t5hdmWJ9cQvpINZgMPj5dljmufJsj7/XzAIDYtEDMgrPXLJIIjToiLfvsckvKcZN ISc0rg9kGAmcBAgVOJHUmgcMxQThzm9yH31Kf/gq1R+neTia861t+o2EZUiA7zbvbqigZwHAa G2C8pp7IlJiB9ASrV8lhwqrPKi37iBHHryubg1Tr4OzKEq9U7+bAES6eHhADjNCMxloZy0y82 RZA6ONpU+BZdWsBDlxfEugcJaiVuVRIod7/gq0bf1JqXeowVO2v7yCcBKmkde49mBJxYheSpI b4tXPxGQn+jm9p3eU+q/wFgIny4Nvo+xlOiufeqhN4w3KTgZ+NgUF/c0xsohI+sUTkfT2ZPtV hdnMrmYQgQlnkcaUgT3qbyuVWi8VPt6/jOvPQg5NDM9qhZulpDvoj9aXhDwoxTZGwKeOIaNVB iSBkJzXDZeAF1tOMKKhQiLILdfVzZMpdSUjOYPhblBvRXGvI1BHT4ZjfTUmyqj3QU7pQe7fA9 QMHlJlzy0ym4TSa6RQZC8DqN7wEwINQzTzsehmXxFPDXay5mDOoZKUmY+DGaGoec3xyiJFc43 2T+1WWy3Q= verify_ref_format() parses a ref-filter format string and stores recognized items in the static array "used_atom". For "ahead-behind:" and "is-base:" it stores the committish part in string_lists that are part of struct ref_format. ref_sorting_options() also parses bare ref-filter format items and also stores recognized ones in "used_atom". The committish parts go to a dummy struct ref_format in parse_sorting_atom(), though, and are leaked and forgotten. If verify_ref_format() is called before ref_sorting_options(), like in git for-each-ref, then all works well if the sort key is included in the format string. If it isn't then sorting cannot work as the committishes are missing. If ref_sorting_options() is called first, like in git branch, then we have the additional issue that if the sort key is included in the format string then filter_ahead_behind() and filter_is_base() can't see their committishes, will not generate any results for them and thus they will for expanded to empty strings. Fix those issues by making the string_lists static, like their sibling "used_atom". This way they can all be shared for handling both ref-filter format strings and sorting options in the same command. And since struct ref_format no longer contains any allocated members, remove the now unnecessary ref_format_init() and ref_format_clear(). Reported-by: Ross Goldberg Signed-off-by: René Scharfe --- builtin/branch.c | 3 +- builtin/for-each-ref.c | 1 - builtin/tag.c | 1 - builtin/verify-tag.c | 1 - ref-filter.c | 70 ++++++++++++++++++---------------------- ref-filter.h | 13 -------- t/t3203-branch-output.sh | 28 ++++++++++++++++ t/t6600-test-reach.sh | 29 +++++++++++++++++ 8 files changed, 89 insertions(+), 57 deletions(-) -- 2.48.0 diff --git a/builtin/branch.c b/builtin/branch.c index 6e7b0cfddb..9a29de5bf1 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -473,7 +473,7 @@ static void print_ref_list(struct ref_filter *filter, struct ref_sorting *sortin if (verify_ref_format(format)) die(_("unable to parse format string")); - filter_ahead_behind(the_repository, format, &array); + filter_ahead_behind(the_repository, &array); ref_array_sort(sorting, &array); if (column_active(colopts)) { @@ -884,7 +884,6 @@ int cmd_branch(int argc, string_list_clear(&output, 0); ref_sorting_release(sorting); ref_filter_clear(&filter); - ref_format_clear(&format); ret = 0; goto out; diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c index 715745a262..8085ebd8fe 100644 --- a/builtin/for-each-ref.c +++ b/builtin/for-each-ref.c @@ -108,7 +108,6 @@ int cmd_for_each_ref(int argc, filter_and_format_refs(&filter, flags, sorting, &format); ref_filter_clear(&filter); - ref_format_clear(&format); ref_sorting_release(sorting); strvec_clear(&vec); return 0; diff --git a/builtin/tag.c b/builtin/tag.c index c4bd145831..e8a344b926 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -698,7 +698,6 @@ int cmd_tag(int argc, cleanup: ref_sorting_release(sorting); ref_filter_clear(&filter); - ref_format_clear(&format); strbuf_release(&buf); strbuf_release(&ref); strbuf_release(&reflog_msg); diff --git a/builtin/verify-tag.c b/builtin/verify-tag.c index a7f20618ff..f6b97048a5 100644 --- a/builtin/verify-tag.c +++ b/builtin/verify-tag.c @@ -69,6 +69,5 @@ int cmd_verify_tag(int argc, if (format.format) pretty_print_ref(name, &oid, &format); } - ref_format_clear(&format); return had_error; } diff --git a/ref-filter.c b/ref-filter.c index 23054694c2..aef142e105 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -242,6 +242,12 @@ static struct used_atom { } *used_atom; static int used_atom_cnt, need_tagged, need_symref; +/* List of bases for ahead-behind counts. */ +static struct string_list bases = STRING_LIST_INIT_DUP; + +/* List of bases for is-base indicators. */ +static struct string_list is_base_tips = STRING_LIST_INIT_DUP; + /* * Expand string, append it to strbuf *sb, then return error code ret. * Allow to save few lines of code. @@ -891,7 +897,7 @@ static int rest_atom_parser(struct ref_format *format UNUSED, return 0; } -static int ahead_behind_atom_parser(struct ref_format *format, +static int ahead_behind_atom_parser(struct ref_format *format UNUSED, struct used_atom *atom UNUSED, const char *arg, struct strbuf *err) { @@ -900,7 +906,7 @@ static int ahead_behind_atom_parser(struct ref_format *format, if (!arg) return strbuf_addf_ret(err, -1, _("expected format: %%(ahead-behind:)")); - item = string_list_append(&format->bases, arg); + item = string_list_append(&bases, arg); item->util = lookup_commit_reference_by_name(arg); if (!item->util) die("failed to find '%s'", arg); @@ -908,7 +914,7 @@ static int ahead_behind_atom_parser(struct ref_format *format, return 0; } -static int is_base_atom_parser(struct ref_format *format, +static int is_base_atom_parser(struct ref_format *format UNUSED, struct used_atom *atom UNUSED, const char *arg, struct strbuf *err) { @@ -917,7 +923,7 @@ static int is_base_atom_parser(struct ref_format *format, if (!arg) return strbuf_addf_ret(err, -1, _("expected format: %%(is-base:)")); - item = string_list_append(&format->is_base_tips, arg); + item = string_list_append(&is_base_tips, arg); item->util = lookup_commit_reference_by_name(arg); if (!item->util) die("failed to find '%s'", arg); @@ -3024,6 +3030,8 @@ void ref_array_clear(struct ref_array *array) } FREE_AND_NULL(used_atom); used_atom_cnt = 0; + string_list_clear(&bases, 0); + string_list_clear(&is_base_tips, 0); if (ref_to_worktree_map.worktrees) { hashmap_clear_and_free(&(ref_to_worktree_map.map), @@ -3084,22 +3092,21 @@ static void reach_filter(struct ref_array *array, } void filter_ahead_behind(struct repository *r, - struct ref_format *format, struct ref_array *array) { struct commit **commits; - size_t commits_nr = format->bases.nr + array->nr; + size_t commits_nr = bases.nr + array->nr; - if (!format->bases.nr || !array->nr) + if (!bases.nr || !array->nr) return; ALLOC_ARRAY(commits, commits_nr); - for (size_t i = 0; i < format->bases.nr; i++) - commits[i] = format->bases.items[i].util; + for (size_t i = 0; i < bases.nr; i++) + commits[i] = bases.items[i].util; - ALLOC_ARRAY(array->counts, st_mult(format->bases.nr, array->nr)); + ALLOC_ARRAY(array->counts, st_mult(bases.nr, array->nr)); - commits_nr = format->bases.nr; + commits_nr = bases.nr; array->counts_nr = 0; for (size_t i = 0; i < array->nr; i++) { const char *name = array->items[i]->refname; @@ -3108,8 +3115,8 @@ void filter_ahead_behind(struct repository *r, if (!commits[commits_nr]) continue; - CALLOC_ARRAY(array->items[i]->counts, format->bases.nr); - for (size_t j = 0; j < format->bases.nr; j++) { + CALLOC_ARRAY(array->items[i]->counts, bases.nr); + for (size_t j = 0; j < bases.nr; j++) { struct ahead_behind_count *count; count = &array->counts[array->counts_nr++]; count->tip_index = commits_nr; @@ -3125,14 +3132,13 @@ void filter_ahead_behind(struct repository *r, } void filter_is_base(struct repository *r, - struct ref_format *format, struct ref_array *array) { struct commit **bases; size_t bases_nr = 0; struct ref_array_item **back_index; - if (!format->is_base_tips.nr || !array->nr) + if (!is_base_tips.nr || !array->nr) return; CALLOC_ARRAY(back_index, array->nr); @@ -3142,7 +3148,7 @@ void filter_is_base(struct repository *r, const char *name = array->items[i]->refname; struct commit *c = lookup_commit_reference_by_name_gently(name, 1); - CALLOC_ARRAY(array->items[i]->is_base, format->is_base_tips.nr); + CALLOC_ARRAY(array->items[i]->is_base, is_base_tips.nr); if (!c) continue; @@ -3152,15 +3158,15 @@ void filter_is_base(struct repository *r, bases_nr++; } - for (size_t i = 0; i < format->is_base_tips.nr; i++) { - struct commit *tip = format->is_base_tips.items[i].util; + for (size_t i = 0; i < is_base_tips.nr; i++) { + struct commit *tip = is_base_tips.items[i].util; int base_index = get_branch_base_for_tip(r, tip, bases, bases_nr); if (base_index < 0) continue; /* Store the string for use in output later. */ - back_index[base_index]->is_base[i] = xstrdup(format->is_base_tips.items[i].string); + back_index[base_index]->is_base[i] = xstrdup(is_base_tips.items[i].string); } free(back_index); @@ -3252,8 +3258,7 @@ struct ref_sorting { }; static inline int can_do_iterative_format(struct ref_filter *filter, - struct ref_sorting *sorting, - struct ref_format *format) + struct ref_sorting *sorting) { /* * Reference backends sort patterns lexicographically by refname, so if @@ -3279,15 +3284,15 @@ static inline int can_do_iterative_format(struct ref_filter *filter, */ return !(filter->reachable_from || filter->unreachable_from || - format->bases.nr || - format->is_base_tips.nr); + bases.nr || + is_base_tips.nr); } void filter_and_format_refs(struct ref_filter *filter, unsigned int type, struct ref_sorting *sorting, struct ref_format *format) { - if (can_do_iterative_format(filter, sorting, format)) { + if (can_do_iterative_format(filter, sorting)) { int save_commit_buffer_orig; struct ref_filter_and_format_cbdata ref_cbdata = { .filter = filter, @@ -3303,8 +3308,8 @@ void filter_and_format_refs(struct ref_filter *filter, unsigned int type, } else { struct ref_array array = { 0 }; filter_refs(&array, filter, type); - filter_ahead_behind(the_repository, format, &array); - filter_is_base(the_repository, format, &array); + filter_ahead_behind(the_repository, &array); + filter_is_base(the_repository, &array); ref_array_sort(sorting, &array); print_formatted_ref_array(&array, format); ref_array_clear(&array); @@ -3638,16 +3643,3 @@ void ref_filter_clear(struct ref_filter *filter) free_commit_list(filter->unreachable_from); ref_filter_init(filter); } - -void ref_format_init(struct ref_format *format) -{ - struct ref_format blank = REF_FORMAT_INIT; - memcpy(format, &blank, sizeof(blank)); -} - -void ref_format_clear(struct ref_format *format) -{ - string_list_clear(&format->bases, 0); - string_list_clear(&format->is_base_tips, 0); - ref_format_init(format); -} diff --git a/ref-filter.h b/ref-filter.h index 754038ab07..013d4cfa64 100644 --- a/ref-filter.h +++ b/ref-filter.h @@ -99,12 +99,6 @@ struct ref_format { /* Internal state to ref-filter */ int need_color_reset_at_eol; - /* List of bases for ahead-behind counts. */ - struct string_list bases; - - /* List of bases for is-base indicators. */ - struct string_list is_base_tips; - struct { int max_count; int omit_empty; @@ -117,8 +111,6 @@ struct ref_format { } #define REF_FORMAT_INIT { \ .use_color = -1, \ - .bases = STRING_LIST_INIT_DUP, \ - .is_base_tips = STRING_LIST_INIT_DUP, \ } /* Macros for checking --merged and --no-merged options */ @@ -205,7 +197,6 @@ struct ref_array_item *ref_array_push(struct ref_array *array, * If this is not called, then any ahead-behind atoms will be blank. */ void filter_ahead_behind(struct repository *r, - struct ref_format *format, struct ref_array *array); /* @@ -215,13 +206,9 @@ void filter_ahead_behind(struct repository *r, * If this is not called, then any is-base atoms will be blank. */ void filter_is_base(struct repository *r, - struct ref_format *format, struct ref_array *array); void ref_filter_init(struct ref_filter *filter); void ref_filter_clear(struct ref_filter *filter); -void ref_format_init(struct ref_format *format); -void ref_format_clear(struct ref_format *format); - #endif /* REF_FILTER_H */ diff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh index 500c9d0e72..a6bd88a58d 100755 --- a/t/t3203-branch-output.sh +++ b/t/t3203-branch-output.sh @@ -368,6 +368,34 @@ test_expect_success 'git branch --format with ahead-behind' ' test_cmp expect actual ' +test_expect_success 'git branch `--sort=[-]ahead-behind` option' ' + cat >expect <<-\EOF && + (HEAD detached from fromtag) 0 0 + refs/heads/ambiguous 0 0 + refs/heads/branch-two 0 0 + refs/heads/branch-one 1 0 + refs/heads/main 1 0 + refs/heads/ref-to-branch 1 0 + refs/heads/ref-to-remote 1 0 + EOF + git branch --format="%(refname) %(ahead-behind:HEAD)" \ + --sort=refname --sort=ahead-behind:HEAD >actual && + test_cmp expect actual && + + cat >expect <<-\EOF && + (HEAD detached from fromtag) 0 0 + refs/heads/branch-one 1 0 + refs/heads/main 1 0 + refs/heads/ref-to-branch 1 0 + refs/heads/ref-to-remote 1 0 + refs/heads/ambiguous 0 0 + refs/heads/branch-two 0 0 + EOF + git branch --format="%(refname) %(ahead-behind:HEAD)" \ + --sort=refname --sort=-ahead-behind:HEAD >actual && + test_cmp expect actual +' + test_expect_success 'git branch with --format=%(rest) must fail' ' test_must_fail git branch --format="%(rest)" >actual ' diff --git a/t/t6600-test-reach.sh b/t/t6600-test-reach.sh index 2591f8b8b3..6638d1aa1d 100755 --- a/t/t6600-test-reach.sh +++ b/t/t6600-test-reach.sh @@ -733,4 +733,33 @@ test_expect_success 'for-each-ref is-base:multiple' ' --format="%(refname)[%(is-base:commit-2-3)-%(is-base:commit-6-5)]" --stdin ' +test_expect_success 'for-each-ref is-base: --sort' ' + cat >input <<-\EOF && + refs/heads/commit-1-1 + refs/heads/commit-4-2 + refs/heads/commit-4-4 + refs/heads/commit-8-4 + EOF + + cat >expect <<-\EOF && + refs/heads/commit-1-1 + refs/heads/commit-4-4 + refs/heads/commit-8-4 + refs/heads/commit-4-2 + EOF + run_all_modes git for-each-ref \ + --format="%(refname)" --stdin \ + --sort=refname --sort=is-base:commit-2-3 && + + cat >expect <<-\EOF && + refs/heads/commit-4-2 + refs/heads/commit-1-1 + refs/heads/commit-4-4 + refs/heads/commit-8-4 + EOF + run_all_modes git for-each-ref \ + --format="%(refname)" --stdin \ + --sort=refname --sort=-is-base:commit-2-3 +' + test_done From patchwork Sat Jan 18 17:11:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ren=C3=A9_Scharfe?= X-Patchwork-Id: 13944227 Received: from mout.web.de (mout.web.de [212.227.17.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DBBAA18C004 for ; Sat, 18 Jan 2025 17:17:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.12 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737220636; cv=none; b=doJq9KJrJp1/FP7KJkW1Q5VAm63+Tr7qCWHS0lZ7qSrZi11QXgZCFLAVSRAaHWCR9QVet3pGny1HVGw/ixHSBY3d5I7IYuKDXNsZryS6+gDf7UHWevjJ2eOEr12ArVf2LveDCNpllv3rJUv3e+r+rDd9NCRjK/LUgs+Btn6JhsU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737220636; c=relaxed/simple; bh=JaK1jCzAi35DfBtOahgio2LknmBDNxQXHM8Sv/17Lbo=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=MW99+LhWbW1HxycMLNHj9Kzx6G2IrqDX4Zdzg+mNK+BxTiSZ95J8Rize/BpRYRTOTqIwpNTUmbiAdTkW11ssCo+gCBXDjjVTrgHxXGHZRlhC3eWBYaCKygUajpoV4QQOyV130AdP/LN11J5iYj3yKvK3CFf2jJbQ9RKCGyxnzmk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=web.de; spf=pass smtp.mailfrom=web.de; dkim=pass (2048-bit key) header.d=web.de header.i=l.s.r@web.de header.b=lkIh9nnP; arc=none smtp.client-ip=212.227.17.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=web.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=web.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=web.de header.i=l.s.r@web.de header.b="lkIh9nnP" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1737220631; x=1737825431; i=l.s.r@web.de; bh=j88aHa3Qc9GJiLD5lmneR3eDwJkQiuwRsOsBF9ScS+I=; h=X-UI-Sender-Class:Message-ID:Date:MIME-Version:Subject:From:To: Cc:References:In-Reply-To:Content-Type:Content-Transfer-Encoding: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=lkIh9nnP2LUfbUQdPq/C9qMccHYlaY7DHfDv+gT4hSvxX2Xws9UF4fuzqK0wrKjE uGJcNzOffPvh3LpaY4cdjbXT2jfjtp3NUFQQPSXBX33F/SjCu6buzEleiCd8V4qWU 3LPqpympPa5cUMcT9MxGlRkoObMidlpn2yl9HLL1uLYwM3+GZ68QgOwiKZnNcLeJ7 F/HTT2YdW9gCj8KYZ9SyG05cC2dvfDg0QbIY5LEoHo02tfCwRvwdy+af4oKr1pKLG cbNouEnvoxvJBmjpSrwTtL4IYKcJqExxr14yGjEZmswSNCP4WBx2YY8Ybb7XaN6SM HHaoJSNJXl4WupDyeA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Received: from [192.168.178.29] ([91.47.157.126]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MQPdr-1tus4f02Px-00NWaG; Sat, 18 Jan 2025 18:11:52 +0100 Message-ID: <37f98b6b-b49b-4c17-b157-e15e14dbc91d@web.de> Date: Sat, 18 Jan 2025 18:11:51 +0100 Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 2/3] ref-filter: move is-base tip to used_atom From: =?utf-8?q?Ren=C3=A9_Scharfe?= To: git@vger.kernel.org Cc: Jeff King , Derrick Stolee , Junio C Hamano , Ross Goldberg References: <6b824f05-6f16-4cd9-85b7-3b8b236158b4@web.de> Content-Language: en-US In-Reply-To: <6b824f05-6f16-4cd9-85b7-3b8b236158b4@web.de> X-Provags-ID: V03:K1:pL5N1JlyVBCzcvgVbvyuHTlfYfS4B+EkikHfnt+r+gcEdC9X8I2 AO/wim1j9vWPreCBwOJfhmiBidTOKRAaEXytzrw815WUE5ZY2EW/JeJfA2l+6YyzmEgMaRh VndSnXN72dibug7thRfCVYBsjFSlUQzw14QbBahO1ciwyokfjSX5Kmuoo8e4upMoaAUwlCR vruN8IwQksnSfmbzf+DwQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:a+Le0o+YBzk=;WH5lXQB5fR3y5Mr43truXvL669O nOor9BmqTiijrtm3Ew5ndSAlZ63SacODneztAmizoY9FU86MkSvsnk9ljt5EUZlu3ojgaGc48 q7Qp62okJp6bcjyG760+0/+bebxj7Z8r1gcx2Y8CHgN7TEfIL4FG6Dh0UVCWIpNlN/WHQRijE eKTHM3653kHyhW4EGlITLHIp1KfixKbk09FGUVqxiDZ2hPr7dp/x9YPxChcHcyuPlZpgf66yl gj7TcCsS7m11T32dVErWqE4TW+zZCF2dzddQrovGLck1Hdbi5Zhy0qJaplyMXsOy2X/PFGGZY HOJCV8hqlL/MucDfhBLBo4xg+5cERO3WT5L9XiC4Gt2Zoa6/865KSxn/3oibpKmJZ6B2tryDX upn0lbIZWB8Jyhu2DBszZ+CNCLHAfd4MvHXVcpDELlAtaE2vLYDBT5rwP7oNi1x2C7unMoIWr MyCJiU9NdCPaChGd72/13FnS2QNHPgjft+/HefOn2KsrDOkLaHQKp/NBbiDkNA+Zao9M8cicX d6wjrXCGLvtIOsEnnhukkwZeaiK6DrD2qMBXs2tfCum4rY1fyeSzeCcWEsbr/W7ah7Nexbyi7 HC/rZccdj8gQ74fTjlV2EcIHEaQhT+vXpfMC9qZyZEHM190n9Jp6lQq7RS44jVnwPy/mBGKSw IGpiEM/XcEW0XRBf44XzaK88pbatiebfw6CdH62Zgtl6DO83QQ9sV4Uh6/LAG/pN50ojhu5n4 kNBWZdLtLZyhpd0oI3kL97wJmnMDJv0JGVkCRFdkpoh1QZzSZcTWhUIyvXjm99pg3ryKgTFFN JvwaG1Fq3IZJ4+6f8ZPoSoa+8uFBkmLdduR/5kO9Re9own+eGabM7UezkuFb+XCEvwGf7m7H+ +tr5B0dSU0mjMzB0C3TXnBZHieHQdaxFpU6X8Ul6VIwJ+tXRJanI4J1muGjDnpDkiaQIAONKf ylSJTOI3WqKPDY6PtGD2MvOr8J8f6lJ+XAHJzI/XgZvuktLSQ+BYXz4UIhF/MReTmQfROrZ1j MAUya1fhIsOjZVvaKKztRBcxxR92v5+7XSDSaXj3lavsNYH3ZcXHrk9mQqboKCpx97coKJTsx Ovb730EHIMz8e6hb9P+3OcvrpTtH+s+oVAheuF1uMw+aX0DObXe9MpzF4/XCFmEWZSaZwsHIC 1Uk+rqxOupTQqgRPaJbxiVawHKFNEclwjPSWau2lLlA== The string_list "is_base_tips" in struct ref_format stores the committish part of "is-base:". It has the same problems that its sibling string_list "bases" had. Fix them the same way as the previous commit did for the latter, by replacing the string_list with fields in "used_atom". Helped-by: Jeff King Signed-off-by: René Scharfe --- ref-filter.c | 56 +++++++++++++++++++++++++------------------ ref-filter.h | 5 ---- t/t6600-test-reach.sh | 29 ++++++++++++++++++++++ 3 files changed, 62 insertions(+), 28 deletions(-) -- 2.48.1 diff --git a/ref-filter.c b/ref-filter.c index c3957473e5..9a4b2d4cea 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -236,6 +236,7 @@ static struct used_atom { S_FINGERPRINT, S_PRI_KEY_FP, S_TRUST_LEVEL } option; } signature; struct { + char *name; struct commit *commit; } base; struct strvec describe_args; @@ -908,18 +909,16 @@ static int ahead_behind_atom_parser(struct ref_format *format UNUSED, return 0; } -static int is_base_atom_parser(struct ref_format *format, - struct used_atom *atom UNUSED, +static int is_base_atom_parser(struct ref_format *format UNUSED, + struct used_atom *atom, const char *arg, struct strbuf *err) { - struct string_list_item *item; - if (!arg) return strbuf_addf_ret(err, -1, _("expected format: %%(is-base:)")); - item = string_list_append(&format->is_base_tips, arg); - item->util = lookup_commit_reference_by_name(arg); - if (!item->util) + atom->u.base.name = xstrdup(arg); + atom->u.base.commit = lookup_commit_reference_by_name(arg); + if (!atom->u.base.commit) die("failed to find '%s'", arg); return 0; @@ -3009,6 +3008,8 @@ void ref_array_clear(struct ref_array *array) free(atom->u.head); else if (atom->atom_type == ATOM_DESCRIBE) strvec_clear(&atom->u.describe_args); + else if (atom->atom_type == ATOM_ISBASE) + free(atom->u.base.name); else if (atom->atom_type == ATOM_TRAILERS || (atom->atom_type == ATOM_CONTENTS && atom->u.contents.option == C_TRAILERS)) { @@ -3133,14 +3134,20 @@ void filter_ahead_behind(struct repository *r, } void filter_is_base(struct repository *r, - struct ref_format *format, struct ref_array *array) { struct commit **bases; - size_t bases_nr = 0; + size_t bases_nr = 0, is_base_nr; struct ref_array_item **back_index; - if (!format->is_base_tips.nr || !array->nr) + if (!array->nr) + return; + + for (size_t i = is_base_nr = 0; i < used_atom_cnt; i++) { + if (used_atom[i].atom_type == ATOM_ISBASE) + is_base_nr++; + } + if (!is_base_nr) return; CALLOC_ARRAY(back_index, array->nr); @@ -3150,7 +3157,7 @@ void filter_is_base(struct repository *r, const char *name = array->items[i]->refname; struct commit *c = lookup_commit_reference_by_name_gently(name, 1); - CALLOC_ARRAY(array->items[i]->is_base, format->is_base_tips.nr); + CALLOC_ARRAY(array->items[i]->is_base, is_base_nr); if (!c) continue; @@ -3160,15 +3167,20 @@ void filter_is_base(struct repository *r, bases_nr++; } - for (size_t i = 0; i < format->is_base_tips.nr; i++) { - struct commit *tip = format->is_base_tips.items[i].util; - int base_index = get_branch_base_for_tip(r, tip, bases, bases_nr); + for (size_t i = 0, j = 0; i < used_atom_cnt; i++) { + struct commit *tip; + int base_index; + + if (used_atom[i].atom_type != ATOM_ISBASE) + continue; + tip = used_atom[i].u.base.commit; + base_index = get_branch_base_for_tip(r, tip, bases, bases_nr); if (base_index < 0) continue; /* Store the string for use in output later. */ - back_index[base_index]->is_base[i] = xstrdup(format->is_base_tips.items[i].string); + back_index[base_index]->is_base[j++] = xstrdup(used_atom[i].u.base.name); } free(back_index); @@ -3260,8 +3272,7 @@ struct ref_sorting { }; static inline int can_do_iterative_format(struct ref_filter *filter, - struct ref_sorting *sorting, - struct ref_format *format) + struct ref_sorting *sorting) { /* * Reference backends sort patterns lexicographically by refname, so if @@ -3288,17 +3299,17 @@ static inline int can_do_iterative_format(struct ref_filter *filter, for (size_t i = 0; i < used_atom_cnt; i++) { if (used_atom[i].atom_type == ATOM_AHEADBEHIND) return 0; + if (used_atom[i].atom_type == ATOM_ISBASE) + return 0; } - return !(filter->reachable_from || - filter->unreachable_from || - format->is_base_tips.nr); + return !(filter->reachable_from || filter->unreachable_from); } void filter_and_format_refs(struct ref_filter *filter, unsigned int type, struct ref_sorting *sorting, struct ref_format *format) { - if (can_do_iterative_format(filter, sorting, format)) { + if (can_do_iterative_format(filter, sorting)) { int save_commit_buffer_orig; struct ref_filter_and_format_cbdata ref_cbdata = { .filter = filter, @@ -3315,7 +3326,7 @@ void filter_and_format_refs(struct ref_filter *filter, unsigned int type, struct ref_array array = { 0 }; filter_refs(&array, filter, type); filter_ahead_behind(the_repository, &array); - filter_is_base(the_repository, format, &array); + filter_is_base(the_repository, &array); ref_array_sort(sorting, &array); print_formatted_ref_array(&array, format); ref_array_clear(&array); @@ -3658,6 +3669,5 @@ void ref_format_init(struct ref_format *format) void ref_format_clear(struct ref_format *format) { - string_list_clear(&format->is_base_tips, 0); ref_format_init(format); } diff --git a/ref-filter.h b/ref-filter.h index 5f3dd6c931..0ba94df651 100644 --- a/ref-filter.h +++ b/ref-filter.h @@ -99,9 +99,6 @@ struct ref_format { /* Internal state to ref-filter */ int need_color_reset_at_eol; - /* List of bases for is-base indicators. */ - struct string_list is_base_tips; - struct { int max_count; int omit_empty; @@ -114,7 +111,6 @@ struct ref_format { } #define REF_FORMAT_INIT { \ .use_color = -1, \ - .is_base_tips = STRING_LIST_INIT_DUP, \ } /* Macros for checking --merged and --no-merged options */ @@ -210,7 +206,6 @@ void filter_ahead_behind(struct repository *r, * If this is not called, then any is-base atoms will be blank. */ void filter_is_base(struct repository *r, - struct ref_format *format, struct ref_array *array); void ref_filter_init(struct ref_filter *filter); diff --git a/t/t6600-test-reach.sh b/t/t6600-test-reach.sh index 2591f8b8b3..6638d1aa1d 100755 --- a/t/t6600-test-reach.sh +++ b/t/t6600-test-reach.sh @@ -733,4 +733,33 @@ test_expect_success 'for-each-ref is-base:multiple' ' --format="%(refname)[%(is-base:commit-2-3)-%(is-base:commit-6-5)]" --stdin ' +test_expect_success 'for-each-ref is-base: --sort' ' + cat >input <<-\EOF && + refs/heads/commit-1-1 + refs/heads/commit-4-2 + refs/heads/commit-4-4 + refs/heads/commit-8-4 + EOF + + cat >expect <<-\EOF && + refs/heads/commit-1-1 + refs/heads/commit-4-4 + refs/heads/commit-8-4 + refs/heads/commit-4-2 + EOF + run_all_modes git for-each-ref \ + --format="%(refname)" --stdin \ + --sort=refname --sort=is-base:commit-2-3 && + + cat >expect <<-\EOF && + refs/heads/commit-4-2 + refs/heads/commit-1-1 + refs/heads/commit-4-4 + refs/heads/commit-8-4 + EOF + run_all_modes git for-each-ref \ + --format="%(refname)" --stdin \ + --sort=refname --sort=-is-base:commit-2-3 +' + test_done From patchwork Sat Jan 18 17:11:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ren=C3=A9_Scharfe?= X-Patchwork-Id: 13944226 Received: from mout.web.de (mout.web.de [212.227.17.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D220742070 for ; Sat, 18 Jan 2025 17:12:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.12 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737220327; cv=none; b=Wf4wtv5cJxISS5RnIrJsspDtAgMgadDVM/x1iKkyU+iA7Ym2UkbP1jL/Oo6n+G7BeAjTa/ioy+DmSivNzYY8a3fNLKL19YLYRbjI4lHgEfVXLE0RGTCNVrsihXoj5ml4T+NA+Gflc9gVMkvUIuPMI75MsD87/rgbLiSU4X/9vjo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737220327; c=relaxed/simple; bh=szR+2kRRP6GvjThnJdAvyd0PGlDou2os6qtb7uBSSAY=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=Qz4R8FpkWzrM3pC53l5F4wdi5GrhlVFn49mVl7umQ0t0B9rwz3QAxjjkZbfad5wdhPsx8Z+myzG6qox8grjsr7HqYVsBGLxXxhLwFLFjCyKtMO2eAi8r9F2OI9kY16k8eGJWoIGFZkh2z3c4J6QLuGssS8pXwjjLSbvd32fK7RY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=web.de; spf=pass smtp.mailfrom=web.de; dkim=pass (2048-bit key) header.d=web.de header.i=l.s.r@web.de header.b=pQqE8cll; arc=none smtp.client-ip=212.227.17.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=web.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=web.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=web.de header.i=l.s.r@web.de header.b="pQqE8cll" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1737220319; x=1737825119; i=l.s.r@web.de; bh=Vt9T8oOfPzHdAL1BAx6WmmFvns+vE3XrGNvE9XNqmWw=; h=X-UI-Sender-Class:Message-ID:Date:MIME-Version:Subject:From:To: Cc:References:In-Reply-To:Content-Type:Content-Transfer-Encoding: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=pQqE8cllLNXpx04ZsQqc4YsHwcxKRxwJZQS+skDCtTEvrVbjr5V7V2dedK/a0FPu ymZ4T7E0om2pY70CL8stOy/gRDoZpRt+t3zMU/yjN98Lo71XE78/K3NmgRMCsmesH 7Xa40pgr8iywxUZEeWA5Xjk2BWFCmv20lC+8wdg4VMVe1B+mMyJv3UhvMv4FRHBAb +UPEcDYbBon3Jg5shRyzLraywAMCnJNgyhcRFGDZnBfFg4bPyGNq6G8p/iZid1eId QBwU9yHt61SN2GhmqtJJo3JrYlNHN1mkDptNBp2zH7fUkGZyT8Y46eY9c2wWHP+Is Gk164kdKqM3sOlTlag== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Received: from [192.168.178.29] ([91.47.157.126]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MqZQY-1tD2pb2FIe-00l3Vj; Sat, 18 Jan 2025 18:11:59 +0100 Message-ID: Date: Sat, 18 Jan 2025 18:11:59 +0100 Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 3/3] ref-filter: remove ref_format_clear() From: =?utf-8?q?Ren=C3=A9_Scharfe?= To: git@vger.kernel.org Cc: Jeff King , Derrick Stolee , Junio C Hamano , Ross Goldberg References: <6b824f05-6f16-4cd9-85b7-3b8b236158b4@web.de> Content-Language: en-US In-Reply-To: <6b824f05-6f16-4cd9-85b7-3b8b236158b4@web.de> X-Provags-ID: V03:K1:eLUdl8Kis36Kc9XVrqW3CqYyO5DLJ412CRfN9Rol9PDmmfCCqCu n+gdEVyHWD7OE5CsSDk/SRBvfXO8MPKLGL+3nqaiiN1khm8dDKc/gTj7C8bneHRcSBVmrCR iCxOoJ5KspR3bv+GSs71sZF0eg2EycLce1iBInC1abuZs5jbsWJzDWoS6vI3qXAV4QnAAtP YC/tJa1sL4iv+xB1lRS7A== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:7mdO6ayoZXk=;0od1are+C6eeyNrxuwE6fxGKFfp CoOKBNfxiTJSTlDTeYFLVFtspoz4MXZRb59A5UPm/Pg068/BuY5HzEmf9Zxd4yuQJiBKoTe9O vSC9v9Nla17ByXFDYOCeOcqXMATmP9kHhE4Qc617fEQEqPVH5tMz7i/uzRr1Ux8CHUzAWEGT9 55QVhnaTpHFT1srbDuFuGuBTuGTZchYoiiLiT2HloF+iC0ojw3/VsEIE7I1CJgXEPXx/KndRh VptPqSFu85WUjm0t9wljA/zkOsfDEZw26u2bQfccLpVlxUJh958WwP/O2GJGFedc07nLczvpC 4awZqhiPdG5Um9Qh5wU5YNA9P4AX1UoFAagV2GmS2ClneyRLHISl3PK4BXo3mKYWajb4M1VQM D70I8PtDnyfZhVoZbp7e2PG9bU4Ha3bOiIdtBU8+A/t2G2+PXrHanccgWPpbd4Jo36DJU8xpn glLuR6M2tHiZDYG6uSLNMluIAIpYCdCZKyZ4HO3ELVaA0LJYgH1S2BkOtIV+fbvdQ7oKjqZbi re12EmF4ZCC+gk7p6Slevo07VOcuAq8Jj+z3Pv/+U94d+12qbNJoTFA74dSBjgNtjk2ZeTyXc w5EfScY5YbxbUY7t/WTIMDTYRzgeezRr4FUZfyh2I7qEivtsq7J04+/9Lkaz1rladuHN3INCi eyTrYAp693cDnawb1cjyqDfkiYLqIeoUYhxPLRV47Mh5B8MY+SMfxZuHQZ31yYCrAgNBK3BtY dsj6h+Cq5Uh/6v08RLG3J4DPaFidDcGAO4lcAcoKoBWIybqT9f2ZkZ7mvRcQgOBuBvIvOsYB3 9DXy/n4oZWGJ4NLONuGKfgqVuosFzUR7btEJ6ueSWoHF/g5zUAaRLFEgJ1tk4EU+RogclgdUt nkWv3hk487o0vjtVuTZ/mqRnDhwQNKGmaTvWQtc2ezDKA7GvtMSCYh993KPAHmeJy5KddGcr5 W1zIh8MTcfLAUdpqT7RmUDg6FoVafq1WHEZgc5KYsFUssLtbOz1Bui88oIEfCUJ31ilOn10Ck KOcro1m6ZM07pBxK/6Kb/9Pg6LE9Aa9o/ANpqGvvZ7AAmuy3dCEzztBvanl5B3WZcBVEqvnnz 6Arb4WAC2KvUmmzthEtSR42a8a7ZkrK7X1vakmU7A9iLNshC2VRLOn9EyJsfldpkbiyHhT5jG 4Fd9g3iySRULRBqMr8BODrIjnlLg0BCVEs+AjeUjfMQ== Now that ref_format_clear() no longer releases any memory we don't need it anymore. Remove it and its counterpart, ref_format_init(). Signed-off-by: René Scharfe --- builtin/branch.c | 1 - builtin/for-each-ref.c | 1 - builtin/tag.c | 1 - builtin/verify-tag.c | 1 - ref-filter.c | 11 ----------- ref-filter.h | 3 --- 6 files changed, 18 deletions(-) -- 2.48.1 diff --git a/builtin/branch.c b/builtin/branch.c index fbb9536282..9a29de5bf1 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -884,7 +884,6 @@ int cmd_branch(int argc, string_list_clear(&output, 0); ref_sorting_release(sorting); ref_filter_clear(&filter); - ref_format_clear(&format); ret = 0; goto out; diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c index 715745a262..8085ebd8fe 100644 --- a/builtin/for-each-ref.c +++ b/builtin/for-each-ref.c @@ -108,7 +108,6 @@ int cmd_for_each_ref(int argc, filter_and_format_refs(&filter, flags, sorting, &format); ref_filter_clear(&filter); - ref_format_clear(&format); ref_sorting_release(sorting); strvec_clear(&vec); return 0; diff --git a/builtin/tag.c b/builtin/tag.c index c4bd145831..e8a344b926 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -698,7 +698,6 @@ int cmd_tag(int argc, cleanup: ref_sorting_release(sorting); ref_filter_clear(&filter); - ref_format_clear(&format); strbuf_release(&buf); strbuf_release(&ref); strbuf_release(&reflog_msg); diff --git a/builtin/verify-tag.c b/builtin/verify-tag.c index a7f20618ff..f6b97048a5 100644 --- a/builtin/verify-tag.c +++ b/builtin/verify-tag.c @@ -69,6 +69,5 @@ int cmd_verify_tag(int argc, if (format.format) pretty_print_ref(name, &oid, &format); } - ref_format_clear(&format); return had_error; } diff --git a/ref-filter.c b/ref-filter.c index 9a4b2d4cea..6da8d4c03b 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -3660,14 +3660,3 @@ void ref_filter_clear(struct ref_filter *filter) free_commit_list(filter->unreachable_from); ref_filter_init(filter); } - -void ref_format_init(struct ref_format *format) -{ - struct ref_format blank = REF_FORMAT_INIT; - memcpy(format, &blank, sizeof(blank)); -} - -void ref_format_clear(struct ref_format *format) -{ - ref_format_init(format); -} diff --git a/ref-filter.h b/ref-filter.h index 0ba94df651..013d4cfa64 100644 --- a/ref-filter.h +++ b/ref-filter.h @@ -211,7 +211,4 @@ void filter_is_base(struct repository *r, void ref_filter_init(struct ref_filter *filter); void ref_filter_clear(struct ref_filter *filter); -void ref_format_init(struct ref_format *format); -void ref_format_clear(struct ref_format *format); - #endif /* REF_FILTER_H */