Package aQute.libg.cafs
Class CAFS
- java.lang.Object
-
- aQute.libg.cafs.CAFS
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,java.lang.Iterable<SHA1>
public class CAFS extends java.lang.Object implements java.io.Closeable, java.lang.Iterable<SHA1>
CAFS implements a SHA-1 based file store. The basic idea is that every file in the universe has a unique SHA-1. Hard to believe but people smarter than me have come to that conclusion. This class maintains a compressed store of SHA-1 identified files. So if you have the SHA-1, you can get the contents. This makes it easy to store a SHA-1 instead of the whole file or maintain a naming scheme. An added advantage is that it is always easy to verify you get the right stuff. The SHA-1 Content Addressable File Store is the core underlying idea in Git.
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static java.lang.StringALGORITHM(package private) static byte[]CAFE(package private) static byte[]CAFS(package private) java.nio.channels.FileChannelchannel(package private) static intHEADERLENGTH(package private) java.io.Filehome(package private) Indexindex(package private) static java.lang.StringINDEXFILE(package private) static intKEYLENGTH(package private) java.io.RandomAccessFilestore(package private) static java.lang.StringSTOREFILE
-
Constructor Summary
Constructors Constructor Description CAFS(java.io.File home, boolean create)Constructor for a Content Addressable File Store
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) shortchecksum(int flags, int compressedLength, int totalLength, byte[] sha1)voidclose()booleanexists(byte[] sha1)private java.io.InputStreamgetSha1Stream(SHA1 sha1, byte[] buffer, int total)booleanisEmpty()java.util.Iterator<SHA1>iterator()java.io.InputStreamread(SHA1 sha1)Read the contents of a sha 1 key.voidreindex()private voidupdate(byte[] sha1, byte[] compressed, int totalLength)Update a record in the store, assuming the store is at the right position.private SHA1verifyEntry(java.io.RandomAccessFile in)private booleanverifySignature(java.io.DataInput din, byte[] org)SHA1write(java.io.InputStream in)Store an input stream in the CAFS while calculating and returning the SHA-1 code.
-
-
-
Field Detail
-
CAFS
static final byte[] CAFS
-
CAFE
static final byte[] CAFE
-
INDEXFILE
static final java.lang.String INDEXFILE
- See Also:
- Constant Field Values
-
STOREFILE
static final java.lang.String STOREFILE
- See Also:
- Constant Field Values
-
ALGORITHM
static final java.lang.String ALGORITHM
- See Also:
- Constant Field Values
-
KEYLENGTH
static final int KEYLENGTH
- See Also:
- Constant Field Values
-
HEADERLENGTH
static final int HEADERLENGTH
- See Also:
- Constant Field Values
-
home
final java.io.File home
-
index
Index index
-
store
java.io.RandomAccessFile store
-
channel
java.nio.channels.FileChannel channel
-
-
Method Detail
-
write
public SHA1 write(java.io.InputStream in) throws java.lang.Exception
Store an input stream in the CAFS while calculating and returning the SHA-1 code.- Parameters:
in- The input stream to store.- Returns:
- The SHA-1 code.
- Throws:
java.lang.Exception- if anything goes wrong
-
read
public java.io.InputStream read(SHA1 sha1) throws java.lang.Exception
Read the contents of a sha 1 key.- Parameters:
sha1- The key- Returns:
- An Input Stream on the content or null of key not found
- Throws:
java.lang.Exception
-
exists
public boolean exists(byte[] sha1) throws java.lang.Exception- Throws:
java.lang.Exception
-
reindex
public void reindex() throws java.lang.Exception- Throws:
java.lang.Exception
-
close
public void close() throws java.io.IOException- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Throws:
java.io.IOException
-
verifyEntry
private SHA1 verifyEntry(java.io.RandomAccessFile in) throws java.io.IOException, java.security.NoSuchAlgorithmException
- Throws:
java.io.IOExceptionjava.security.NoSuchAlgorithmException
-
verifySignature
private boolean verifySignature(java.io.DataInput din, byte[] org) throws java.io.IOException- Throws:
java.io.IOException
-
getSha1Stream
private java.io.InputStream getSha1Stream(SHA1 sha1, byte[] buffer, int total) throws java.security.NoSuchAlgorithmException
- Throws:
java.security.NoSuchAlgorithmException
-
update
private void update(byte[] sha1, byte[] compressed, int totalLength) throws java.io.IOExceptionUpdate a record in the store, assuming the store is at the right position.- Parameters:
sha1- The checksumcompressed- The compressed lengthtotalLength- The uncompressed length- Throws:
java.io.IOException- The exception
-
checksum
short checksum(int flags, int compressedLength, int totalLength, byte[] sha1)
-
iterator
public java.util.Iterator<SHA1> iterator()
- Specified by:
iteratorin interfacejava.lang.Iterable<SHA1>
-
isEmpty
public boolean isEmpty() throws java.io.IOException- Throws:
java.io.IOException
-
-