From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Turner Subject: [PATCH v5 16/26] refs.c: move ref iterators to the common code Date: Tue, 27 Oct 2015 22:14:17 -0400 Message-ID: <1445998467-11511-17-git-send-email-dturner@twopensource.com> References: <1445998467-11511-1-git-send-email-dturner@twopensource.com> Cc: Ronnie Sahlberg , Junio C Hamano , David Turner To: git@vger.kernel.org, mhagger@alum.mit.edu X-From: git-owner@vger.kernel.org Wed Oct 28 03:15:23 2015 Return-path: Envelope-to: gcvg-git-2@plane.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1ZrGGp-0001Iy-1q for gcvg-git-2@plane.gmane.org; Wed, 28 Oct 2015 03:15:23 +0100 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755255AbbJ1CPM (ORCPT ); Tue, 27 Oct 2015 22:15:12 -0400 Received: from mail-ig0-f178.google.com ([209.85.213.178]:36400 "EHLO mail-ig0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755241AbbJ1CPI (ORCPT ); Tue, 27 Oct 2015 22:15:08 -0400 Received: by igdg1 with SMTP id g1so97173135igd.1 for ; Tue, 27 Oct 2015 19:15:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=twopensource_com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=V9PoS+LzVn0UItCihaRQriiXdCrkhv2QB2z+t+5Qf0c=; b=s16EO/NY/YvhoMdQXa9pP1qfpBNS9hpxpxuw+g3PqGP1eEVFuYLWJGFrqmOOiBsIXv 6ojkOfDf+iqA1RQfzuVREEhU0tVS83Sir4dcgZjxVOeaWr9rjOP2pvjtKfLD2K+X/w4R gsVXMSbnv2G09FJhEUOyBEZzf7Wv40ZxPsdyCR02u+1SLo2LFEYSVVkcgsi8nBQ7a7cI wLx/igz4BNefNyNAvYupVQ6RYNbNqaldaN1tWxy/kE5/BhUIBFpaQiThHaX9pDOz7JD2 11Ai7wln/YDUXFxMsOSpPzJVtzbPqr/k6Dxx1MMWIhiMfDCSF1IoQpIztJV++XvmEXZK rf7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=V9PoS+LzVn0UItCihaRQriiXdCrkhv2QB2z+t+5Qf0c=; b=LkU1k9R0wzWpocelCX7HPFgD3maGDpsrbNGMkyc2ecBWKgO7nzT1+BwOyx1nPbys2u +sSV4unWpFOVMefRXARWkxqaxZ92M5jPjj7YypeKAPysdsZWyMoAiMJWpA14SHJ42toJ Yvkvil3zYUhyawLeZCt7huZ0ZvXLvmvCxSkxop+xpiCkdU5koC9SQUflH8/o2yvq2nhd jzi4/AwOZjeR7B6hDcNViIgBGbq3v7bQz5VV6T/sqRrfZEe9szo+jYRGtbESxdHtwxRz 4h8L7VWbC+SXweVtfbEOftKZxpTHMspUfZr5P3iapwQ11fWNk6VbxvU+Q0d2icr8WHHt tQgQ== X-Gm-Message-State: ALoCoQlyEa0HZ5MWzQ5yW5vZBnYxCynB2XlfBbDe6EOoybisJGDkxlnEq+UacoZjMElS5LyfxYKm X-Received: by 10.50.79.232 with SMTP id m8mr343282igx.22.1445998508139; Tue, 27 Oct 2015 19:15:08 -0700 (PDT) Received: from ubuntu.twitter.corp? ([8.25.196.25]) by smtp.gmail.com with ESMTPSA id lo2sm9240077igb.17.2015.10.27.19.15.06 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 27 Oct 2015 19:15:07 -0700 (PDT) X-Mailer: git-send-email 2.4.2.658.g6d8523e-twtrsrc In-Reply-To: <1445998467-11511-1-git-send-email-dturner@twopensource.com> Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: From: Ronnie Sahlberg Signed-off-by: Ronnie Sahlberg Signed-off-by: Junio C Hamano Signed-off-by: David Turner --- refs-be-files.c | 82 --------------------------------------------------------- refs.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 82 deletions(-) diff --git a/refs-be-files.c b/refs-be-files.c index c5cc7e7..d04a9d2 100644 --- a/refs-be-files.c +++ b/refs-be-files.c @@ -1668,23 +1668,6 @@ const char *resolve_ref_unsafe(const char *refname, int resolve_flags, return ret; } -/* The argument to filter_refs */ -struct ref_filter { - const char *pattern; - each_ref_fn *fn; - void *cb_data; -}; - -static int filter_refs(const char *refname, const struct object_id *oid, - int flags, void *data) -{ - struct ref_filter *filter = (struct ref_filter *)data; - - if (wildmatch(filter->pattern, refname, 0, NULL)) - return 0; - return filter->fn(refname, oid, flags, filter->cb_data); -} - enum peel_status { /* object was peeled successfully: */ PEEL_PEELED = 0, @@ -1950,37 +1933,6 @@ int for_each_ref_in_submodule(const char *submodule, const char *prefix, { return do_for_each_ref(get_ref_cache(submodule), prefix, fn, strlen(prefix), 0, cb_data); } - -int for_each_tag_ref(each_ref_fn fn, void *cb_data) -{ - return for_each_ref_in("refs/tags/", fn, cb_data); -} - -int for_each_tag_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data) -{ - return for_each_ref_in_submodule(submodule, "refs/tags/", fn, cb_data); -} - -int for_each_branch_ref(each_ref_fn fn, void *cb_data) -{ - return for_each_ref_in("refs/heads/", fn, cb_data); -} - -int for_each_branch_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data) -{ - return for_each_ref_in_submodule(submodule, "refs/heads/", fn, cb_data); -} - -int for_each_remote_ref(each_ref_fn fn, void *cb_data) -{ - return for_each_ref_in("refs/remotes/", fn, cb_data); -} - -int for_each_remote_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data) -{ - return for_each_ref_in_submodule(submodule, "refs/remotes/", fn, cb_data); -} - int for_each_replace_ref(each_ref_fn fn, void *cb_data) { return do_for_each_ref(&ref_cache, git_replace_ref_base, fn, @@ -2012,40 +1964,6 @@ int for_each_namespaced_ref(each_ref_fn fn, void *cb_data) return ret; } -int for_each_glob_ref_in(each_ref_fn fn, const char *pattern, - const char *prefix, void *cb_data) -{ - struct strbuf real_pattern = STRBUF_INIT; - struct ref_filter filter; - int ret; - - if (!prefix && !starts_with(pattern, "refs/")) - strbuf_addstr(&real_pattern, "refs/"); - else if (prefix) - strbuf_addstr(&real_pattern, prefix); - strbuf_addstr(&real_pattern, pattern); - - if (!has_glob_specials(pattern)) { - /* Append implied '/' '*' if not present. */ - strbuf_complete(&real_pattern, '/'); - /* No need to check for '*', there is none. */ - strbuf_addch(&real_pattern, '*'); - } - - filter.pattern = real_pattern.buf; - filter.fn = fn; - filter.cb_data = cb_data; - ret = for_each_ref(filter_refs, &filter); - - strbuf_release(&real_pattern); - return ret; -} - -int for_each_glob_ref(each_ref_fn fn, const char *pattern, void *cb_data) -{ - return for_each_glob_ref_in(fn, pattern, NULL, cb_data); -} - int for_each_rawref(each_ref_fn fn, void *cb_data) { return do_for_each_ref(&ref_cache, "", fn, 0, diff --git a/refs.c b/refs.c index d89a8d3..c7778d1 100644 --- a/refs.c +++ b/refs.c @@ -745,3 +745,84 @@ const char *prettify_refname(const char *name) starts_with(name, "refs/remotes/") ? 13 : 0); } + +/* The argument to filter_refs */ +struct ref_filter { + const char *pattern; + each_ref_fn *fn; + void *cb_data; +}; + +static int filter_refs(const char *refname, const struct object_id *oid, int flags, + void *data) +{ + struct ref_filter *filter = (struct ref_filter *)data; + + if (wildmatch(filter->pattern, refname, 0, NULL)) + return 0; + return filter->fn(refname, oid, flags, filter->cb_data); +} + +int for_each_glob_ref_in(each_ref_fn fn, const char *pattern, + const char *prefix, void *cb_data) +{ + struct strbuf real_pattern = STRBUF_INIT; + struct ref_filter filter; + int ret; + + if (!prefix && !starts_with(pattern, "refs/")) + strbuf_addstr(&real_pattern, "refs/"); + else if (prefix) + strbuf_addstr(&real_pattern, prefix); + strbuf_addstr(&real_pattern, pattern); + + if (!has_glob_specials(pattern)) { + /* Append implied '/' '*' if not present. */ + strbuf_complete(&real_pattern, '/'); + /* No need to check for '*', there is none. */ + strbuf_addch(&real_pattern, '*'); + } + + filter.pattern = real_pattern.buf; + filter.fn = fn; + filter.cb_data = cb_data; + ret = for_each_ref(filter_refs, &filter); + + strbuf_release(&real_pattern); + return ret; +} + +int for_each_glob_ref(each_ref_fn fn, const char *pattern, void *cb_data) +{ + return for_each_glob_ref_in(fn, pattern, NULL, cb_data); +} + +int for_each_tag_ref(each_ref_fn fn, void *cb_data) +{ + return for_each_ref_in("refs/tags/", fn, cb_data); +} + +int for_each_tag_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data) +{ + return for_each_ref_in_submodule(submodule, "refs/tags/", fn, cb_data); +} + +int for_each_branch_ref(each_ref_fn fn, void *cb_data) +{ + return for_each_ref_in("refs/heads/", fn, cb_data); +} + +int for_each_branch_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data) +{ + return for_each_ref_in_submodule(submodule, "refs/heads/", fn, cb_data); +} + +int for_each_remote_ref(each_ref_fn fn, void *cb_data) +{ + return for_each_ref_in("refs/remotes/", fn, cb_data); +} + +int for_each_remote_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data) +{ + return for_each_ref_in_submodule(submodule, "refs/remotes/", fn, cb_data); +} -- 2.4.2.658.g6d8523e-twtrsrc