Class DfsInserter
- java.lang.Object
-
- org.eclipse.jgit.lib.ObjectInserter
-
- org.eclipse.jgit.internal.storage.dfs.DfsInserter
-
- All Implemented Interfaces:
java.lang.AutoCloseable
public class DfsInserter extends ObjectInserter
Inserts objects into the DFS.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private class
DfsInserter.PackStream
private class
DfsInserter.ReadBackStream
private class
DfsInserter.Reader
private class
DfsInserter.StreamLoader
-
Nested classes/interfaces inherited from class org.eclipse.jgit.lib.ObjectInserter
ObjectInserter.Filter, ObjectInserter.Formatter
-
-
Field Summary
Fields Modifier and Type Field Description (package private) DfsBlockCache
cache
private boolean
checkExisting
(package private) int
compression
(package private) DfsObjDatabase
db
private static int
INDEX_VERSION
Always produce version 2 indexes, to get CRC data.(package private) java.util.List<PackedObjectInfo>
objectList
(package private) ObjectIdOwnerMap<PackedObjectInfo>
objectMap
(package private) DfsPackDescription
packDsc
(package private) DfsStreamKey
packKey
(package private) DfsInserter.PackStream
packOut
private boolean
rollback
-
Constructor Summary
Constructors Modifier Constructor Description protected
DfsInserter(DfsObjDatabase db)
Initialize a new inserter.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private long
beginObject(int type, long len)
private void
beginPack()
void
checkExisting(boolean check)
Check existenceprivate void
clear()
void
close()
private ObjectId
endObject(ObjectId id, long offset)
void
flush()
Make all inserted objects visible.private static void
index(java.io.OutputStream out, byte[] packHash, java.util.List<PackedObjectInfo> list)
ObjectId
insert(int type, byte[] data, int off, int len)
Insert a single object into the store, returning its unique name.ObjectId
insert(int type, long len, java.io.InputStream in)
Insert a single object into the store, returning its unique name.private byte[]
insertBuffer(long len)
private TemporaryBuffer.Heap
maybeGetTemporaryBuffer(java.util.List<PackedObjectInfo> list)
DfsPackParser
newPackParser(java.io.InputStream in)
Initialize a parser to read from a pack formatted stream.ObjectReader
newReader()
Open a reader for objects that may have been written by this inserter.(package private) void
setCompressionLevel(int compression)
private void
sortObjectsById()
(package private) PackIndex
writePackIndex(DfsPackDescription pack, byte[] packHash, java.util.List<PackedObjectInfo> list)
-
-
-
Field Detail
-
INDEX_VERSION
private static final int INDEX_VERSION
Always produce version 2 indexes, to get CRC data.- See Also:
- Constant Field Values
-
db
final DfsObjDatabase db
-
compression
int compression
-
objectList
java.util.List<PackedObjectInfo> objectList
-
objectMap
ObjectIdOwnerMap<PackedObjectInfo> objectMap
-
cache
DfsBlockCache cache
-
packKey
DfsStreamKey packKey
-
packDsc
DfsPackDescription packDsc
-
packOut
DfsInserter.PackStream packOut
-
rollback
private boolean rollback
-
checkExisting
private boolean checkExisting
-
-
Constructor Detail
-
DfsInserter
protected DfsInserter(DfsObjDatabase db)
Initialize a new inserter.- Parameters:
db
- database the inserter writes to.
-
-
Method Detail
-
checkExisting
public void checkExisting(boolean check)
Check existence- Parameters:
check
- iffalse
, will write out possibly-duplicate objects without first checking whether they exist in the repo; default is true.
-
setCompressionLevel
void setCompressionLevel(int compression)
-
newPackParser
public DfsPackParser newPackParser(java.io.InputStream in) throws java.io.IOException
Initialize a parser to read from a pack formatted stream.- Specified by:
newPackParser
in classObjectInserter
- Parameters:
in
- the input stream. The stream is not closed by the parser, and must instead be closed by the caller once parsing is complete.- Returns:
- the pack parser.
- Throws:
java.io.IOException
- the parser instance, which can be configured and then used to parse objects into the ObjectDatabase.
-
newReader
public ObjectReader newReader()
Open a reader for objects that may have been written by this inserter.The returned reader allows the calling thread to read back recently inserted objects without first calling
flush()
to make them visible to the repository. The returned reader should only be used from the same thread as the inserter. Objects written by this inserter may not be visible tothis.newReader().newReader()
.The returned reader should return this inserter instance from
ObjectReader.getCreatedFromInserter()
.Behavior is undefined if an insert method is called on the inserter in the middle of reading from an
ObjectStream
opened from this reader. For example, reading the remainder of the object may fail, or newly written data may even be corrupted. Interleaving whole object reads (including streaming reads) with inserts is fine, just not interleaving streaming partial object reads with inserts.- Specified by:
newReader
in classObjectInserter
- Returns:
- reader for any object, including an object recently inserted by this inserter since the last flush.
-
insert
public ObjectId insert(int type, byte[] data, int off, int len) throws java.io.IOException
Insert a single object into the store, returning its unique name.- Overrides:
insert
in classObjectInserter
- Parameters:
type
- type code of the object to store.data
- complete content of the object.off
- first position withindata
.len
- number of bytes to copy fromdata
.- Returns:
- the name of the object.
- Throws:
java.io.IOException
- the object could not be stored.
-
insert
public ObjectId insert(int type, long len, java.io.InputStream in) throws java.io.IOException
Insert a single object into the store, returning its unique name.- Specified by:
insert
in classObjectInserter
- Parameters:
type
- type code of the object to store.len
- number of bytes to copy fromin
.in
- stream providing the object content. The caller is responsible for closing the stream.- Returns:
- the name of the object.
- Throws:
java.io.IOException
- the object could not be stored, or the source stream could not be read.
-
insertBuffer
private byte[] insertBuffer(long len)
-
flush
public void flush() throws java.io.IOException
Make all inserted objects visible.The flush may take some period of time to make the objects available to other threads.
- Specified by:
flush
in classObjectInserter
- Throws:
java.io.IOException
- the flush could not be completed; objects inserted thus far are in an indeterminate state.
-
close
public void close()
Release any resources used by this inserter.
An inserter that has been released can be used again, but may need to be released after the subsequent usage.
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in classObjectInserter
-
clear
private void clear()
-
beginObject
private long beginObject(int type, long len) throws java.io.IOException
- Throws:
java.io.IOException
-
beginPack
private void beginPack() throws java.io.IOException
- Throws:
java.io.IOException
-
sortObjectsById
private void sortObjectsById()
-
maybeGetTemporaryBuffer
@Nullable private TemporaryBuffer.Heap maybeGetTemporaryBuffer(java.util.List<PackedObjectInfo> list)
-
writePackIndex
PackIndex writePackIndex(DfsPackDescription pack, byte[] packHash, java.util.List<PackedObjectInfo> list) throws java.io.IOException
- Throws:
java.io.IOException
-
index
private static void index(java.io.OutputStream out, byte[] packHash, java.util.List<PackedObjectInfo> list) throws java.io.IOException
- Throws:
java.io.IOException
-
-