From: Shawn O. Pearce Date: Sat, 25 Jul 2009 18:53:01 GMT Subject: [JGIT PATCH 18/19] Use Config SectionParser cache to store daemon enable states Message-ID: <1248547982-4003-19-git-send-email-spearce@spearce.org> In-Reply-To: <1248547982-4003-18-git-send-email-spearce@spearce.org> Rather than looking up the boolean each time we start a new connection in a repository we now cache it in the configuration cache under a key that is unique to the daemon service. Signed-off-by: Shawn O. Pearce --- .../org/spearce/jgit/transport/DaemonService.java | 30 ++++++++++++++++---- 1 files changed, 24 insertions(+), 6 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/DaemonService.java b/org.spearce.jgit/src/org/spearce/jgit/transport/DaemonService.java index 817aeee..b7198c7 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/transport/DaemonService.java +++ b/org.spearce.jgit/src/org/spearce/jgit/transport/DaemonService.java @@ -39,13 +39,15 @@ import java.io.IOException; +import org.spearce.jgit.lib.Config; import org.spearce.jgit.lib.Repository; +import org.spearce.jgit.lib.Config.SectionParser; /** A service exposed by {@link Daemon} over anonymous git://. */ public abstract class DaemonService { private final String command; - private final String config; + private final SectionParser configKey; private boolean enabled; @@ -53,10 +55,23 @@ DaemonService(final String cmdName, final String cfgName) { command = cmdName.startsWith("git-") ? cmdName : "git-" + cmdName; - config = cfgName; + configKey = new SectionParser() { + public ServiceConfig parse(final Config cfg) { + return new ServiceConfig(DaemonService.this, cfg, cfgName); + } + }; overridable = true; } + private static class ServiceConfig { + final boolean enabled; + + ServiceConfig(final DaemonService service, final Config cfg, + final String name) { + enabled = cfg.getBoolean("daemon", name, service.isEnabled()); + } + } + /** @return is this service enabled for invocation? */ public boolean isEnabled() { return enabled; @@ -109,16 +124,19 @@ void execute(final DaemonClient client, final String commandLine) if (db == null) return; try { - boolean on = isEnabled(); - if (isOverridable()) - on = db.getConfig().getBoolean("daemon", config, on); - if (on) + if (isEnabledFor(db)) execute(client, db); } finally { db.close(); } } + private boolean isEnabledFor(final Repository db) { + if (isOverridable()) + return db.getConfig().get(configKey).enabled; + return isEnabled(); + } + abstract void execute(DaemonClient client, Repository db) throws IOException; } -- 1.6.4.rc2.216.g769fa