diff options
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit/transport/PushConfig.java')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/transport/PushConfig.java | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PushConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PushConfig.java new file mode 100644 index 0000000000..c8774d546a --- /dev/null +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PushConfig.java @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2017, 2022 David Pursehouse <david.pursehouse@gmail.com> and others + * + * 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. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +package org.eclipse.jgit.transport; + +import java.util.Locale; + +import org.eclipse.jgit.lib.Config; +import org.eclipse.jgit.lib.ConfigConstants; +import org.eclipse.jgit.util.StringUtils; + +/** + * Push section of a Git configuration file. + * + * @since 4.9 + */ +public class PushConfig { + + /** + * Git config values for {@code push.recurseSubmodules}. + */ + public enum PushRecurseSubmodulesMode implements Config.ConfigEnum { + /** + * Verify that all submodule commits that changed in the revisions to be + * pushed are available on at least one remote of the submodule. + */ + CHECK("check"), //$NON-NLS-1$ + + /** + * All submodules that changed in the revisions to be pushed will be + * pushed. + */ + ON_DEMAND("on-demand"), //$NON-NLS-1$ + + /** Default behavior of ignoring submodules when pushing is retained. */ + NO("false"); //$NON-NLS-1$ + + private final String configValue; + + private PushRecurseSubmodulesMode(String configValue) { + this.configValue = configValue; + } + + @Override + public String toConfigValue() { + return configValue; + } + + @Override + public boolean matchConfigValue(String s) { + if (StringUtils.isEmptyOrNull(s)) { + return false; + } + s = s.replace('-', '_'); + return name().equalsIgnoreCase(s) + || configValue.equalsIgnoreCase(s); + } + } + + /** + * Git config values for {@code push.default}. + * + * @since 6.1 + */ + public enum PushDefault implements Config.ConfigEnum { + + /** + * Do not push if there are no explicit refspecs. + */ + NOTHING, + + /** + * Push the current branch to an upstream branch of the same name. + */ + CURRENT, + + /** + * Push the current branch to an upstream branch determined by git + * config {@code branch.<currentBranch>.merge}. + */ + UPSTREAM("tracking"), //$NON-NLS-1$ + + /** + * Like {@link #UPSTREAM}, but only if the upstream name is the same as + * the name of the current local branch. + */ + SIMPLE, + + /** + * Push all current local branches that match a configured push refspec + * of the remote configuration. + */ + MATCHING; + + private final String alias; + + private PushDefault() { + alias = null; + } + + private PushDefault(String alias) { + this.alias = alias; + } + + @Override + public String toConfigValue() { + return name().toLowerCase(Locale.ROOT); + } + + @Override + public boolean matchConfigValue(String in) { + return toConfigValue().equalsIgnoreCase(in) + || (alias != null && alias.equalsIgnoreCase(in)); + } + } + + private final PushRecurseSubmodulesMode recurseSubmodules; + + private final PushDefault pushDefault; + + /** + * Creates a new instance. + * + * @param config + * {@link Config} to fill the {@link PushConfig} from + * @since 6.1 + */ + public PushConfig(Config config) { + recurseSubmodules = config.getEnum(ConfigConstants.CONFIG_PUSH_SECTION, + null, ConfigConstants.CONFIG_KEY_RECURSE_SUBMODULES, + PushRecurseSubmodulesMode.NO); + pushDefault = config.getEnum(ConfigConstants.CONFIG_PUSH_SECTION, null, + ConfigConstants.CONFIG_KEY_DEFAULT, PushDefault.SIMPLE); + } + + /** + * Retrieves the value of git config {@code push.recurseSubmodules}. + * + * @return the value + * @since 6.1 + */ + public PushRecurseSubmodulesMode getRecurseSubmodules() { + return recurseSubmodules; + } + + /** + * Retrieves the value of git config {@code push.default}. + * + * @return the value + * @since 6.1 + */ + public PushDefault getPushDefault() { + return pushDefault; + } +} |