Class BasePackConnection
- All Implemented Interfaces:
AutoCloseable
,Connection
- Direct Known Subclasses:
BasePackFetchConnection
,BasePackPushConnection
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionExtra objects the remote has, but which aren't offered as refs.protected static final String
protected InputStream
Input stream reading from the remote.protected final Repository
The repository this transport fetches into, or pushes out of.private InterruptTimer
Timer to managetimeoutIn
andtimeoutOut
.protected OutputStream
Output stream sending to the remote.protected boolean
SendPacketLineOut.end()
before closingout
?protected PacketLineIn
Packet line decoder aroundin
.protected PacketLineOut
Packet line encoder aroundout
.private TransferConfig.ProtocolVersion
Capability tokens advertised by the remote side.protected boolean
True if this is a stateless RPC connection.protected TimeoutInputStream
Low-level input stream, if a timeout was configured.protected TimeoutOutputStream
Low-level output stream, if a timeout was configured.protected final Transport
A transport connected touri
.protected final URIish
Remote repository location. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate void
addCapability
(String capability) protected void
Add user agent capabilityvoid
close()
private PackProtocolException
duplicateAdvertisement
(String name) protected void
endOut()
Tell the peer we are disconnecting, if it cares to know.protected String
getCapability
(String option) Return a capability value.User agent advertised by the remote server.(package private) TransferConfig.ProtocolVersion
private Collection
<String> getRefPrefixes
(Collection<RefSpec> refSpecs, String... additionalPatterns) protected final void
init
(InputStream myIn, OutputStream myOut) Configure this connection with the directional pipes.private PackProtocolException
protected boolean
isCapableOf
(String option) Whether this option is supportedprotected void
lsRefs
(Collection<RefSpec> refSpecs, String... additionalPatterns) Issue a protocol V2 ls-refs command and read its response.private void
lsRefsImpl
(Collection<RefSpec> refSpecs, String... additionalPatterns) protected TransportException
Create an exception to indicate problems finding a remote repository.private void
private void
processLineV2
(String line, ObjectId id, String rest, Map<String, Ref> avail, Map<String, String> symRefs) protected boolean
Reads the advertised references through the initialized stream.private boolean
private void
private String
readLine()
(package private) void
private ObjectId
(package private) static void
Updates the given refMap withSymbolicRef
s defined by the given symRefs.protected boolean
wantCapability
(StringBuilder b, String option) Request capabilityMethods inherited from class org.eclipse.jgit.transport.BaseConnection
available, getMessages, getMessageWriter, getRef, getRefs, getRefsMap, markStartedOperation, setMessageWriter, setPeerUserAgent
-
Field Details
-
CAPABILITY_SYMREF_PREFIX
- See Also:
-
local
The repository this transport fetches into, or pushes out of. -
uri
Remote repository location. -
transport
A transport connected touri
. -
timeoutIn
Low-level input stream, if a timeout was configured. -
timeoutOut
Low-level output stream, if a timeout was configured. -
myTimer
Timer to managetimeoutIn
andtimeoutOut
. -
in
Input stream reading from the remote. -
out
Output stream sending to the remote. -
pckIn
Packet line decoder aroundin
. -
pckOut
Packet line encoder aroundout
. -
outNeedsEnd
protected boolean outNeedsEndSendPacketLineOut.end()
before closingout
? -
statelessRPC
protected boolean statelessRPCTrue if this is a stateless RPC connection. -
remoteCapabilities
Capability tokens advertised by the remote side. -
additionalHaves
Extra objects the remote has, but which aren't offered as refs. -
protocol
-
-
Constructor Details
-
BasePackConnection
BasePackConnection(PackTransport packTransport)
-
-
Method Details
-
getProtocolVersion
TransferConfig.ProtocolVersion getProtocolVersion() -
setProtocolVersion
-
init
Configure this connection with the directional pipes.- Parameters:
myIn
- input stream to receive data from the peer. Caller must ensure the input is buffered, otherwise read performance may suffer.myOut
- output stream to transmit data to the peer. Caller must ensure the output is buffered, otherwise write performance may suffer.
-
readAdvertisedRefs
Reads the advertised references through the initialized stream.Subclass implementations may call this method only after setting up the input and output streams with
init(InputStream, OutputStream)
.If any errors occur, this connection is automatically closed by invoking
close()
and the exception is wrapped (if necessary) and thrown as aTransportException
.- Returns:
true
if the refs were read;false
otherwise indicating thatlsRefs(java.util.Collection<org.eclipse.jgit.transport.RefSpec>, java.lang.String...)
must be called- Throws:
TransportException
- the reference list could not be scanned.
-
readLine
- Throws:
IOException
-
readAdvertisedRefsImpl
- Throws:
IOException
-
lsRefs
protected void lsRefs(Collection<RefSpec> refSpecs, String... additionalPatterns) throws TransportException Issue a protocol V2 ls-refs command and read its response.- Parameters:
refSpecs
- to produce ref prefixes from if the server supports git protocol V2additionalPatterns
- to use for ref prefixes if the server supports git protocol V2- Throws:
TransportException
- if the command could not be run or its output not be read
-
lsRefsImpl
private void lsRefsImpl(Collection<RefSpec> refSpecs, String... additionalPatterns) throws IOException - Throws:
IOException
-
getRefPrefixes
private Collection<String> getRefPrefixes(Collection<RefSpec> refSpecs, String... additionalPatterns) -
readCapabilitiesV2
- Throws:
IOException
-
addCapability
-
toId
- Throws:
PackProtocolException
-
processLineV1
- Throws:
IOException
-
processLineV2
private void processLineV2(String line, ObjectId id, String rest, Map<String, Ref> avail, Map<String, throws IOExceptionString> symRefs) - Throws:
IOException
-
updateWithSymRefs
Updates the given refMap withSymbolicRef
s defined by the given symRefs.For each entry, symRef, in symRefs, whose value is a key in refMap, adds a new entry to refMap with that same key and value of a new
SymbolicRef
with source=symRef.key and target=refMap.get(symRef.value), then removes that entry from symRefs.If refMap already contains an entry for symRef.key, it is replaced.
For example, given:
refMap.put("refs/heads/main", ref); symRefs.put("HEAD", "refs/heads/main");
then:updateWithSymRefs(refMap, symRefs);
has the effect of:refMap.put("HEAD", new SymbolicRef("HEAD", refMap.get(symRefs.remove("HEAD"))))
Any entry in symRefs whose value is not a key in refMap is ignored. Any circular symRefs are ignored.
Upon completion, symRefs will contain only any unresolvable entries.
- Parameters:
refMap
- a non-null, modifiable, Map to update, and the provider of symref targets.symRefs
- a non-null, modifiable, Map of symrefs.- Throws:
NullPointerException
- if refMap or symRefs is null
-
noRepository
Create an exception to indicate problems finding a remote repository. The caller is expected to throw the returned exception. Subclasses may override this method to provide better diagnostics.- Returns:
- a TransportException saying a repository cannot be found and possibly why.
-
isCapableOf
Whether this option is supported- Parameters:
option
- option string- Returns:
- whether this option is supported
-
wantCapability
Request capability- Parameters:
b
- bufferoption
- option we want- Returns:
true
if the requested option is supported
-
getCapability
Return a capability value.- Parameters:
option
- to get- Returns:
- the value stored, if any.
-
addUserAgentCapability
Add user agent capability- Parameters:
b
- aStringBuilder
object.
-
getPeerUserAgent
User agent advertised by the remote server. User agent advertised by the remote server.- Specified by:
getPeerUserAgent
in interfaceConnection
- Overrides:
getPeerUserAgent
in classBaseConnection
- Returns:
- agent (version of Git) running on the remote server. Null if the server does not advertise this version.
-
duplicateAdvertisement
-
invalidRefAdvertisementLine
-
close
public void close()Close any resources used by this connection.
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.
If additional messages were produced by the remote peer, these should still be retained in the connection instance for
Connection.getMessages()
.AutoClosable.close()
declares that it throwsException
. Implementers shouldn't throw checked exceptions. This override narrows the signature to prevent them from doing so.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceConnection
- Specified by:
close
in classBaseConnection
-
endOut
protected void endOut()Tell the peer we are disconnecting, if it cares to know.
-