From: Junio C Hamano <gitster@pobox.com>
To: "John Cai via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Jeff King <peff@peff.net>,
Jonathan Tan <jonathantanmy@google.com>,
Eric Sunshine <sunshine@sunshineco.com>,
John Cai <johncai86@gmail.com>
Subject: Re: [PATCH v4 0/2] attr: add attr.tree config
Date: Wed, 11 Oct 2023 15:09:45 -0700 [thread overview]
Message-ID: <xmqqjzrskdzq.fsf@gitster.g> (raw)
In-Reply-To: <pull.1577.v4.git.git.1697044422.gitgitgadget@gmail.com> (John Cai via GitGitGadget's message of "Wed, 11 Oct 2023 17:13:40 +0000")
"John Cai via GitGitGadget" <gitgitgadget@gmail.com> writes:
> 44451a2e5e (attr: teach "--attr-source=" global option to "git", 2023-05-06)
> provided the ability to pass in a treeish as the attr source. When a
> revision does not resolve to a valid tree is passed, Git will die. At
> GitLab, we server repositories as bare repos and would like to always read
> attributes from the default branch, so we'd like to pass in HEAD as the
> treeish to read gitattributes from on every command. In this context we
> would not want Git to die if HEAD is unborn, like in the case of empty
> repositories.
>
> Instead of modifying the default behavior of --attr-source, create a new
> config attr.tree with which an admin can configure a ref for all commands to
> read gitattributes from. Also make the default tree to read from HEAD on
> bare repositories.
>
> Changes since v2:
>
> * relax the restrictions around attr.tree so that if it does not resolve to
> a valid treeish, ignore it.
> * add a commit to default to HEAD in bare repositories
>
> Changes since v1:
>
> * Added a commit to add attr.tree config
THis is v4 so there must be some changes since v3 that we are missing?
> Range-diff vs v3:
>
> 1: cef206d47c7 ! 1: eaa27c47810 attr: read attributes from HEAD when bare repo
> @@ t/t0003-attributes.sh: test_expect_success 'bare repository: check that .gitattr
> +test_expect_success 'bare repo defaults to reading .gitattributes from HEAD' '
> + test_when_finished rm -rf test bare_with_gitattribute &&
> + git init test &&
> -+ (
> -+ cd test &&
> -+ test_commit gitattributes .gitattributes "f/path test=val"
> -+ ) &&
> ++ test_commit -C test gitattributes .gitattributes "f/path test=val" &&
OK.
> 2: dadb822da99 ! 2: 749d8a8082e attr: add attr.tree for setting the treeish to read attributes from
> @@ Documentation/config.txt: other popular tools, and describe them in your documen
>
> ## Documentation/config/attr.txt (new) ##
> @@
> -+attr.tree:
> -+ A <tree-ish> to read gitattributes from instead of the worktree. See
> -+ linkgit:gitattributes[5]. If `attr.tree` does not resolve to a valid tree,
> -+ treat it as an empty tree. --attr-source and GIT_ATTR_SOURCE take
> -+ precedence over attr.tree.
> ++attr.tree::
> ++ A reference to a tree in the repository from which to read attributes,
> ++ instead of the `.gitattributes` file in the working tree. In a bare
> ++ repository, this defaults to `HEAD:.gitattributes`. If the value does
> ++ not resolve to a valid tree object, an empty tree is used instead.
> ++ When the `GIT_ATTR_SOURCE` environment variable or `--attr-source`
> ++ command line option are used, this configuration variable has no effect.
OK.
> -+ if (!default_attr_source_tree_object_name) {
> ++ if (!default_attr_source_tree_object_name && git_attr_tree) {
> + default_attr_source_tree_object_name = git_attr_tree;
> + ignore_bad_attr_tree = 1;
> + }
Makes sense.
> @@ t/t0003-attributes.sh: test_expect_success 'bare repository: check that .gitattr
>
> +bad_attr_source_err="fatal: bad --attr-source or GIT_ATTR_SOURCE"
> +
> ++test_expect_success '--attr-source is bad' '
> ++ test_when_finished rm -rf empty &&
> ++ git init empty &&
> ++ (
> ++ cd empty &&
> ++ echo "$bad_attr_source_err" >expect_err &&
> ++ test_must_fail git --attr-source=HEAD check-attr test -- f/path 2>err &&
> ++ test_cmp expect_err err
> ++ )
> ++'
OK. We fail when explicitly given a bad attr-source.
> +test_expect_success 'attr.tree when HEAD is unborn' '
> + test_when_finished rm -rf empty &&
> + git init empty &&
> + (
> + cd empty &&
> -+ echo $bad_attr_source_err >expect_err &&
> + echo "f/path: test: unspecified" >expect &&
> + git -c attr.tree=HEAD check-attr test -- f/path >actual 2>err &&
> + test_must_be_empty err &&
But we silently ignore when given via a configuration variable.
> @@ t/t0003-attributes.sh: test_expect_success 'bare repository: check that .gitattr
> + git init empty &&
> + (
> + cd empty &&
> -+ echo $bad_attr_source_err >expect_err &&
> + echo "f/path: test: unspecified" >expect &&
> + git -c attr.tree=refs/does/not/exist check-attr test -- f/path >actual 2>err &&
> + test_must_be_empty err &&
Ditto. Is this any different from the above? Both points at an
object that does not exist. If one were pointing at an object that
does not exist (e.g., HEAD before the initial commit) and the other
were pointing at an object that is not a tree-ish (e.g., a blob),
then having two separate tests may make sense, but otherwise, I am
not sure about the value proposition of the second test.
> @@ t/t0003-attributes.sh: test_expect_success 'bare repo defaults to reading .gitat
> test_cmp expect actual
> '
>
> -+test_expect_success '--attr-source and GIT_ATTR_SOURCE take precedence over attr.tree' '
> ++test_expect_success 'precedence of --attr-source, GIT_ATTR_SOURCE, then attr.tree' '
> + test_when_finished rm -rf empty &&
> + git init empty &&
> + (
> @@ t/t0003-attributes.sh: test_expect_success 'bare repo defaults to reading .gitat
> + test_commit "val2" .gitattributes "f/path test=val2" &&
> + git checkout attr-source &&
> + echo "f/path: test: val1" >expect &&
> -+ git -c attr.tree=attr-tree --attr-source=attr-source check-attr test -- f/path >actual &&
> ++ GIT_ATTR_SOURCE=attr-source git -c attr.tree=attr-tree --attr-source=attr-source \
> ++ check-attr test -- f/path >actual &&
> + test_cmp expect actual &&
> -+ GIT_ATTR_SOURCE=attr-source git -c attr.tree=attr-tree check-attr test -- f/path >actual &&
> ++ GIT_ATTR_SOURCE=attr-source git -c attr.tree=attr-tree \
> ++ check-attr test -- f/path >actual &&
> + test_cmp expect actual
> + )
> +'
Looking good.
Thanks. Queued.
next prev parent reply other threads:[~2023-10-11 22:09 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 ` [PATCH v2 2/2] attr: add attr.allowInvalidSource config to allow invalid revision John Cai via GitGitGadget
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 ` Junio C Hamano [this message]
2023-10-13 15:30 ` [PATCH v4 0/2] attr: add attr.tree config 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=xmqqjzrskdzq.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=johncai86@gmail.com \
--cc=jonathantanmy@google.com \
--cc=peff@peff.net \
--cc=sunshine@sunshineco.com \
/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).