Mercurial > jhg
annotate src/org/tmatesoft/hg/repo/HgLookup.java @ 339:863356c2847e
Issue 16: respect glob patterns in HgIgnore for sub-directories
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Wed, 16 Nov 2011 22:42:21 +0100 | 
| parents | 981f9f50bb6c | 
| children | dfb8405d996f | 
| rev | line source | 
|---|---|
| 74 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 1 /* | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 2 * Copyright (c) 2010-2011 TMate Software Ltd | 
| 
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 | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 19 import java.io.File; | 
| 148 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 20 import java.io.IOException; | 
| 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 | 21 import java.net.MalformedURLException; | 
| 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 | 22 import java.net.URL; | 
| 148 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 23 | 
| 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 | 24 import org.tmatesoft.hg.core.HgBadArgumentException; | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 25 import org.tmatesoft.hg.core.HgInvalidFileException; | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 26 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 | 27 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 | 28 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 | 29 import org.tmatesoft.hg.internal.DataAccessProvider; | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 30 | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 31 /** | 
| 148 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 32 * 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 | 33 * | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 34 * @author Artem Tikhomirov | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
49diff
changeset | 35 * @author TMate Software Ltd. | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 36 */ | 
| 95 
bcd31a4c638a
Lookup to HgLookup
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
74diff
changeset | 37 public class HgLookup { | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 38 | 
| 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 | 39 private ConfigFile globalCfg; | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 40 private SessionContext sessionContext; | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 41 | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 42 public HgLookup() { | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 43 } | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 44 | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 45 public HgLookup(SessionContext ctx) { | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 46 sessionContext = ctx; | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 47 } | 
| 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 | 48 | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 49 public HgRepository detectFromWorkingDir() throws HgInvalidFileException { | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 50 return detect(System.getProperty("user.dir")); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 51 } | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 52 | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 53 public HgRepository detect(String location) throws HgInvalidFileException { | 
| 95 
bcd31a4c638a
Lookup to HgLookup
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
74diff
changeset | 54 return detect(new File(location)); | 
| 
bcd31a4c638a
Lookup to HgLookup
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
74diff
changeset | 55 } | 
| 
bcd31a4c638a
Lookup to HgLookup
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
74diff
changeset | 56 | 
| 
bcd31a4c638a
Lookup to HgLookup
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
74diff
changeset | 57 // look up in specified location and above | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 58 public HgRepository detect(File location) throws HgInvalidFileException { | 
| 151 
305ee74c0aa6
[2] do not rely clients supplied us absolute path
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
148diff
changeset | 59 File dir = location.getAbsoluteFile(); | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 60 File repository; | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 61 do { | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 62 repository = new File(dir, ".hg"); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 63 if (repository.exists() && repository.isDirectory()) { | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 64 break; | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 65 } | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 66 repository = null; | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 67 dir = dir.getParentFile(); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 68 | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 69 } while(dir != null); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 70 if (repository == null) { | 
| 95 
bcd31a4c638a
Lookup to HgLookup
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
74diff
changeset | 71 // return invalid repository | 
| 
bcd31a4c638a
Lookup to HgLookup
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
74diff
changeset | 72 return new HgRepository(location.getPath()); | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 73 } | 
| 148 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 74 try { | 
| 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 75 String repoPath = repository.getParentFile().getCanonicalPath(); | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 76 return new HgRepository(getContext(), repoPath, repository); | 
| 148 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 77 } catch (IOException ex) { | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 78 throw new HgInvalidFileException(location.toString(), ex, location); | 
| 148 
1a7a9a20e1f9
Exceptions, javadoc. Initial cancel and progress support
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 79 } | 
| 4 
aa1912c70b36
Fix offset issue for inline revlogs. Commandline processing.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 80 } | 
| 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 | 81 | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 82 public HgBundle loadBundle(File location) throws HgInvalidFileException { | 
| 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 | 83 if (location == null || !location.canRead()) { | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 84 throw new HgInvalidFileException(String.format("Can't read file %s", location == null ? null : location.getPath()), null, 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 | 85 } | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 86 return new HgBundle(new DataAccessProvider(getContext()), 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 | 87 } | 
| 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 | 88 | 
| 
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 | 89 /** | 
| 
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 | 90 * Try to instantiate remote server. | 
| 
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 | 91 * @param key either URL or a key from configuration file that points to remote server | 
| 
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 | 92 * @param hgRepo <em>NOT USED YET<em> local repository that may have extra config, or default remote location | 
| 
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 | 93 * @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 | 94 * @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 | 95 */ | 
| 
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 | 96 public HgRemoteRepository detectRemote(String key, HgRepository hgRepo) throws HgBadArgumentException { | 
| 
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 | 97 URL 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 | 98 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 | 99 try { | 
| 
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 | 100 url = new URL(key); | 
| 
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 | 101 toReport = 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 | 102 } catch (MalformedURLException 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 | 103 url = 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 | 104 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 | 105 } | 
| 
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 | 106 if (url == 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 | 107 String server = getGlobalConfig().getSection("paths").get(key); | 
| 
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 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 | 109 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 | 110 } | 
| 
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 | 111 try { | 
| 
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 | 112 url = new URL(server); | 
| 
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 } catch (MalformedURLException 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 | 114 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 | 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 } | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 117 return new HgRemoteRepository(getContext(), url); | 
| 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 } | 
| 
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 | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 120 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 | 121 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 | 122 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 | 123 } | 
| 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 | 124 if (Boolean.FALSE.booleanValue()) { | 
| 
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 | 125 throw HgRepository.notImplemented(); | 
| 
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 | 126 } | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 127 return new HgRemoteRepository(getContext(), url); | 
| 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 | 128 } | 
| 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 | 129 | 
| 
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 | 130 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 | 131 if (globalCfg == null) { | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 132 globalCfg = new ConfigFile(); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 133 try { | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 134 globalCfg.addLocation(new File(System.getProperty("user.home"), ".hgrc")); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 135 } catch (IOException ex) { | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 136 // XXX perhaps, makes sense to let caller/client know that we've failed to read global config? | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 137 getContext().getLog().warn(getClass(), ex, null); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 138 } | 
| 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 | 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 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 | 141 } | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 142 | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 143 private SessionContext getContext() { | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 144 if (sessionContext == null) { | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 145 sessionContext = new BasicSessionContext(null, null); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 146 } | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 147 return sessionContext; | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
215diff
changeset | 148 } | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 149 } | 
