WIP: Repository#attributes_at can traverse nested .gitattributes files
What
Adds optional recursive: true
param to Repository#attributes_at
to allow .gitattributes
files in subfolders to be checked.
Currenlty this is a WIP prototype using check-attr
with read-tree
and a temporary index. We might choose to do this with our existing ruby parser instead.
Why
This is needed so we can determine if files match the LFS filter in https://gitlab.com/gitlab-org/gitlab-ce/issues/29876 and in https://gitlab.com/gitlab-org/gitlab-ce/issues/39785
Git allows .gitattributes
files in subfolders, and these are added by lfs track
when ran from a subdirectory. Currently we do not properly check these files when processing attributes.
.gitattributes order
https://git-scm.com/docs/gitattributes#_description:
When deciding what attributes are assigned to a path, Git consults $GIT_DIR/info/attributes file (which has the highest precedence), .gitattributes file in the same directory as the path in question, and its parent directories up to the toplevel of the work tree (the further the directory that contains .gitattributes is from the path in question, the lower its precedence). Finally global and system-wide files are considered (they have the lowest precedence).
Acceptance criteria
-
Changelog entry added, if necessary -
Tests added for this feature/bug - Review
-
Has been reviewed by Backend
-
Related
Builds upon https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/16418