Class TransportLocal

java.lang.Object
org.eclipse.jgit.transport.Transport
org.eclipse.jgit.transport.TransportLocal
All Implemented Interfaces:
AutoCloseable, PackTransport

class TransportLocal extends Transport implements PackTransport
Transport to access a local directory as though it were a remote peer.

This transport is suitable for use on the local system, where the caller has direct read or write access to the "remote" repository.

By default this transport works by spawning a helper thread within the same JVM, and processes the data transfer using a shared memory buffer between the calling thread and the helper thread. This is a pure-Java implementation which does not require forking an external process.

However, during openFetch(), if the Transport has configured Transport.getOptionUploadPack() to be anything other than "git-upload-pack" or "git upload-pack", this implementation will fork and execute the external process, using an operating system pipe to transfer data.

Similarly, during openPush(), if the Transport has configured Transport.getOptionReceivePack() to be anything other than "git-receive-pack" or "git receive-pack", this implementation will fork and execute the external process, using an operating system pipe to transfer data.

  • Field Details

    • PROTO_LOCAL

      static final TransportProtocol PROTO_LOCAL
    • remoteGitDir

      private final File remoteGitDir
  • Constructor Details

  • Method Details

    • createUploadPack

      UploadPack createUploadPack(Repository dst)
    • createReceivePack

      ReceivePack createReceivePack(Repository dst)
    • openRepo

      private Repository openRepo() throws TransportException
      Throws:
      TransportException
    • openFetch

      public FetchConnection openFetch() throws TransportException
      Begins a new connection for fetching from the remote repository.

      If the transport has no local repository, the fetch connection can only be used for reading remote refs.

      Specified by:
      openFetch in class Transport
      Returns:
      a fresh connection to fetch from the remote repository.
      Throws:
      TransportException - the remote connection could not be established.
    • openFetch

      public FetchConnection openFetch(Collection<RefSpec> refSpecs, String... additionalPatterns) throws TransportException
      Description copied from class: Transport
      Begins a new connection for fetching from the remote repository.

      If the transport has no local repository, the fetch connection can only be used for reading remote refs.

      If the server supports git protocol V2, the RefSpecs and the additional patterns, if any, are used to restrict the server's ref advertisement to matching refs only.

      Transports that want to support git protocol V2 must override this; the default implementation ignores its arguments and calls Transport.openFetch().

      Overrides:
      openFetch in class Transport
      Parameters:
      refSpecs - that will be fetched via FetchConnection.fetch(ProgressMonitor, Collection, java.util.Set, OutputStream) later
      additionalPatterns - that will be set as ref prefixes if the server supports git protocol V2; null values are ignored
      Returns:
      a fresh connection to fetch from the remote repository.
      Throws:
      TransportException - the remote connection could not be established.
    • openPush

      public PushConnection openPush() throws TransportException
      Begins a new connection for pushing into the remote repository.
      Specified by:
      openPush in class Transport
      Returns:
      a fresh connection to push into the remote repository.
      Throws:
      TransportException - the remote connection could not be established
    • close

      public void close()

      Close any resources used by this transport.

      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.

      AutoClosable.close() declares that it throws Exception. Implementers shouldn't throw checked exceptions. This override narrows the signature to prevent them from doing so.

      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in class Transport
    • spawn

      protected Process spawn(String cmd) throws TransportException
      Spawn process
      Parameters:
      cmd - command
      Returns:
      a Process object.
      Throws:
      TransportException - if any.
    • spawn

      private Process spawn(String cmd, TransferConfig.ProtocolVersion protocolVersion) throws TransportException
      Spawn process
      Parameters:
      cmd - command
      protocolVersion - to use
      Returns:
      a Process object.
      Throws:
      TransportException - if any.