Mercurial > hg4j
comparison src/org/tmatesoft/hg/repo/HgRemoteRepository.java @ 186:44a34baabea0
Clone refactored into a command. HgBundle needs means to control its lifecycle, to be deleted when no longer needed
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 14 Apr 2011 00:47:04 +0200 |
parents | ec1820f64d2b |
children | 9b99d27aeddc |
comparison
equal
deleted
inserted
replaced
185:c6fa4dbfc458 | 186:44a34baabea0 |
---|---|
63 | 63 |
64 private final URL url; | 64 private final URL url; |
65 private final SSLContext sslContext; | 65 private final SSLContext sslContext; |
66 private final String authInfo; | 66 private final String authInfo; |
67 private final boolean debug = Boolean.parseBoolean(System.getProperty("hg4j.remote.debug")); | 67 private final boolean debug = Boolean.parseBoolean(System.getProperty("hg4j.remote.debug")); |
68 private HgLookup lookupHelper; | |
68 | 69 |
69 HgRemoteRepository(URL url) throws HgBadArgumentException { | 70 HgRemoteRepository(URL url) throws HgBadArgumentException { |
70 if (url == null) { | 71 if (url == null) { |
71 throw new IllegalArgumentException(); | 72 throw new IllegalArgumentException(); |
72 } | 73 } |
299 } catch (IOException ex) { | 300 } catch (IOException ex) { |
300 throw new HgException(ex); | 301 throw new HgException(ex); |
301 } | 302 } |
302 } | 303 } |
303 | 304 |
304 // WireProtocol wiki: roots = a list of the latest nodes on every service side changeset branch that both the client and server know about. | 305 /* |
305 // perhaps, shall be named 'changegroup' | 306 * WireProtocol wiki: roots = a list of the latest nodes on every service side changeset branch that both the client and server know about. |
307 * | |
308 * Perhaps, shall be named 'changegroup' | |
309 | |
310 * Changegroup: | |
311 * http://mercurial.selenic.com/wiki/Merge | |
312 * http://mercurial.selenic.com/wiki/WireProtocol | |
313 * | |
314 * according to latter, bundleformat data is sent through zlib | |
315 * (there's no header like HG10?? with the server output, though, | |
316 * as one may expect according to http://mercurial.selenic.com/wiki/BundleFormat) | |
317 */ | |
306 public HgBundle getChanges(List<Nodeid> roots) throws HgException { | 318 public HgBundle getChanges(List<Nodeid> roots) throws HgException { |
307 StringBuilder sb = new StringBuilder(20 + roots.size() * 41); | 319 StringBuilder sb = new StringBuilder(20 + roots.size() * 41); |
308 sb.append("roots="); | 320 sb.append("roots="); |
309 for (Nodeid n : roots) { | 321 for (Nodeid n : roots) { |
310 sb.append(n.toString()); | 322 sb.append(n.toString()); |
320 c.connect(); | 332 c.connect(); |
321 if (debug) { | 333 if (debug) { |
322 dumpResponseHeader(u, c); | 334 dumpResponseHeader(u, c); |
323 } | 335 } |
324 File tf = writeBundle(c.getInputStream(), false, "HG10GZ" /*didn't see any other that zip*/); | 336 File tf = writeBundle(c.getInputStream(), false, "HG10GZ" /*didn't see any other that zip*/); |
325 return new HgLookup().loadBundle(tf); | 337 return getLookupHelper().loadBundle(tf); |
326 } catch (MalformedURLException ex) { | 338 } catch (MalformedURLException ex) { |
327 throw new HgException(ex); | 339 throw new HgException(ex); |
328 } catch (IOException ex) { | 340 } catch (IOException ex) { |
329 throw new HgException(ex); | 341 throw new HgException(ex); |
330 } | 342 } |
343 } | |
344 | |
345 private HgLookup getLookupHelper() { | |
346 if (lookupHelper == null) { | |
347 lookupHelper = new HgLookup(); | |
348 } | |
349 return lookupHelper; | |
331 } | 350 } |
332 | 351 |
333 private HttpURLConnection setupConnection(URLConnection urlConnection) { | 352 private HttpURLConnection setupConnection(URLConnection urlConnection) { |
334 urlConnection.setRequestProperty("User-Agent", "hg4j/0.5.0"); | 353 urlConnection.setRequestProperty("User-Agent", "hg4j/0.5.0"); |
335 urlConnection.addRequestProperty("Accept", "application/mercurial-0.1"); | 354 urlConnection.addRequestProperty("Accept", "application/mercurial-0.1"); |