Package org.eclipse.jgit.attributes
Class AttributesHandler
- java.lang.Object
-
- org.eclipse.jgit.attributes.AttributesHandler
-
public class AttributesHandler extends java.lang.Object
The attributes handler knows how to retrieve, parse and merge attributes from the various gitattributes files. Furthermore it collects and expands macro expressions. The methodgetAttributes()
yields the ready processed attributes for the current path represented by theTreeWalk
The implementation is based on the specifications in http://git-scm.com/docs/gitattributes
- Since:
- 4.3
-
-
Field Summary
Fields Modifier and Type Field Description private static java.util.List<Attribute>
BINARY_RULE_ATTRIBUTES
This is the default binary rule that is present in any git folder[attr]binary -diff -merge -text
private static java.lang.String
BINARY_RULE_KEY
private java.util.Map<java.lang.String,java.util.List<Attribute>>
expansions
private AttributesNode
globalNode
private AttributesNode
infoNode
private static java.lang.String
MACRO_PREFIX
private TreeWalk
treeWalk
-
Constructor Summary
Constructors Constructor Description AttributesHandler(TreeWalk treeWalk)
Create anAttributesHandler
with default rules as well as merged rules from global, info and worktree root attributes
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static AttributesNode
attributesNode(TreeWalk treeWalk, WorkingTreeIterator workingTreeIterator, DirCacheIterator dirCacheIterator, CanonicalTreeParser otherTree)
Get theAttributesNode
for the current entry.protected void
expandMacro(Attribute attr, Attributes result)
Expand a macroAttributes
getAttributes()
protected void
mergeAttributes(AttributesNode node, java.lang.String entryPath, boolean isDirectory, Attributes result)
Merges the matching node attributes for an entry path.private void
mergeGlobalAttributes(java.lang.String entryPath, boolean isDirectory, Attributes result)
Merges the matching GLOBAL attributes for an entry path.private void
mergeInfoAttributes(java.lang.String entryPath, boolean isDirectory, Attributes result)
Merges the matching INFO attributes for an entry path.private void
mergePerDirectoryEntryAttributes(java.lang.String entryPath, int nameRoot, boolean isDirectory, WorkingTreeIterator workingTreeIterator, DirCacheIterator dirCacheIterator, CanonicalTreeParser otherTree, Attributes result)
Merges the matching working directory attributes for an entry path.private static <T extends AbstractTreeIterator>
TparentOf(T node)
private static <T extends AbstractTreeIterator>
TrootOf(T node)
-
-
-
Field Detail
-
MACRO_PREFIX
private static final java.lang.String MACRO_PREFIX
- See Also:
- Constant Field Values
-
BINARY_RULE_KEY
private static final java.lang.String BINARY_RULE_KEY
- See Also:
- Constant Field Values
-
BINARY_RULE_ATTRIBUTES
private static final java.util.List<Attribute> BINARY_RULE_ATTRIBUTES
This is the default binary rule that is present in any git folder[attr]binary -diff -merge -text
-
treeWalk
private final TreeWalk treeWalk
-
globalNode
private final AttributesNode globalNode
-
infoNode
private final AttributesNode infoNode
-
expansions
private final java.util.Map<java.lang.String,java.util.List<Attribute>> expansions
-
-
Constructor Detail
-
AttributesHandler
public AttributesHandler(TreeWalk treeWalk) throws java.io.IOException
Create anAttributesHandler
with default rules as well as merged rules from global, info and worktree root attributes- Parameters:
treeWalk
- aTreeWalk
- Throws:
java.io.IOException
-
-
Method Detail
-
getAttributes
public Attributes getAttributes() throws java.io.IOException
- Returns:
- the
Attributes
for the current path represented by theTreeWalk
- Throws:
java.io.IOException
-
mergeGlobalAttributes
private void mergeGlobalAttributes(java.lang.String entryPath, boolean isDirectory, Attributes result)
Merges the matching GLOBAL attributes for an entry path.- Parameters:
entryPath
- the path to test. The path must be relative to this attribute node's own repository path, and in repository path format (uses '/' and not '\').isDirectory
- true if the target item is a directory.result
- that will hold the attributes matching this entry path. This method will NOT override any existing entry in attributes.
-
mergeInfoAttributes
private void mergeInfoAttributes(java.lang.String entryPath, boolean isDirectory, Attributes result)
Merges the matching INFO attributes for an entry path.- Parameters:
entryPath
- the path to test. The path must be relative to this attribute node's own repository path, and in repository path format (uses '/' and not '\').isDirectory
- true if the target item is a directory.result
- that will hold the attributes matching this entry path. This method will NOT override any existing entry in attributes.
-
mergePerDirectoryEntryAttributes
private void mergePerDirectoryEntryAttributes(java.lang.String entryPath, int nameRoot, boolean isDirectory, @Nullable WorkingTreeIterator workingTreeIterator, @Nullable DirCacheIterator dirCacheIterator, @Nullable CanonicalTreeParser otherTree, Attributes result) throws java.io.IOException
Merges the matching working directory attributes for an entry path.- Parameters:
entryPath
- the path to test. The path must be relative to this attribute node's own repository path, and in repository path format (uses '/' and not '\').nameRoot
- index of the '/' preceeding the current level, or -1 if noneisDirectory
- true if the target item is a directory.workingTreeIterator
-dirCacheIterator
-otherTree
-result
- that will hold the attributes matching this entry path. This method will NOT override any existing entry in attributes.- Throws:
java.io.IOException
-
mergeAttributes
protected void mergeAttributes(@Nullable AttributesNode node, java.lang.String entryPath, boolean isDirectory, Attributes result)
Merges the matching node attributes for an entry path.- Parameters:
node
- the node to scan for matches to entryPathentryPath
- the path to test. The path must be relative to this attribute node's own repository path, and in repository path format (uses '/' and not '\').isDirectory
- true if the target item is a directory.result
- that will hold the attributes matching this entry path. This method will NOT override any existing entry in attributes.
-
expandMacro
protected void expandMacro(Attribute attr, Attributes result)
Expand a macro- Parameters:
attr
- aAttribute
result
- contains the (recursive) expanded and merged macro attributes including the attribute iself
-
attributesNode
private static AttributesNode attributesNode(TreeWalk treeWalk, @Nullable WorkingTreeIterator workingTreeIterator, @Nullable DirCacheIterator dirCacheIterator, @Nullable CanonicalTreeParser otherTree) throws java.io.IOException
Get theAttributesNode
for the current entry.This method implements the fallback mechanism between the index and the working tree depending on the operation type
- Parameters:
treeWalk
-workingTreeIterator
-dirCacheIterator
-otherTree
-- Returns:
- a
AttributesNode
of the current entry,NullPointerException
otherwise. - Throws:
java.io.IOException
- It raises anIOException
if a problem appears while parsing one on the attributes file.
-
parentOf
private static <T extends AbstractTreeIterator> T parentOf(@Nullable T node)
-
rootOf
private static <T extends AbstractTreeIterator> T rootOf(@Nullable T node)
-
-