From: "John Cai via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Jeff King <peff@peff.net>, John Cai <johncai86@gmail.com>,
John Cai <johncai86@gmail.com>
Subject: [PATCH v2 2/2] attr: add attr.allowInvalidSource config to allow invalid revision
Date: Wed, 04 Oct 2023 18:18:21 +0000 [thread overview]
Message-ID: <52d9e1803526bf1f267d23f6ef163049f8be77b7.1696443502.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1577.v2.git.git.1696443502.gitgitgadget@gmail.com>
From: John Cai <johncai86@gmail.com>
The previous commit provided the ability to pass in a treeish as the
attr source via the attr.tree config. The default behavior is that when
a revision does not resolve to a valid tree is passed, Git will die.
When HEAD is unborn however, it does not point to a valid treeish,
causing Git to die. In the context of serving repositories through bare
repositories, we'd like to be able to set attr.tree to HEAD and allow
cases where HEAD does not resolve to a valid tree to be treated as if
there were no treeish provided.
Add attr.allowInvalidSource that allows this.
Signed-off-by: John Cai <johncai86@gmail.com>
---
Documentation/config/attr.txt | 7 ++++++
attr.c | 16 ++++++++++---
t/t0003-attributes.sh | 45 +++++++++++++++++++++++++++++++++++
3 files changed, 65 insertions(+), 3 deletions(-)
diff --git a/Documentation/config/attr.txt b/Documentation/config/attr.txt
index e4f2122b7ab..00113a4950e 100644
--- a/Documentation/config/attr.txt
+++ b/Documentation/config/attr.txt
@@ -3,3 +3,10 @@ attr.tree:
linkgit:gitattributes[5]. This is equivalent to setting the
`GIT_ATTR_SOURCE` environment variable, or passing in --attr-source to
the Git command.
+
+attr.allowInvalidSource::
+ If `attr.tree` cannot resolve to a valid tree object, ignore
+ `attr.tree` instead of erroring out, and fall back to looking for
+ attributes in the default locations. Useful when passing `HEAD` into
+ `attr-source` since it allows `HEAD` to point to an unborn branch in
+ cases like an empty repository.
diff --git a/attr.c b/attr.c
index bb0d54eb967..1a7ac39b9d1 100644
--- a/attr.c
+++ b/attr.c
@@ -1202,21 +1202,31 @@ void set_git_attr_source(const char *tree_object_name)
static void compute_default_attr_source(struct object_id *attr_source)
{
+ int attr_source_from_config = 0;
+
if (!default_attr_source_tree_object_name)
default_attr_source_tree_object_name = getenv(GIT_ATTR_SOURCE_ENVIRONMENT);
if (!default_attr_source_tree_object_name) {
char *attr_tree;
- if (!git_config_get_string("attr.tree", &attr_tree))
+ if (!git_config_get_string("attr.tree", &attr_tree)) {
+ attr_source_from_config = 1;
default_attr_source_tree_object_name = attr_tree;
+ }
}
if (!default_attr_source_tree_object_name || !is_null_oid(attr_source))
return;
- if (repo_get_oid_treeish(the_repository, default_attr_source_tree_object_name, attr_source))
- die(_("bad --attr-source or GIT_ATTR_SOURCE"));
+ if (repo_get_oid_treeish(the_repository, default_attr_source_tree_object_name, attr_source)) {
+ int allow_invalid_attr_source = 0;
+
+ git_config_get_bool("attr.allowinvalidsource", &allow_invalid_attr_source);
+
+ if (!(allow_invalid_attr_source && attr_source_from_config))
+ die(_("bad --attr-source or GIT_ATTR_SOURCE"));
+ }
}
static struct object_id *default_attr_source(void)
diff --git a/t/t0003-attributes.sh b/t/t0003-attributes.sh
index 6342187c751..972b64496e7 100755
--- a/t/t0003-attributes.sh
+++ b/t/t0003-attributes.sh
@@ -346,6 +346,51 @@ test_expect_success 'bare repository: check that .gitattribute is ignored' '
)
'
+bad_attr_source_err="fatal: bad --attr-source or GIT_ATTR_SOURCE"
+
+test_expect_success 'attr.allowInvalidSource when HEAD is unborn' '
+ test_when_finished rm -rf empty &&
+ echo $bad_attr_source_err >expect_err &&
+ echo "f/path: test: unspecified" >expect &&
+ git init empty &&
+ test_must_fail git -C empty --attr-source=HEAD check-attr test -- f/path 2>err &&
+ test_cmp expect_err err &&
+ git -C empty -c attr.tree=HEAD -c attr.allowInvalidSource=true check-attr test -- f/path >actual 2>err &&
+ test_must_be_empty err &&
+ test_cmp expect actual
+'
+
+test_expect_success 'attr.allowInvalidSource when --attr-source points to non-existing ref' '
+ test_when_finished rm -rf empty &&
+ echo $bad_attr_source_err >expect_err &&
+ echo "f/path: test: unspecified" >expect &&
+ git init empty &&
+ test_must_fail git -C empty --attr-source=refs/does/not/exist check-attr test -- f/path 2>err &&
+ test_cmp expect_err err &&
+ git -C empty -c attr.tree=refs/does/not/exist -c attr.allowInvalidSource=true check-attr test -- f/path >actual 2>err &&
+ test_must_be_empty err &&
+ test_cmp expect actual
+'
+
+test_expect_success 'bad attr source defaults to reading .gitattributes file' '
+ test_when_finished rm -rf empty &&
+ git init empty &&
+ echo "f/path test=val" >empty/.gitattributes &&
+ echo "f/path: test: val" >expect &&
+ git -C empty -c attr.tree=HEAD -c attr.allowInvalidSource=true check-attr test -- f/path >actual 2>err &&
+ test_must_be_empty err &&
+ test_cmp expect actual
+'
+
+test_expect_success 'attr.allowInvalidSource has no effect on --attr-source' '
+ test_when_finished rm -rf empty &&
+ echo $bad_attr_source_err >expect_err &&
+ echo "f/path: test: unspecified" >expect &&
+ git init empty &&
+ test_must_fail git -C empty -c attr.allowInvalidSource=true --attr-source=HEAD check-attr test -- f/path 2>err &&
+ test_cmp expect_err err
+'
+
test_expect_success 'bare repository: with --source' '
(
cd bare.git &&
--
gitgitgadget
next prev parent reply other threads:[~2023-10-04 18:18 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-20 14:00 [PATCH] attr: attr.allowInvalidSource config to allow invalid revision John Cai via GitGitGadget
2023-09-20 16:06 ` Junio C Hamano
2023-09-21 4:15 ` Jeff King
2023-09-21 8:52 ` Junio C Hamano
2023-09-21 21:40 ` Jeff King
2023-09-26 18:27 ` John Cai
2023-09-26 18:30 ` John Cai
2023-09-26 18:23 ` John Cai
2023-10-04 18:18 ` [PATCH v2 0/2] attr: add attr.tree and attr.allowInvalidSource configs John Cai via GitGitGadget
2023-10-04 18:18 ` [PATCH v2 1/2] attr: add attr.tree for setting the treeish to read attributes from John Cai via GitGitGadget
2023-10-04 19:58 ` Junio C Hamano
2023-10-05 17:07 ` Jeff King
2023-10-05 19:46 ` John Cai
2023-10-04 23:45 ` Junio C Hamano
2023-10-06 17:20 ` Jonathan Tan
2023-10-04 18:18 ` John Cai via GitGitGadget [this message]
2023-10-10 19:49 ` [PATCH v3 0/2] attr: add attr.tree config John Cai via GitGitGadget
2023-10-10 19:49 ` [PATCH v3 1/2] attr: read attributes from HEAD when bare repo John Cai via GitGitGadget
2023-10-10 19:58 ` Eric Sunshine
2023-10-10 19:49 ` [PATCH v3 2/2] attr: add attr.tree for setting the treeish to read attributes from John Cai via GitGitGadget
2023-10-10 22:14 ` Junio C Hamano
2023-10-11 2:19 ` John Cai
2023-10-11 17:13 ` [PATCH v4 0/2] attr: add attr.tree config John Cai via GitGitGadget
2023-10-11 17:13 ` [PATCH v4 1/2] attr: read attributes from HEAD when bare repo John Cai via GitGitGadget
2023-10-11 17:13 ` [PATCH v4 2/2] attr: add attr.tree for setting the treeish to read attributes from John Cai via GitGitGadget
2023-10-11 22:09 ` [PATCH v4 0/2] attr: add attr.tree config Junio C Hamano
2023-10-13 15:30 ` John Cai
2023-10-13 17:39 ` [PATCH v5 " John Cai via GitGitGadget
2023-10-13 17:39 ` [PATCH v5 1/2] attr: read attributes from HEAD when bare repo John Cai via GitGitGadget
2023-10-13 17:39 ` [PATCH v5 2/2] attr: add attr.tree for setting the treeish to read attributes from John Cai via GitGitGadget
2023-10-13 18:52 ` [PATCH v5 0/2] attr: add attr.tree config Junio C Hamano
2023-10-13 20:31 ` Junio C Hamano
2023-10-13 20:47 ` Junio C Hamano
2023-10-19 15:43 ` John Cai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52d9e1803526bf1f267d23f6ef163049f8be77b7.1696443502.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=johncai86@gmail.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).