Mercurial > hg4j
comparison src/org/tmatesoft/hg/repo/HgRemoteRepository.java @ 181:cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Tue, 12 Apr 2011 19:10:38 +0200 |
parents | da426c2fe1ec |
children | ec1820f64d2b |
comparison
equal
deleted
inserted
replaced
180:42fe9a94b9d0 | 181:cd3371670f0b |
---|---|
44 import javax.net.ssl.HttpsURLConnection; | 44 import javax.net.ssl.HttpsURLConnection; |
45 import javax.net.ssl.SSLContext; | 45 import javax.net.ssl.SSLContext; |
46 import javax.net.ssl.TrustManager; | 46 import javax.net.ssl.TrustManager; |
47 import javax.net.ssl.X509TrustManager; | 47 import javax.net.ssl.X509TrustManager; |
48 | 48 |
49 import org.tmatesoft.hg.core.HgBadArgumentException; | |
49 import org.tmatesoft.hg.core.HgBadStateException; | 50 import org.tmatesoft.hg.core.HgBadStateException; |
50 import org.tmatesoft.hg.core.HgException; | 51 import org.tmatesoft.hg.core.HgException; |
51 import org.tmatesoft.hg.core.Nodeid; | 52 import org.tmatesoft.hg.core.Nodeid; |
52 | 53 |
53 /** | 54 /** |
61 public class HgRemoteRepository { | 62 public class HgRemoteRepository { |
62 | 63 |
63 private final URL url; | 64 private final URL url; |
64 private final SSLContext sslContext; | 65 private final SSLContext sslContext; |
65 private final String authInfo; | 66 private final String authInfo; |
66 private final boolean debug = Boolean.FALSE.booleanValue(); | 67 private final boolean debug = Boolean.parseBoolean(System.getProperty("hg4j.remote.debug")); |
67 | 68 |
68 HgRemoteRepository(URL url) throws HgException { | 69 HgRemoteRepository(URL url) throws HgBadArgumentException { |
69 if (url == null) { | 70 if (url == null) { |
70 throw new IllegalArgumentException(); | 71 throw new IllegalArgumentException(); |
71 } | 72 } |
72 this.url = url; | 73 this.url = url; |
73 if ("https".equals(url.getProtocol())) { | 74 if ("https".equals(url.getProtocol())) { |
84 return new X509Certificate[0]; | 85 return new X509Certificate[0]; |
85 } | 86 } |
86 }; | 87 }; |
87 sslContext.init(null, new TrustManager[] { new TrustEveryone() }, null); | 88 sslContext.init(null, new TrustManager[] { new TrustEveryone() }, null); |
88 } catch (Exception ex) { | 89 } catch (Exception ex) { |
89 throw new HgException(ex); | 90 throw new HgBadArgumentException("Can't initialize secure connection", ex); |
90 } | 91 } |
91 } else { | 92 } else { |
92 sslContext = null; | 93 sslContext = null; |
93 } | 94 } |
94 if (url.getUserInfo() != null) { | 95 if (url.getUserInfo() != null) { |
107 } else { | 108 } else { |
108 authInfo = null; | 109 authInfo = null; |
109 } | 110 } |
110 } | 111 } |
111 | 112 |
113 public boolean isInvalid() throws HgException { | |
114 // say hello to server, check response | |
115 if (Boolean.FALSE.booleanValue()) { | |
116 throw HgRepository.notImplemented(); | |
117 } | |
118 return false; // FIXME | |
119 } | |
120 | |
121 /** | |
122 * @return human-readable address of the server, without user credentials or any other security information | |
123 */ | |
124 public String getLocation() { | |
125 if (url.getUserInfo() == null) { | |
126 return url.toExternalForm(); | |
127 } | |
128 if (url.getPort() != -1) { | |
129 return String.format("%s://%s:%d%s", url.getProtocol(), url.getHost(), url.getPort(), url.getPath()); | |
130 } else { | |
131 return String.format("%s://%s%s", url.getProtocol(), url.getHost(), url.getPath()); | |
132 } | |
133 } | |
134 | |
112 public List<Nodeid> heads() throws HgException { | 135 public List<Nodeid> heads() throws HgException { |
113 try { | 136 try { |
114 URL u = new URL(url, url.getPath() + "?cmd=heads"); | 137 URL u = new URL(url, url.getPath() + "?cmd=heads"); |
115 HttpURLConnection c = setupConnection(u.openConnection()); | 138 HttpURLConnection c = setupConnection(u.openConnection()); |
116 c.connect(); | 139 c.connect(); |