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 {
63  
64  	/**
65  	 * Get the complete map of refs advertised as available for fetching or
66  	 * pushing.
67  	 *
68  	 * @return available/advertised refs: map of refname to ref. Never null. Not
69  	 *         modifiable. The collection can be empty if the remote side has no
70  	 *         refs (it is an empty/newly created repository).
71  	 */
72  	public Map<String, Ref> getRefsMap();
73  
74  	/**
75  	 * Get the complete list of refs advertised as available for fetching or
76  	 * pushing.
77  	 * <p>
78  	 * The returned refs may appear in any order. If the caller needs these to
79  	 * be sorted, they should be copied into a new array or List and then sorted
80  	 * by the caller as necessary.
81  	 *
82  	 * @return available/advertised refs. Never null. Not modifiable. The
83  	 *         collection can be empty if the remote side has no refs (it is an
84  	 *         empty/newly created repository).
85  	 */
86  	public Collection<Ref> getRefs();
87  
88  	/**
89  	 * Get a single advertised ref by name.
90  	 * <p>
91  	 * The name supplied should be valid ref name. To get a peeled value for a
92  	 * ref (aka <code>refs/tags/v1.0^{}</code>) use the base name (without
93  	 * the <code>^{}</code> suffix) and look at the peeled object id.
94  	 *
95  	 * @param name
96  	 *            name of the ref to obtain.
97  	 * @return the requested ref; null if the remote did not advertise this ref.
98  	 */
99  	public Ref getRef(final String name);
100 
101 	/**
102 	 * Close any resources used by this connection.
103 	 * <p>
104 	 * If the remote repository is contacted by a network socket this method
105 	 * must close that network socket, disconnecting the two peers. If the
106 	 * remote repository is actually local (same system) this method must close
107 	 * any open file handles used to read the "remote" repository.
108 	 * <p>
109 	 * If additional messages were produced by the remote peer, these should
110 	 * still be retained in the connection instance for {@link #getMessages()}.
111 	 */
112 	public void close();
113 
114 	/**
115 	 * Get the additional messages, if any, returned by the remote process.
116 	 * <p>
117 	 * These messages are most likely informational or error messages, sent by
118 	 * the remote peer, to help the end-user correct any problems that may have
119 	 * prevented the operation from completing successfully. Application UIs
120 	 * should try to show these in an appropriate context.
121 	 * <p>
122 	 * The message buffer is available after {@link #close()} has been called.
123 	 * Prior to closing the connection, the message buffer may be empty.
124 	 *
125 	 * @return the messages returned by the remote, most likely terminated by a
126 	 *         newline (LF) character. The empty string is returned if the
127 	 *         remote produced no additional messages.
128 	 */
129 	public String getMessages();
130 
131 	/**
132 	 * User agent advertised by the remote server.
133 	 *
134 	 * @return agent (version of Git) running on the remote server. Null if the
135 	 *         server does not advertise this version.
136 	 * @since 4.0
137 	 */
138 	public String getPeerUserAgent();
139 }