class TransportHttp.HttpObjectDB extends WalkRemoteObjectDatabase
WalkRemoteObjectDatabase.FileStream
Modifier and Type | Field and Description |
---|---|
private java.net.URL |
httpObjectsUrl |
INFO_ALTERNATES, INFO_HTTP_ALTERNATES, INFO_PACKS, INFO_REFS, ROOT_DIR
Constructor and Description |
---|
HttpObjectDB(java.net.URL b) |
Modifier and Type | Method and Description |
---|---|
(package private) void |
close()
Close any resources used by this connection.
|
private PackProtocolException |
duplicateAdvertisement(java.lang.String n) |
(package private) java.util.Collection<WalkRemoteObjectDatabase> |
getAlternates()
Obtain alternate connections to alternate object databases (if any).
|
(package private) java.util.Collection<java.lang.String> |
getPackNames()
Obtain the list of available packs (if any).
|
(package private) URIish |
getURI() |
private PackProtocolException |
invalidAdvertisement(java.lang.String n) |
(package private) WalkRemoteObjectDatabase.FileStream |
open(java.lang.String path)
Open a single file for reading.
|
(package private) WalkRemoteObjectDatabase.FileStream |
open(java.lang.String path,
TransportHttp.AcceptEncoding acceptEncoding) |
(package private) WalkRemoteObjectDatabase |
openAlternate(java.lang.String location)
Create a new connection for a discovered alternate object database
|
(package private) java.io.BufferedReader |
openReader(java.lang.String path)
Open a buffered reader around a file.
|
private PackProtocolException |
outOfOrderAdvertisement(java.lang.String n) |
(package private) java.util.Map<java.lang.String,Ref> |
readAdvertisedImpl(java.io.BufferedReader br) |
deleteFile, deleteRef, deleteRefLog, readAlternates, readPackedRefs, writeFile, writeFile, writeInfoPacks, writeRef
URIish getURI()
getURI
in class WalkRemoteObjectDatabase
java.util.Collection<WalkRemoteObjectDatabase> getAlternates() throws java.io.IOException
WalkRemoteObjectDatabase
Alternates are typically read from the file WalkRemoteObjectDatabase.INFO_ALTERNATES
or
WalkRemoteObjectDatabase.INFO_HTTP_ALTERNATES
. The content of each line must be resolved
by the implementation and a new database reference should be returned to
represent the additional location.
Alternates may reuse the same network connection handle, however the
fetch connection will WalkRemoteObjectDatabase.close()
each created alternate.
getAlternates
in class WalkRemoteObjectDatabase
java.io.IOException
- The connection is unable to read the remote repository's list
of configured alternates.WalkRemoteObjectDatabase openAlternate(java.lang.String location) throws java.io.IOException
WalkRemoteObjectDatabase
This method is typically called by WalkRemoteObjectDatabase.readAlternates(String)
when
subclasses us the generic alternate parsing logic for their
implementation of WalkRemoteObjectDatabase.getAlternates()
.
openAlternate
in class WalkRemoteObjectDatabase
location
- the location of the new alternate, relative to the current
object database.java.io.IOException
- The database connection cannot be established with the
alternate, such as if the alternate location does not
actually exist and the connection's constructor attempts to
verify that.java.io.BufferedReader openReader(java.lang.String path) throws java.io.IOException
WalkRemoteObjectDatabase
This method is suitable for reading line-oriented resources like
info/packs
, info/refs
, and the alternates list.
openReader
in class WalkRemoteObjectDatabase
path
- location of the file to read, relative to this objects
directory (e.g. info/packs
).java.io.FileNotFoundException
- the requested file does not exist at the given location.java.io.IOException
- The connection is unable to read the remote's file, and the
failure occurred prior to being able to determine if the file
exists, or after it was determined to exist but before the
stream could be created.java.util.Collection<java.lang.String> getPackNames() throws java.io.IOException
WalkRemoteObjectDatabase
Pack names should be the file name in the packs directory, that is
pack-035760ab452d6eebd123add421f253ce7682355a.pack
. Index
names should not be included in the returned collection.
getPackNames
in class WalkRemoteObjectDatabase
java.io.IOException
- The connection is unable to read the remote repository's list
of available pack files.WalkRemoteObjectDatabase.FileStream open(java.lang.String path) throws java.io.IOException
WalkRemoteObjectDatabase
Implementors should make every attempt possible to ensure
FileNotFoundException
is used when the remote object does not
exist. However when fetching over HTTP some misconfigured servers may
generate a 200 OK status message (rather than a 404 Not Found) with an
HTML formatted message explaining the requested resource does not exist.
Callers such as WalkFetchConnection
are prepared to handle this
by validating the content received, and assuming content that fails to
match its hash is an incorrectly phrased FileNotFoundException.
This method is recommended for already compressed files like loose objects
and pack files. For text files, see WalkRemoteObjectDatabase.openReader(String)
.
open
in class WalkRemoteObjectDatabase
path
- location of the file to read, relative to this objects
directory (e.g.
cb/95df6ab7ae9e57571511ef451cf33767c26dd2
or
pack/pack-035760ab452d6eebd123add421f253ce7682355a.pack
).java.io.FileNotFoundException
- the requested file does not exist at the given location.java.io.IOException
- The connection is unable to read the remote's file, and the
failure occurred prior to being able to determine if the file
exists, or after it was determined to exist but before the
stream could be created.WalkRemoteObjectDatabase.FileStream open(java.lang.String path, TransportHttp.AcceptEncoding acceptEncoding) throws java.io.IOException
java.io.IOException
java.util.Map<java.lang.String,Ref> readAdvertisedImpl(java.io.BufferedReader br) throws java.io.IOException, PackProtocolException
java.io.IOException
PackProtocolException
private PackProtocolException outOfOrderAdvertisement(java.lang.String n)
private PackProtocolException invalidAdvertisement(java.lang.String n)
private PackProtocolException duplicateAdvertisement(java.lang.String n)
void close()
WalkRemoteObjectDatabase
If the remote repository is contacted by a network socket this method must close that network socket, disconnecting the two peers. If the remote repository is actually local (same system) this method must close any open file handles used to read the "remote" repository.
close
in class WalkRemoteObjectDatabase