Support for git config push.default
Enhance the (unused!?) PushConfig; include a PushDefault enumeration. Add simple tests for this PushConfig. Bug: 351314 Change-Id: Ibc5656a2a1fccf70d00c5e15de8ed3dd8add6337 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
This commit is contained in:
parent
0d2825cdcd
commit
2883762219
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2017, David Pursehouse <david.pursehouse@gmail.com> and others
|
||||
* 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
|
||||
|
@ -14,10 +14,13 @@
|
|||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import org.eclipse.jgit.lib.Config;
|
||||
import org.eclipse.jgit.transport.PushConfig.PushDefault;
|
||||
import org.eclipse.jgit.transport.PushConfig.PushRecurseSubmodulesMode;
|
||||
import org.junit.Test;
|
||||
|
||||
public class PushConfigTest {
|
||||
|
||||
@Test
|
||||
public void pushRecurseSubmoduleMatch() throws Exception {
|
||||
assertTrue(PushRecurseSubmodulesMode.CHECK.matchConfigValue("check"));
|
||||
|
@ -52,4 +55,59 @@ public void pushRecurseSubmoduleToConfigValue() {
|
|||
assertEquals("check", PushRecurseSubmodulesMode.CHECK.toConfigValue());
|
||||
assertEquals("false", PushRecurseSubmodulesMode.NO.toConfigValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pushDefaultMatch() throws Exception {
|
||||
assertTrue(PushDefault.NOTHING.matchConfigValue("nothing"));
|
||||
assertTrue(PushDefault.NOTHING.matchConfigValue("NOTHING"));
|
||||
assertTrue(PushDefault.CURRENT.matchConfigValue("current"));
|
||||
assertTrue(PushDefault.CURRENT.matchConfigValue("CURRENT"));
|
||||
assertTrue(PushDefault.UPSTREAM.matchConfigValue("upstream"));
|
||||
assertTrue(PushDefault.UPSTREAM.matchConfigValue("UPSTREAM"));
|
||||
assertTrue(PushDefault.UPSTREAM.matchConfigValue("tracking"));
|
||||
assertTrue(PushDefault.UPSTREAM.matchConfigValue("TRACKING"));
|
||||
assertTrue(PushDefault.SIMPLE.matchConfigValue("simple"));
|
||||
assertTrue(PushDefault.SIMPLE.matchConfigValue("SIMPLE"));
|
||||
assertTrue(PushDefault.MATCHING.matchConfigValue("matching"));
|
||||
assertTrue(PushDefault.MATCHING.matchConfigValue("MATCHING"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pushDefaultNoMatch() throws Exception {
|
||||
assertFalse(PushDefault.NOTHING.matchConfigValue("n"));
|
||||
assertFalse(PushDefault.CURRENT.matchConfigValue(""));
|
||||
assertFalse(PushDefault.UPSTREAM.matchConfigValue("track"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pushDefaultToConfigValue() throws Exception {
|
||||
assertEquals("nothing", PushDefault.NOTHING.toConfigValue());
|
||||
assertEquals("current", PushDefault.CURRENT.toConfigValue());
|
||||
assertEquals("upstream", PushDefault.UPSTREAM.toConfigValue());
|
||||
assertEquals("simple", PushDefault.SIMPLE.toConfigValue());
|
||||
assertEquals("matching", PushDefault.MATCHING.toConfigValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEmptyConfig() throws Exception {
|
||||
PushConfig cfg = parse("");
|
||||
assertEquals(PushRecurseSubmodulesMode.NO, cfg.getRecurseSubmodules());
|
||||
assertEquals(PushDefault.SIMPLE, cfg.getPushDefault());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConfig() throws Exception {
|
||||
PushConfig cfg = parse(
|
||||
"[push]\n\tdefault = tracking\n\trecurseSubmodules = on-demand\n");
|
||||
assertEquals(PushRecurseSubmodulesMode.ON_DEMAND,
|
||||
cfg.getRecurseSubmodules());
|
||||
assertEquals(PushDefault.UPSTREAM, cfg.getPushDefault());
|
||||
}
|
||||
|
||||
private static PushConfig parse(String content) throws Exception {
|
||||
Config c = new Config();
|
||||
c.fromText(content);
|
||||
return c.get(PushConfig::new);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -17,4 +17,12 @@
|
|||
</message_arguments>
|
||||
</filter>
|
||||
</resource>
|
||||
<resource path="src/org/eclipse/jgit/transport/PushConfig.java" type="org.eclipse.jgit.transport.PushConfig">
|
||||
<filter id="338722907">
|
||||
<message_arguments>
|
||||
<message_argument value="org.eclipse.jgit.transport.PushConfig"/>
|
||||
<message_argument value="PushConfig()"/>
|
||||
</message_arguments>
|
||||
</filter>
|
||||
</resource>
|
||||
</component>
|
||||
|
|
|
@ -808,4 +808,18 @@ public final class ConfigConstants {
|
|||
*/
|
||||
public static final String CONFIG_KEY_SEARCH_FOR_REUSE_TIMEOUT = "searchforreusetimeout";
|
||||
|
||||
/**
|
||||
* The "push" section.
|
||||
*
|
||||
* @since 6.1
|
||||
*/
|
||||
public static final String CONFIG_PUSH_SECTION = "push";
|
||||
|
||||
/**
|
||||
* The "default" key.
|
||||
*
|
||||
* @since 6.1
|
||||
*/
|
||||
public static final String CONFIG_KEY_DEFAULT = "default";
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2017, David Pursehouse <david.pursehouse@gmail.com> and others
|
||||
* 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
|
||||
|
@ -10,7 +10,10 @@
|
|||
|
||||
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;
|
||||
|
||||
/**
|
||||
|
@ -19,8 +22,9 @@
|
|||
* @since 4.9
|
||||
*/
|
||||
public class PushConfig {
|
||||
|
||||
/**
|
||||
* Config values for push.recurseSubmodules.
|
||||
* Git config values for {@code push.recurseSubmodules}.
|
||||
*/
|
||||
public enum PushRecurseSubmodulesMode implements Config.ConfigEnum {
|
||||
/**
|
||||
|
@ -59,4 +63,100 @@ public boolean matchConfigValue(String 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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue