Git will start to support SHA-256 as a hash for repositories in the near
future. Let's update gitobj to version 2 to support SHA-256
repositories properly. We initialize the repository based on the
extensions.objectFormat value, if one is provided, since this is the
configuration key that represents the hash algorithm.
Vendor the proper dependencies in place.
The TestNewDiscovers*ChildrenTrees tests ensure that child trees are
discovered and applied to given paths correctly.
To make sure that we aren't applying patterns from the wrong place,
let's ensure that the top-level Lines is empty, implying that any
applied attributes come from a child.
This is a safe thing to do, since Lines and Children are both part of
the public scope of a *gitattr.Tree instance, and therefore should be in
a correct state and use-able by any caller who wishes to do so.
This commit introduces package github.com/git-lfs/git-lfs/git/gitattr,
which manifests a tree-like representation of a repository's
.gitattribute file(s).
It introduces the following top-level and member functions:
- func ParseLines(r io.Reader) ([]*Line, error)
Parses the lines of a .gitattributes-like io.Reader into a set of
wildmatch to attribute-set pairings, or an error if one was
encountered.
- func New(db *gitobj.ObjectDatabase, t *gitobj.Tree) (*Tree, error)
Visits all trees reachable from "t" in a depth-first search to
reconstruct a tree-representation of all .gitattributes file(s) in the
repository.
- func (t *Tree) Applied(to string) []*Attr
Finds all attributes in-order that are applied to "to" relative to the
receiving *Tree's location in the repository's tree structure.
This will become useful in subsequent commits when this is used to scan
a repository's .gitattributes files before rewriting the blobs in that
repository during the forthcoming 'git lfs migrate import --fixup' mode.