diff src/org/tmatesoft/hg/repo/HgLookup.java @ 503:0bd2d0441d8f

Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Wed, 31 Oct 2012 15:17:21 +0100
parents e4eaa23e3442
children 2f9ed6bcefa2
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/repo/HgLookup.java	Mon Oct 29 20:06:16 2012 +0100
+++ b/src/org/tmatesoft/hg/repo/HgLookup.java	Wed Oct 31 15:17:21 2012 +0100
@@ -28,6 +28,7 @@
 import org.tmatesoft.hg.internal.BasicSessionContext;
 import org.tmatesoft.hg.internal.ConfigFile;
 import org.tmatesoft.hg.internal.DataAccessProvider;
+import org.tmatesoft.hg.repo.HgRepoConfig.PathsSection;
 
 /**
  * Utility methods to find Mercurial repository at a given location
@@ -83,9 +84,10 @@
 	}
 	
 	/**
-	 * Try to instantiate remote server.
-	 * @param key either URL or a key from configuration file that points to remote server  
-	 * @param hgRepo <em>NOT USED YET<em> local repository that may have extra config, or default remote location
+	 * Try to instantiate remote server using an immediate url or an url from configuration files
+	 * 
+	 * @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
+	 * @param hgRepo optional local repository to get default or otherwise configured remote location
 	 * @return an instance featuring access to remote repository, check {@link HgRemoteRepository#isInvalid()} before actually using it
 	 * @throws HgBadArgumentException if anything is wrong with the remote server's URL
 	 */
@@ -100,7 +102,16 @@
 			toReport = ex;
 		}
 		if (url == null) {
-			String server = getGlobalConfig().getSection("paths").get(key);
+			String server = null;
+			if (hgRepo != null && !hgRepo.isInvalid()) {
+				PathsSection ps = hgRepo.getConfiguration().getPaths();
+				server = key == null || key.trim().isEmpty() ? ps.getDefault() : ps.getString(key, null);
+			} else if (key == null || key.trim().length() == 0) {
+				throw new HgBadArgumentException("Can't look up empty key in a global configuration", null);
+			}
+			if (server == null) {
+				server = getGlobalConfig().getSection("paths").get(key);
+			}
 			if (server == null) {
 				throw new HgBadArgumentException(String.format("Can't find server %s specification in the config", key), toReport);
 			}