Mercurial > jhg
diff 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 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/repo/HgRemoteRepository.java Wed Apr 13 19:55:59 2011 +0200 +++ b/src/org/tmatesoft/hg/repo/HgRemoteRepository.java Thu Apr 14 00:47:04 2011 +0200 @@ -65,6 +65,7 @@ private final SSLContext sslContext; private final String authInfo; private final boolean debug = Boolean.parseBoolean(System.getProperty("hg4j.remote.debug")); + private HgLookup lookupHelper; HgRemoteRepository(URL url) throws HgBadArgumentException { if (url == null) { @@ -301,8 +302,19 @@ } } - // WireProtocol wiki: roots = a list of the latest nodes on every service side changeset branch that both the client and server know about. - // perhaps, shall be named 'changegroup' + /* + * WireProtocol wiki: roots = a list of the latest nodes on every service side changeset branch that both the client and server know about. + * + * Perhaps, shall be named 'changegroup' + + * Changegroup: + * http://mercurial.selenic.com/wiki/Merge + * http://mercurial.selenic.com/wiki/WireProtocol + * + * according to latter, bundleformat data is sent through zlib + * (there's no header like HG10?? with the server output, though, + * as one may expect according to http://mercurial.selenic.com/wiki/BundleFormat) + */ public HgBundle getChanges(List<Nodeid> roots) throws HgException { StringBuilder sb = new StringBuilder(20 + roots.size() * 41); sb.append("roots="); @@ -322,13 +334,20 @@ dumpResponseHeader(u, c); } File tf = writeBundle(c.getInputStream(), false, "HG10GZ" /*didn't see any other that zip*/); - return new HgLookup().loadBundle(tf); + return getLookupHelper().loadBundle(tf); } catch (MalformedURLException ex) { throw new HgException(ex); } catch (IOException ex) { throw new HgException(ex); } } + + private HgLookup getLookupHelper() { + if (lookupHelper == null) { + lookupHelper = new HgLookup(); + } + return lookupHelper; + } private HttpURLConnection setupConnection(URLConnection urlConnection) { urlConnection.setRequestProperty("User-Agent", "hg4j/0.5.0");