Mercurial > jhg
annotate src/org/tmatesoft/hg/repo/HgLookup.java @ 709:497e697636fc
Report merged lines as changed block if possible, not as a sequence of added/deleted blocks. To facilitate access to merge parent lines AddBlock got mergeLineAt() method that reports index of the line in the second parent (if any), while insertedAt() has been changed to report index in the first parent always
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Wed, 21 Aug 2013 16:23:27 +0200 | 
| parents | a483b2b68a2e | 
| children | 
| rev | line source | 
|---|---|
| 74 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 1 /* | 
| 578 
f97e81d13190
Throw exception if repository encountered is too old for Hg4J
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
526diff
changeset | 2 * Copyright (c) 2010-2013 TMate Software Ltd | 
| 74 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 3 * | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 4 * This program is free software; you can redistribute it and/or modify | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 5 * it under the terms of the GNU General Public License as published by | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 6 * the Free Software Foundation; version 2 of the License. | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 7 * | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 8 * This program is distributed in the hope that it will be useful, | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 11 * GNU General Public License for more details. | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 12 * | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 13 * For information on how to redistribute this software under | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 14 * the terms of a license other than GNU General Public License | 
| 102 
a3a2e5deb320
Updated contact address to support@hg4j.com
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
95diff
changeset | 15 * contact TMate Software at support@hg4j.com | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 16 */ | 
| 74 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 17 package org.tmatesoft.hg.repo; | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 18 | 
| 456 
909306e412e2
Refactor LogFacility and SessionContext, better API for both
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
431diff
changeset | 19 import static org.tmatesoft.hg.util.LogFacility.Severity.Warn; | 
| 
909306e412e2
Refactor LogFacility and SessionContext, better API for both
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
431diff
changeset | 20 | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 21 import java.io.File; | 
| 698 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 22 import java.net.URI; | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 23 import java.net.URISyntaxException; | 
| 170 
71ddbf8603e8
Initial clone: populate given directory from a bundle. Everything but remote server access is there, albeit prototype code style
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
169diff
changeset | 24 import java.net.URL; | 
| 698 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 25 import java.net.URLStreamHandler; | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 26 import java.net.URLStreamHandlerFactory; | 
| 148 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 27 | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 28 import org.tmatesoft.hg.core.HgBadArgumentException; | 
| 628 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 29 import org.tmatesoft.hg.core.HgIOException; | 
| 423 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
357diff
changeset | 30 import org.tmatesoft.hg.core.HgRepositoryNotFoundException; | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 31 import org.tmatesoft.hg.core.SessionContext; | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 32 import org.tmatesoft.hg.internal.BasicSessionContext; | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 33 import org.tmatesoft.hg.internal.ConfigFile; | 
| 169 
8c8e3f372fa1
Towards initial clone: refactor HgBundle to provide slightly higher-level structure of the bundle
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
151diff
changeset | 34 import org.tmatesoft.hg.internal.DataAccessProvider; | 
| 578 
f97e81d13190
Throw exception if repository encountered is too old for Hg4J
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
526diff
changeset | 35 import org.tmatesoft.hg.internal.RequiresFile; | 
| 503 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 36 import org.tmatesoft.hg.repo.HgRepoConfig.PathsSection; | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 37 | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 38 /** | 
| 148 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 39 * Utility methods to find Mercurial repository at a given location | 
| 74 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 40 * | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 41 * @author Artem Tikhomirov | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 42 * @author TMate Software Ltd. | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 43 */ | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
578diff
changeset | 44 public class HgLookup implements SessionContext.Source { | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 45 | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 46 private ConfigFile globalCfg; | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 47 private SessionContext sessionContext; | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 48 | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 49 public HgLookup() { | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 50 } | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 51 | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 52 public HgLookup(SessionContext ctx) { | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 53 sessionContext = ctx; | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 54 } | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 55 | 
| 423 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
357diff
changeset | 56 public HgRepository detectFromWorkingDir() throws HgRepositoryNotFoundException { | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 57 return detect(System.getProperty("user.dir")); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 58 } | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 59 | 
| 423 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
357diff
changeset | 60 public HgRepository detect(String location) throws HgRepositoryNotFoundException { | 
| 95 
bcd31a4c638a
Lookup to HgLookup
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
74diff
changeset | 61 return detect(new File(location)); | 
| 
bcd31a4c638a
Lookup to HgLookup
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
74diff
changeset | 62 } | 
| 
bcd31a4c638a
Lookup to HgLookup
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
74diff
changeset | 63 | 
| 578 
f97e81d13190
Throw exception if repository encountered is too old for Hg4J
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
526diff
changeset | 64 /** | 
| 
f97e81d13190
Throw exception if repository encountered is too old for Hg4J
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
526diff
changeset | 65 * Look up repository in specified location and above | 
| 
f97e81d13190
Throw exception if repository encountered is too old for Hg4J
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
526diff
changeset | 66 * | 
| 
f97e81d13190
Throw exception if repository encountered is too old for Hg4J
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
526diff
changeset | 67 * @param location where to look for .hg directory, never <code>null</code> | 
| 
f97e81d13190
Throw exception if repository encountered is too old for Hg4J
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
526diff
changeset | 68 * @return repository object, never <code>null</code> | 
| 
f97e81d13190
Throw exception if repository encountered is too old for Hg4J
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
526diff
changeset | 69 * @throws HgRepositoryNotFoundException if no repository found, or repository version is not supported | 
| 
f97e81d13190
Throw exception if repository encountered is too old for Hg4J
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
526diff
changeset | 70 */ | 
| 423 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
357diff
changeset | 71 public HgRepository detect(File location) throws HgRepositoryNotFoundException { | 
| 492 
e4eaa23e3442
Leave path as close as possible to one supplied by user. No need to keep it as canonical
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
483diff
changeset | 72 File dir = location.getAbsoluteFile(); | 
| 
e4eaa23e3442
Leave path as close as possible to one supplied by user. No need to keep it as canonical
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
483diff
changeset | 73 File repository; | 
| 
e4eaa23e3442
Leave path as close as possible to one supplied by user. No need to keep it as canonical
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
483diff
changeset | 74 do { | 
| 
e4eaa23e3442
Leave path as close as possible to one supplied by user. No need to keep it as canonical
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
483diff
changeset | 75 repository = new File(dir, ".hg"); | 
| 
e4eaa23e3442
Leave path as close as possible to one supplied by user. No need to keep it as canonical
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
483diff
changeset | 76 if (repository.exists() && repository.isDirectory()) { | 
| 
e4eaa23e3442
Leave path as close as possible to one supplied by user. No need to keep it as canonical
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
483diff
changeset | 77 break; | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 78 } | 
| 492 
e4eaa23e3442
Leave path as close as possible to one supplied by user. No need to keep it as canonical
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
483diff
changeset | 79 repository = null; | 
| 
e4eaa23e3442
Leave path as close as possible to one supplied by user. No need to keep it as canonical
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
483diff
changeset | 80 dir = dir.getParentFile(); | 
| 
e4eaa23e3442
Leave path as close as possible to one supplied by user. No need to keep it as canonical
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
483diff
changeset | 81 | 
| 
e4eaa23e3442
Leave path as close as possible to one supplied by user. No need to keep it as canonical
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
483diff
changeset | 82 } while(dir != null); | 
| 
e4eaa23e3442
Leave path as close as possible to one supplied by user. No need to keep it as canonical
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
483diff
changeset | 83 if (repository == null) { | 
| 
e4eaa23e3442
Leave path as close as possible to one supplied by user. No need to keep it as canonical
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
483diff
changeset | 84 throw new HgRepositoryNotFoundException(String.format("Can't locate .hg/ directory of Mercurial repository in %s nor in parent dirs", location)).setLocation(location.getPath()); | 
| 148 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 85 } | 
| 628 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 86 try { | 
| 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 87 String repoPath = repository.getParentFile().getAbsolutePath(); | 
| 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 88 HgRepository rv = new HgRepository(getSessionContext(), repoPath, repository); | 
| 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 89 int requiresFlags = rv.getImplHelper().getRequiresFlags(); | 
| 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 90 if ((requiresFlags & RequiresFile.REVLOGV1) == 0) { | 
| 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 91 throw new HgRepositoryNotFoundException(String.format("%s: repository version is not supported (Mercurial <0.9?)", repoPath)).setLocation(location.getPath()); | 
| 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 92 } | 
| 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 93 return rv; | 
| 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 94 } catch (HgRuntimeException ex) { | 
| 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 95 HgRepositoryNotFoundException e = new HgRepositoryNotFoundException("Failed to initialize Hg4J library").setLocation(location.getPath()); | 
| 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 96 e.initCause(ex); | 
| 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 97 throw e; | 
| 578 
f97e81d13190
Throw exception if repository encountered is too old for Hg4J
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
526diff
changeset | 98 } | 
| 4 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 99 } | 
| 169 
8c8e3f372fa1
Towards initial clone: refactor HgBundle to provide slightly higher-level structure of the bundle
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
151diff
changeset | 100 | 
| 425 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
423diff
changeset | 101 public HgBundle loadBundle(File location) throws HgRepositoryNotFoundException { | 
| 169 
8c8e3f372fa1
Towards initial clone: refactor HgBundle to provide slightly higher-level structure of the bundle
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
151diff
changeset | 102 if (location == null || !location.canRead()) { | 
| 425 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
423diff
changeset | 103 throw new HgRepositoryNotFoundException(String.format("Can't read file %s", location)).setLocation(String.valueOf(location)); | 
| 169 
8c8e3f372fa1
Towards initial clone: refactor HgBundle to provide slightly higher-level structure of the bundle
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
151diff
changeset | 104 } | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
578diff
changeset | 105 return new HgBundle(getSessionContext(), new DataAccessProvider(getSessionContext()), location).link(); | 
| 169 
8c8e3f372fa1
Towards initial clone: refactor HgBundle to provide slightly higher-level structure of the bundle
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
151diff
changeset | 106 } | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 107 | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 108 /** | 
| 503 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 109 * Try to instantiate remote server using an immediate url or an url from configuration files | 
| 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 110 * | 
| 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 111 * @param key either URL or a key from configuration file that points to remote server; if <code>null</code> or empty string, default remote location of the supplied repository (if any) is looked up | 
| 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 112 * @param hgRepo optional local repository to get default or otherwise configured remote location | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 113 * @return an instance featuring access to remote repository, check {@link HgRemoteRepository#isInvalid()} before actually using it | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 114 * @throws HgBadArgumentException if anything is wrong with the remote server's URL | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 115 */ | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 116 public HgRemoteRepository detectRemote(String key, HgRepository hgRepo) throws HgBadArgumentException { | 
| 698 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 117 URI uri; | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 118 Exception toReport; | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 119 try { | 
| 698 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 120 uri = new URI(key); | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 121 toReport = null; | 
| 698 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 122 } catch (URISyntaxException ex) { | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 123 uri = null; | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 124 toReport = ex; | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 125 } | 
| 698 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 126 if (uri == null) { | 
| 503 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 127 String server = null; | 
| 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 128 if (hgRepo != null && !hgRepo.isInvalid()) { | 
| 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 129 PathsSection ps = hgRepo.getConfiguration().getPaths(); | 
| 622 
4e6179bde4fc
Update to comply with Java 1.5 target
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
618diff
changeset | 130 server = key == null || key.trim().length() == 0 ? ps.getDefault() : ps.getString(key, null); // XXX Java 1.5 isEmpty() | 
| 503 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 131 } else if (key == null || key.trim().length() == 0) { | 
| 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 132 throw new HgBadArgumentException("Can't look up empty key in a global configuration", null); | 
| 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 133 } | 
| 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 134 if (server == null) { | 
| 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 135 server = getGlobalConfig().getSection("paths").get(key); | 
| 
0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
492diff
changeset | 136 } | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 137 if (server == null) { | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 138 throw new HgBadArgumentException(String.format("Can't find server %s specification in the config", key), toReport); | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 139 } | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 140 try { | 
| 698 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 141 uri = new URI(server); | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 142 } catch (URISyntaxException ex) { | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 143 throw new HgBadArgumentException(String.format("Found %s server spec in the config, but failed to initialize with it", key), ex); | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 144 } | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 145 } | 
| 698 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 146 return detectRemote(uri); | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 147 } | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 148 | 
| 698 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 149 /** | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 150 * Detect remote repository | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 151 * <p>Use of this method is discouraged, please use {@link #detectRemote(URI)} instead} | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 152 * | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 153 * @param url location of remote repository | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 154 * @return instance to interact with remote repository | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 155 * @throws HgBadArgumentException if location format is not a valid {@link URI} | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 156 * @throws IllegalArgumentException if url is <code>null</code> | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 157 */ | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 158 public HgRemoteRepository detect(URL url) throws HgBadArgumentException { | 
| 171 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
170diff
changeset | 159 if (url == null) { | 
| 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
170diff
changeset | 160 throw new IllegalArgumentException(); | 
| 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
170diff
changeset | 161 } | 
| 698 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 162 try { | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 163 return detectRemote(url.toURI()); | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 164 } catch (URISyntaxException ex) { | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 165 throw new HgBadArgumentException(String.format("Bad remote repository location: %s", url), ex); | 
| 170 
71ddbf8603e8
Initial clone: populate given directory from a bundle. Everything but remote server access is there, albeit prototype code style
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
169diff
changeset | 166 } | 
| 698 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 167 } | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 168 | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 169 /** | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 170 * Resolves location of remote repository. | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 171 * | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 172 * <p>Choice between {@link URI URIs} and {@link URL URLs} done in favor of former because they are purely syntactical, | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 173 * while latter have semantics of {@link URL#openConnection() connection} establishing, which is not always possible. | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 174 * E.g. one can't instantiate <code>new URL("ssh://localhost/")</code> as long as there's no local {@link URLStreamHandler} | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 175 * for the protocol, which is the case for certain JREs out there. The way {@link URLStreamHandlerFactory URLStreamHandlerFactories} | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 176 * are installed (static field/method) is quite fragile, and definitely not the one to rely on from a library's code (apps can carefully | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 177 * do this, but library can't install own nor expect anyone outside there would do). Use of fake {@link URLStreamHandler} (fails to open | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 178 * every connection) is possible, of course, although it seems to be less appropriate when there is alternative with {@link URI URIs}. | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 179 * | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 180 * @param uriRemote remote repository location | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 181 * @return instance to interact with remote repository | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 182 * @throws HgBadArgumentException | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 183 */ | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 184 public HgRemoteRepository detectRemote(URI uriRemote) throws HgBadArgumentException { | 
| 699 
a483b2b68a2e
Provisional APIs and respective implementation for http, https and ssh remote repositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
698diff
changeset | 185 HgRemoteRepository.RemoteDescriptor rd = getSessionContext().getRemoteDescriptor(uriRemote); | 
| 698 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 186 if (rd == null) { | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 187 throw new HgBadArgumentException(String.format("Unsupported remote repository location:%s", uriRemote), null); | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 188 } | 
| 
822f3a83ff57
in, out and clone tests pass for ssh repositories. Infrastructure to decouple HgRemoteRepository from specific Connector implementation
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 189 return new HgRemoteRepository(getSessionContext(), rd); | 
| 170 
71ddbf8603e8
Initial clone: populate given directory from a bundle. Everything but remote server access is there, albeit prototype code style
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
169diff
changeset | 190 } | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 191 | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 192 private ConfigFile getGlobalConfig() { | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 193 if (globalCfg == null) { | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
578diff
changeset | 194 globalCfg = new ConfigFile(getSessionContext()); | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 195 try { | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 196 globalCfg.addLocation(new File(System.getProperty("user.home"), ".hgrc")); | 
| 628 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
622diff
changeset | 197 } catch (HgIOException ex) { | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 198 // XXX perhaps, makes sense to let caller/client know that we've failed to read global config? | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
578diff
changeset | 199 getSessionContext().getLog().dump(getClass(), Warn, ex, null); | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 200 } | 
| 181 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 201 } | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 202 return globalCfg; | 
| 
cd3371670f0b
Refactor incoming and outgoing code to be shared with RepositoryComparator. Placeholders for in/out commands. Refactor common remote lookup code
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
172diff
changeset | 203 } | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 204 | 
| 618 
7c0d2ce340b8
Refactor approach how content finds it way down to a commit revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
578diff
changeset | 205 public SessionContext getSessionContext() { | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 206 if (sessionContext == null) { | 
| 431 
12f668401613
FIXMEs: awkward API refactored, what need to be internal got hidden; public aspects got captured in slim interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
425diff
changeset | 207 sessionContext = new BasicSessionContext(null); | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 208 } | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 209 return sessionContext; | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 210 } | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 211 } | 
