diff options
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit/transport/DaemonService.java')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/transport/DaemonService.java | 121 |
1 files changed, 52 insertions, 69 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/DaemonService.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/DaemonService.java index 4e7e12399c..78aaf3d5f9 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/DaemonService.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/DaemonService.java @@ -1,58 +1,30 @@ /* * Copyright (C) 2008-2009, Google Inc. - * Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@dewire.com> - * and other copyright owners as documented in the project's IP log. + * Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@dewire.com> and others * - * This program and the accompanying materials are made available - * under the terms of the Eclipse Distribution License v1.0 which - * accompanies this distribution, is reproduced below, and is - * available at http://www.eclipse.org/org/documents/edl-v10.php + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * - Neither the name of the Eclipse Foundation, Inc. nor the - * names of its contributors may be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * SPDX-License-Identifier: BSD-3-Clause */ package org.eclipse.jgit.transport; import java.io.IOException; +import java.util.Collection; +import org.eclipse.jgit.annotations.Nullable; import org.eclipse.jgit.lib.Config; -import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.Config.SectionParser; +import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException; import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException; -/** A service exposed by {@link Daemon} over anonymous <code>git://</code>. */ +/** + * A service exposed by {@link org.eclipse.jgit.transport.Daemon} over anonymous + * <code>git://</code>. + */ public abstract class DaemonService { private final String command; @@ -62,13 +34,9 @@ public abstract class DaemonService { private boolean overridable; - DaemonService(final String cmdName, final String cfgName) { + DaemonService(String cmdName, String cfgName) { command = cmdName.startsWith("git-") ? cmdName : "git-" + cmdName; //$NON-NLS-1$ //$NON-NLS-2$ - configKey = new SectionParser<ServiceConfig>() { - public ServiceConfig parse(final Config cfg) { - return new ServiceConfig(DaemonService.this, cfg, cfgName); - } - }; + configKey = cfg -> new ServiceConfig(DaemonService.this, cfg, cfgName); overridable = true; } @@ -81,34 +49,55 @@ public abstract class DaemonService { } } - /** @return is this service enabled for invocation? */ + /** + * Whether this service is enabled for invocation. + * + * @return whether this service is enabled for invocation. + */ public boolean isEnabled() { return enabled; } /** + * Set if it is allowed to use this service + * * @param on - * true to allow this service to be used; false to deny it. + * {@code true} to allow this service to be used; {@code false} + * to deny it. */ - public void setEnabled(final boolean on) { + public void setEnabled(boolean on) { enabled = on; } /** @return can this service be configured in the repository config file? */ + /** + * Whether this service can be configured in the repository config file + * + * @return whether this service can be configured in the repository config + * file + */ public boolean isOverridable() { return overridable; } /** + * Whether to permit repositories to override this service's enabled state + * with the <code>daemon.servicename</code> config setting. + * * @param on - * true to permit repositories to override this service's enabled - * state with the <code>daemon.servicename</code> config setting. + * {@code true} to permit repositories to override this service's + * enabled state with the <code>daemon.servicename</code> config + * setting. */ - public void setOverridable(final boolean on) { + public void setOverridable(boolean on) { overridable = on; } - /** @return name of the command requested by clients. */ + /** + * Get name of the command requested by clients. + * + * @return name of the command requested by clients. + */ public String getCommandName() { return command; } @@ -120,43 +109,37 @@ public abstract class DaemonService { * input line from the client. * @return true if this command can accept the given command line. */ - public boolean handles(final String commandLine) { + public boolean handles(String commandLine) { return command.length() + 1 < commandLine.length() && commandLine.charAt(command.length()) == ' ' && commandLine.startsWith(command); } - void execute(final DaemonClient client, final String commandLine) + void execute(DaemonClient client, String commandLine, + @Nullable Collection<String> extraParameters) throws IOException, ServiceNotEnabledException, ServiceNotAuthorizedException { final String name = commandLine.substring(command.length() + 1); - Repository db; - try { - db = client.getDaemon().openRepository(client, name); + try (Repository db = client.getDaemon().openRepository(client, name)) { + if (isEnabledFor(db)) { + execute(client, db, extraParameters); + } } catch (ServiceMayNotContinueException e) { // An error when opening the repo means the client is expecting a ref // advertisement, so use that style of error. PacketLineOut pktOut = new PacketLineOut(client.getOutputStream()); pktOut.writeString("ERR " + e.getMessage() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ - db = null; - } - if (db == null) - return; - try { - if (isEnabledFor(db)) - execute(client, db); - } finally { - db.close(); } } - private boolean isEnabledFor(final Repository db) { + private boolean isEnabledFor(Repository db) { if (isOverridable()) return db.getConfig().get(configKey).enabled; return isEnabled(); } - abstract void execute(DaemonClient client, Repository db) + abstract void execute(DaemonClient client, Repository db, + @Nullable Collection<String> extraParameters) throws IOException, ServiceNotEnabledException, ServiceNotAuthorizedException; } |