View Javadoc
1   /*
2    * Copyright (C) 2010, Google Inc.
3    * Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com>
4    * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
5    * and other copyright owners as documented in the project's IP log.
6    *
7    * This program and the accompanying materials are made available
8    * under the terms of the Eclipse Distribution License v1.0 which
9    * accompanies this distribution, is reproduced below, and is
10   * available at http://www.eclipse.org/org/documents/edl-v10.php
11   *
12   * All rights reserved.
13   *
14   * Redistribution and use in source and binary forms, with or
15   * without modification, are permitted provided that the following
16   * conditions are met:
17   *
18   * - Redistributions of source code must retain the above copyright
19   *   notice, this list of conditions and the following disclaimer.
20   *
21   * - Redistributions in binary form must reproduce the above
22   *   copyright notice, this list of conditions and the following
23   *   disclaimer in the documentation and/or other materials provided
24   *   with the distribution.
25   *
26   * - Neither the name of the Eclipse Foundation, Inc. nor the
27   *   names of its contributors may be used to endorse or promote
28   *   products derived from this software without specific prior
29   *   written permission.
30   *
31   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
32   * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
33   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
34   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
35   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
36   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
37   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
38   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
39   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
40   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
41   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
42   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
43   * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
44   */
45  
46  package org.eclipse.jgit.transport;
47  
48  import java.util.Collection;
49  import java.util.Map;
50  
51  import org.eclipse.jgit.lib.Ref;
52  
53  /**
54   * Represent connection for operation on a remote repository.
55   * <p>
56   * Currently all operations on remote repository (fetch and push) provide
57   * information about remote refs. Every connection is able to be closed and
58   * should be closed - this is a connection client responsibility.
59   *
60   * @see Transport
61   */
62  public interface Connection extends AutoCloseable {
63  	/**
64  	 * Get the complete map of refs advertised as available for fetching or
65  	 * pushing.
66  	 *
67  	 * @return available/advertised refs: map of refname to ref. Never null. Not
68  	 *         modifiable. The collection can be empty if the remote side has no
69  	 *         refs (it is an empty/newly created repository).
70  	 */
71  	public Map<String, Ref> getRefsMap();
72  
73  	/**
74  	 * Get the complete list of refs advertised as available for fetching or
75  	 * pushing.
76  	 * <p>
77  	 * The returned refs may appear in any order. If the caller needs these to
78  	 * be sorted, they should be copied into a new array or List and then sorted
79  	 * by the caller as necessary.
80  	 *
81  	 * @return available/advertised refs. Never null. Not modifiable. The
82  	 *         collection can be empty if the remote side has no refs (it is an
83  	 *         empty/newly created repository).
84  	 */
85  	public Collection<Ref> getRefs();
86  
87  	/**
88  	 * Get a single advertised ref by name.
89  	 * <p>
90  	 * The name supplied should be valid ref name. To get a peeled value for a
91  	 * ref (aka <code>refs/tags/v1.0^{}</code>) use the base name (without
92  	 * the <code>^{}</code> suffix) and look at the peeled object id.
93  	 *
94  	 * @param name
95  	 *            name of the ref to obtain.
96  	 * @return the requested ref; null if the remote did not advertise this ref.
97  	 */
98  	public Ref getRef(String name);
99  
100 	/**
101 	 * {@inheritDoc}
102 	 * <p>
103 	 * Close any resources used by this connection.
104 	 * <p>
105 	 * If the remote repository is contacted by a network socket this method
106 	 * must close that network socket, disconnecting the two peers. If the
107 	 * remote repository is actually local (same system) this method must close
108 	 * any open file handles used to read the "remote" repository.
109 	 * <p>
110 	 * If additional messages were produced by the remote peer, these should
111 	 * still be retained in the connection instance for {@link #getMessages()}.
112 	 * <p>
113 	 * {@code AutoClosable.close()} declares that it throws {@link Exception}.
114 	 * Implementers shouldn't throw checked exceptions. This override narrows
115 	 * the signature to prevent them from doing so.
116 	 */
117 	@Override
118 	public void close();
119 
120 	/**
121 	 * Get the additional messages, if any, returned by the remote process.
122 	 * <p>
123 	 * These messages are most likely informational or error messages, sent by
124 	 * the remote peer, to help the end-user correct any problems that may have
125 	 * prevented the operation from completing successfully. Application UIs
126 	 * should try to show these in an appropriate context.
127 	 * <p>
128 	 * The message buffer is available after {@link #close()} has been called.
129 	 * Prior to closing the connection, the message buffer may be empty.
130 	 *
131 	 * @return the messages returned by the remote, most likely terminated by a
132 	 *         newline (LF) character. The empty string is returned if the
133 	 *         remote produced no additional messages.
134 	 */
135 	public String getMessages();
136 
137 	/**
138 	 * User agent advertised by the remote server.
139 	 *
140 	 * @return agent (version of Git) running on the remote server. Null if the
141 	 *         server does not advertise this version.
142 	 * @since 4.0
143 	 */
144 	public String getPeerUserAgent();
145 }