Class ObjectDirectory
ObjectDatabase
.
This is the classical object database representation for a Git repository,
where objects are stored loose by hashing them into directories by their
ObjectId
, or are stored in compressed containers
known as Pack
s.
Optionally an object database can reference one or more alternates; other ObjectDatabase instances that are searched in addition to the current database.
Databases are divided into two halves: a half that is considered to be fast
to search (the PackFile
s), and a half that is considered to be slow
to search (loose objects). When alternates are present the fast half is fully
searched (recursively through all alternates) before the slow half is
considered.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static class
(package private) static class
Nested classes/interfaces inherited from class org.eclipse.jgit.internal.storage.file.FileObjectDatabase
FileObjectDatabase.InsertLooseObjectResult
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AtomicReference
<ObjectDirectory.AlternateHandle[]> private final File
private final Config
private final FS
private final ObjectDirectory.AlternateHandle
private final File
private final LooseObjects
private final File
private final PackDirectory
private final PackDirectory
private static final int
Maximum number of candidates offered as resolutions of abbreviation.private final File
private FileSnapshot
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) Set
<ObjectDirectory.AlternateHandle.Id> void
close()
Close any resources held by this database.(package private) void
closeAllPackHandles
(File packFile) void
create()
Initialize a new object database at this location.boolean
exists()
Does this database exist yet?fileFor
(AnyObjectId objectId) Compute the location of a loose object file.(package private) ObjectDirectory.AlternateHandle.Id
(package private) Config
final File
(package private) FS
getFS()
private long
getLooseSizeFromSelfOrAlternate
(WindowCursor curs, AnyObjectId id, Set<ObjectDirectory.AlternateHandle.Id> skips) (package private) long
getObjectSize
(WindowCursor curs, AnyObjectId id) private long
final File
Getter for the fieldpackDirectory
.private long
getPackedSizeFromSelfOrAlternate
(WindowCursor curs, AnyObjectId id, Set<ObjectDirectory.AlternateHandle.Id> skips) getPacks()
final File
Getter for the fieldpreservedDirectory
.boolean
has
(AnyObjectId objectId) Does the requested object exist in this database?private boolean
hasLooseInSelfOrAlternate
(AnyObjectId objectId, Set<ObjectDirectory.AlternateHandle.Id> skips) private boolean
hasPackedInSelfOrAlternate
(AnyObjectId objectId, Set<ObjectDirectory.AlternateHandle.Id> skips) (package private) boolean
hasPackedObject
(AnyObjectId objectId) private boolean
hasPackedOrLooseInSelfOrAlternate
(AnyObjectId objectId) (package private) FileObjectDatabase.InsertLooseObjectResult
insertUnpackedObject
(File tmp, ObjectId id, boolean createDuplicate) private ObjectDirectory.AlternateHandle[]
(package private) ObjectDirectory.AlternateHandle[]
Create a new cached database instance over this database.(package private) CachedObjectDirectory
Create a newObjectInserter
to insert new objects.Create a new inserter that inserts all objects as pack files, not loose objects.private static BufferedReader
private ObjectDirectory.AlternateHandle
openAlternate
(File objdir) private ObjectDirectory.AlternateHandle
openAlternate
(String location) private ObjectLoader
openLooseFromSelfOrAlternate
(WindowCursor curs, AnyObjectId objectId, Set<ObjectDirectory.AlternateHandle.Id> skips) (package private) ObjectLoader
openLooseObject
(WindowCursor curs, AnyObjectId id) (package private) ObjectLoader
openObject
(WindowCursor curs, AnyObjectId objectId) private ObjectLoader
openObjectWithoutRestoring
(WindowCursor curs, AnyObjectId objectId) private ObjectLoader
openPackedFromSelfOrAlternate
(WindowCursor curs, AnyObjectId objectId, Set<ObjectDirectory.AlternateHandle.Id> skips) (package private) ObjectLoader
openPackedObject
(WindowCursor curs, AnyObjectId objectId) (package private) void
resolve
(Set<ObjectId> matches, AbbreviatedObjectId id) private void
resolve
(Set<ObjectId> matches, AbbreviatedObjectId id, Set<ObjectDirectory.AlternateHandle.Id> skips) private boolean
private boolean
restoreFromSelf
(AnyObjectId objectId) private boolean
restoreFromSelfOrAlternate
(AnyObjectId objectId, Set<ObjectDirectory.AlternateHandle.Id> skips) (package private) void
selectObjectRepresentation
(PackWriter packer, ObjectToPack otp, WindowCursor curs) private void
selectObjectRepresentation
(PackWriter packer, ObjectToPack otp, WindowCursor curs, Set<ObjectDirectory.AlternateHandle.Id> skips) toString()
Methods inherited from class org.eclipse.jgit.internal.storage.file.FileObjectDatabase
newReader
Methods inherited from class org.eclipse.jgit.lib.ObjectDatabase
open, open
-
Field Details
-
RESOLVE_ABBREV_LIMIT
private static final int RESOLVE_ABBREV_LIMITMaximum number of candidates offered as resolutions of abbreviation.- See Also:
-
handle
-
config
-
objects
-
infoDirectory
-
loose
-
packed
-
preserved
-
alternatesFile
-
fs
-
alternates
-
shallowFile
-
shallowFileSnapshot
-
shallowCommitsIds
-
-
Constructor Details
-
ObjectDirectory
public ObjectDirectory(Config cfg, File dir, File[] alternatePaths, FS fs, File shallowFile) throws IOException Initialize a reference to an on-disk object directory.- Parameters:
cfg
- configuration this directory consults for write settings.dir
- the location of theobjects
directory.alternatePaths
- a list of alternate object directoriesfs
- the file system abstraction which will be necessary to perform certain file system operations.shallowFile
- file which contains IDs of shallow commits, null if shallow commits handling should be turned off- Throws:
IOException
- an alternate object cannot be opened.
-
-
Method Details
-
getDirectory
- Specified by:
getDirectory
in classFileObjectDatabase
-
getPackDirectory
Getter for the field
packDirectory
.- Returns:
- the location of the
pack
directory.
-
getPreservedDirectory
Getter for the field
preservedDirectory
.- Returns:
- the location of the
preserved
directory.
-
exists
public boolean exists()Does this database exist yet?- Overrides:
exists
in classObjectDatabase
- Returns:
- true if this database is already created; false if the caller
should invoke
ObjectDatabase.create()
to create this database location.
-
create
Initialize a new object database at this location.- Overrides:
create
in classObjectDatabase
- Throws:
IOException
- the database could not be created.
-
newInserter
Create a newObjectInserter
to insert new objects.The returned inserter is not itself thread-safe, but multiple concurrent inserter instances created from the same
ObjectDatabase
must be thread-safe.- Overrides:
newInserter
in classFileObjectDatabase
- Returns:
- writer the caller can use to create objects in this database.
-
newPackInserter
Create a new inserter that inserts all objects as pack files, not loose objects.- Returns:
- new inserter.
-
close
public void close()Close any resources held by this database.- Specified by:
close
in classObjectDatabase
-
getPacks
- Specified by:
getPacks
in classFileObjectDatabase
-
openPack
Add a single existing pack to the list of available pack files.
- Specified by:
openPack
in classFileObjectDatabase
- Throws:
IOException
-
toString
-
has
Does the requested object exist in this database?This is a one-shot call interface which may be faster than allocating a
ObjectDatabase.newReader()
to perform the lookup.- Overrides:
has
in classObjectDatabase
- Parameters:
objectId
- identity of the object to test for existence of.- Returns:
- true if the specified object is stored in this database.
-
hasPackedOrLooseInSelfOrAlternate
-
hasPackedInSelfOrAlternate
private boolean hasPackedInSelfOrAlternate(AnyObjectId objectId, Set<ObjectDirectory.AlternateHandle.Id> skips) -
hasLooseInSelfOrAlternate
private boolean hasLooseInSelfOrAlternate(AnyObjectId objectId, Set<ObjectDirectory.AlternateHandle.Id> skips) -
hasPackedObject
-
resolve
- Specified by:
resolve
in classFileObjectDatabase
- Throws:
IOException
-
resolve
private void resolve(Set<ObjectId> matches, AbbreviatedObjectId id, Set<ObjectDirectory.AlternateHandle.Id> skips) throws IOException - Throws:
IOException
-
openObject
- Specified by:
openObject
in classFileObjectDatabase
- Throws:
IOException
-
openObjectWithoutRestoring
private ObjectLoader openObjectWithoutRestoring(WindowCursor curs, AnyObjectId objectId) throws IOException - Throws:
IOException
-
openPackedFromSelfOrAlternate
private ObjectLoader openPackedFromSelfOrAlternate(WindowCursor curs, AnyObjectId objectId, Set<ObjectDirectory.AlternateHandle.Id> skips) -
openLooseFromSelfOrAlternate
private ObjectLoader openLooseFromSelfOrAlternate(WindowCursor curs, AnyObjectId objectId, Set<ObjectDirectory.AlternateHandle.Id> skips) throws IOException - Throws:
IOException
-
openPackedObject
-
openLooseObject
- Specified by:
openLooseObject
in classFileObjectDatabase
- Throws:
IOException
-
getObjectSize
- Specified by:
getObjectSize
in classFileObjectDatabase
- Throws:
IOException
-
getObjectSizeWithoutRestoring
- Throws:
IOException
-
getPackedSizeFromSelfOrAlternate
private long getPackedSizeFromSelfOrAlternate(WindowCursor curs, AnyObjectId id, Set<ObjectDirectory.AlternateHandle.Id> skips) -
getLooseSizeFromSelfOrAlternate
private long getLooseSizeFromSelfOrAlternate(WindowCursor curs, AnyObjectId id, Set<ObjectDirectory.AlternateHandle.Id> skips) throws IOException - Throws:
IOException
-
selectObjectRepresentation
void selectObjectRepresentation(PackWriter packer, ObjectToPack otp, WindowCursor curs) throws IOException - Specified by:
selectObjectRepresentation
in classFileObjectDatabase
- Throws:
IOException
-
selectObjectRepresentation
private void selectObjectRepresentation(PackWriter packer, ObjectToPack otp, WindowCursor curs, Set<ObjectDirectory.AlternateHandle.Id> skips) throws IOException - Throws:
IOException
-
restoreFromSelfOrAlternate
private boolean restoreFromSelfOrAlternate(AnyObjectId objectId, Set<ObjectDirectory.AlternateHandle.Id> skips) -
restoreFromSelf
-
restore
-
insertUnpackedObject
FileObjectDatabase.InsertLooseObjectResult insertUnpackedObject(File tmp, ObjectId id, boolean createDuplicate) throws IOException - Specified by:
insertUnpackedObject
in classFileObjectDatabase
- Throws:
IOException
-
getConfig
Config getConfig()- Specified by:
getConfig
in classFileObjectDatabase
-
getFS
FS getFS()- Specified by:
getFS
in classFileObjectDatabase
-
getShallowCommits
- Specified by:
getShallowCommits
in classFileObjectDatabase
- Throws:
IOException
-
closeAllPackHandles
-
myAlternates
ObjectDirectory.AlternateHandle[] myAlternates() -
addMe
-
loadAlternates
- Throws:
IOException
-
open
- Throws:
IOException
FileNotFoundException
-
openAlternate
- Throws:
IOException
-
openAlternate
- Throws:
IOException
-
fileFor
Compute the location of a loose object file.- Specified by:
fileFor
in classFileObjectDatabase
-
newCachedDatabase
Create a new cached database instance over this database. This instance might optimize queries by caching some information about database. So some modifications done after instance creation might fail to be noticed.- Overrides:
newCachedDatabase
in classObjectDatabase
- Returns:
- new cached database instance
-
newCachedFileObjectDatabase
CachedObjectDirectory newCachedFileObjectDatabase() -
getAlternateId
ObjectDirectory.AlternateHandle.Id getAlternateId()
-