Class TransportAmazonS3

All Implemented Interfaces:
AutoCloseable, WalkTransport

public class TransportAmazonS3 extends HttpTransport implements WalkTransport
Transport over the non-Git aware Amazon S3 protocol.

This transport communicates with the Amazon S3 servers (a non-free commercial hosting service that users must subscribe to). Some users may find transport to and from S3 to be a useful backup service.

The transport does not require any specialized Git support on the remote (server side) repository, as Amazon does not provide any such support. Repository files are retrieved directly through the S3 API, which uses extended HTTP/1.1 semantics. This make it possible to read or write Git data from a remote repository that is stored on S3.

Unlike the HTTP variant (see TransportHttp) we rely upon being able to list objects in a bucket, as the S3 API supports this function. By listing the bucket contents we can avoid relying on objects/info/packs or info/refs in the remote repository.

Concurrent pushing over this transport is not supported. Multiple concurrent push operations may cause confusion in the repository state.

See Also:
  • Field Details

    • S3_SCHEME

      static final String S3_SCHEME
      See Also:
    • PROTO_S3

      static final TransportProtocol PROTO_S3
    • s3

      final AmazonS3 s3
      User information necessary to connect to S3.
    • bucket

      final String bucket
      Bucket the remote repository is stored in.
    • keyPrefix

      private final String keyPrefix
      Key prefix which all objects related to the repository start with.

      The prefix does not start with "/".

      The prefix does not end with "/". The trailing slash is stripped during the constructor if a trailing slash was supplied in the URIish.

      All files within the remote repository start with keyPrefix + "/".

  • Constructor Details

  • Method Details

    • loadProperties

      private Properties loadProperties() throws NotSupportedException
      Throws:
      NotSupportedException
    • loadPropertiesFile

      private static Properties loadPropertiesFile(File propsFile) throws NotSupportedException
      Throws:
      NotSupportedException
    • 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.
    • 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