public class RefTree
extends java.lang.Object
The root corresponds to the "refs/"
subdirectory, for example the
default reference "refs/heads/master"
is stored at path
"heads/master"
in a RefTree
.
Normal references are stored as FileMode.GITLINK
tree entries. The ObjectId in the tree entry is the ObjectId the reference
refers to.
Symbolic references are stored as
FileMode.SYMLINK
entries, with the blob storing
the name of the target reference.
Annotated tags also store the peeled object using a GITLINK
entry
with the suffix " ^"
(space carrot), for example
"tags/v1.0"
stores the annotated tag object, while
"tags/v1.0 ^"
stores the commit the tag annotates.
HEAD
is a special case and stored as "..HEAD"
.
Modifier and Type | Class and Description |
---|---|
private static class |
RefTree.LockFailureException |
Modifier and Type | Field and Description |
---|---|
private DirCache |
contents |
static java.lang.String |
PEELED_SUFFIX
Suffix applied to GITLINK to indicate its the peeled value of a tag.
|
private java.util.Map<ObjectId,java.lang.String> |
pendingBlobs |
(package private) static java.lang.String |
ROOT_DOTDOT |
Modifier and Type | Method and Description |
---|---|
boolean |
apply(java.util.Collection<Command> cmdList)
Attempt a batch of commands against this RefTree.
|
private void |
apply(DirCacheEditor ed,
Command cmd) |
private static void |
checkRef(DirCacheEntry ent,
Command cmd) |
private static void |
cleanupPeeledRef(DirCacheEditor ed,
Ref ref) |
RefTree |
copy()
Create a deep copy of this RefTree.
|
Ref |
exactRef(ObjectReader reader,
java.lang.String name)
Read one reference.
|
private static boolean |
isValidRef(Command cmd) |
static RefTree |
newEmptyTree()
Create an empty reference tree.
|
private static java.lang.String |
peeledPath(java.lang.String name) |
static RefTree |
read(ObjectReader reader,
RevTree tree)
Load a reference tree.
|
private Ref |
readRef(ObjectReader reader,
java.lang.String name) |
static java.lang.String |
refName(java.lang.String path)
Convert a path name in a RefTree to the reference name known by Git.
|
(package private) static java.lang.String |
refPath(java.lang.String name) |
private Ref |
resolve(ObjectReader reader,
Ref ref,
int depth) |
private Ref |
toRef(ObjectReader reader,
DirCacheEntry e,
java.lang.String name) |
ObjectId |
writeTree(ObjectInserter inserter)
Write this reference tree.
|
public static final java.lang.String PEELED_SUFFIX
static final java.lang.String ROOT_DOTDOT
private DirCache contents
private java.util.Map<ObjectId,java.lang.String> pendingBlobs
private RefTree(DirCache dc)
public static RefTree newEmptyTree()
public static RefTree read(ObjectReader reader, RevTree tree) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, java.io.IOException
reader
- reader to scan the reference tree with.tree
- the tree to read.java.io.IOException
- the repository cannot be accessed through the reader.CorruptObjectException
- a tree object is corrupt and cannot be read.IncorrectObjectTypeException
- a tree object wasn't actually a tree.MissingObjectException
- a reference tree object doesn't exist.@Nullable public Ref exactRef(ObjectReader reader, java.lang.String name) throws java.io.IOException
References are always returned peeled
(Ref.isPeeled()
is true). If the reference
points to an annotated tag, the returned reference will be peeled and
contain Ref.getPeeledObjectId()
.
If the reference is a symbolic reference and the chain depth is less than
RefDatabase.MAX_SYMBOLIC_REF_DEPTH
the
returned reference is resolved. If the chain depth is longer, the
symbolic reference is returned without resolving.
reader
- to access objects necessary to read the requested reference.name
- name of the reference to read.java.io.IOException
- cannot read a symbolic reference target.private Ref readRef(ObjectReader reader, java.lang.String name) throws java.io.IOException
java.io.IOException
private Ref toRef(ObjectReader reader, DirCacheEntry e, java.lang.String name) throws java.io.IOException
java.io.IOException
private Ref resolve(ObjectReader reader, Ref ref, int depth) throws java.io.IOException
java.io.IOException
public boolean apply(java.util.Collection<Command> cmdList)
The batch is applied atomically, either all commands apply at once, or they all reject and the RefTree is left unmodified.
On success (when this method returns true
) the command results
are left as-is (probably NOT_ATTEMPTED
). Result fields are set
only when this method returns false
to indicate failure.
cmdList
- to apply. All commands should still have result NOT_ATTEMPTED.private static boolean isValidRef(Command cmd)
private void apply(DirCacheEditor ed, Command cmd)
private static void checkRef(@Nullable DirCacheEntry ent, Command cmd)
private static void cleanupPeeledRef(DirCacheEditor ed, Ref ref)
public static java.lang.String refName(java.lang.String path)
path
- name read from the RefTree structure, for example
"heads/master"
."refs/heads/master"
.static java.lang.String refPath(java.lang.String name)
private static java.lang.String peeledPath(java.lang.String name)
public ObjectId writeTree(ObjectInserter inserter) throws java.io.IOException
inserter
- inserter to use when writing trees to the object database.
Caller is responsible for flushing the inserter before trying
to read the objects, or exposing them through a reference.java.io.IOException
- a tree could not be written.public RefTree copy()