Browse Source

init: add config option to set default for the initial branch name

We introduced the option --initial-branch=<branch-name> to allow
initializing a new repository with a different initial branch.

To allow users to override the initial branch name more permanently
(i.e. without having to specify the name manually for each 'git init'),
introduce the 'init.defaultBranch' option.

This option was added to git in 2.28.0.

See https://git-scm.com/docs/git-config#Documentation/git-config.txt-initdefaultBranch

Bug: 564794
Change-Id: I679b14057a54cd3d19e44460c4a5bd3a368ec848
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
tags/v5.11.0.202102240950-m3
Matthias Sohn 3 years ago
parent
commit
927deed5a5

+ 1
- 1
org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties View File

@@ -432,7 +432,7 @@ usage_updateRef=reference to update
usage_updateRemoteRefsFromAnotherRepository=Update remote refs from another repository
usage_useNameInsteadOfOriginToTrackUpstream=use <name> instead of 'origin' to track upstream
usage_checkoutBranchAfterClone=check out named branch instead of remote's HEAD
usage_initialBranch=initial branch in the newly created repository (default 'master')
usage_initialBranch=initial branch of the newly created repository (default 'master', can be configured via config option init.defaultBranch)
usage_viewCommitHistory=View commit history
usage_orphan=Create a new orphan branch. The first commit made on this new branch will have no parents and it will be the root of a new history totally disconnected from other branches and commits.
usernameFor=Username for {0}:

+ 52
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/InitCommandTest.java View File

@@ -22,8 +22,10 @@ import org.eclipse.jgit.api.errors.JGitInternalException;
import org.eclipse.jgit.errors.NoWorkTreeException;
import org.eclipse.jgit.junit.MockSystemReader;
import org.eclipse.jgit.junit.RepositoryTestCase;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.util.SystemReader;
import org.junit.Before;
import org.junit.Test;
@@ -63,6 +65,56 @@ public class InitCommandTest extends RepositoryTestCase {
}
}

@Test
public void testInitRepositoryCustomDefaultBranch()
throws Exception {
File directory = createTempDirectory("testInitRepository");
InitCommand command = new InitCommand();
command.setDirectory(directory);
MockSystemReader reader = (MockSystemReader) SystemReader.getInstance();
StoredConfig c = reader.getUserConfig();
String old = c.getString(ConfigConstants.CONFIG_INIT_SECTION, null,
ConfigConstants.CONFIG_KEY_DEFAULT_BRANCH);
c.setString(ConfigConstants.CONFIG_INIT_SECTION, null,
ConfigConstants.CONFIG_KEY_DEFAULT_BRANCH, "main");
try (Git git = command.call()) {
Repository r = git.getRepository();
assertNotNull(r);
assertEquals("refs/heads/main", r.getFullBranch());
} finally {
c.setString(ConfigConstants.CONFIG_INIT_SECTION, null,
ConfigConstants.CONFIG_KEY_DEFAULT_BRANCH, old);
}
}

@Test
public void testInitRepositoryNullInitialBranch() throws Exception {
File directory = createTempDirectory("testInitRepository");
InitCommand command = new InitCommand();
command.setDirectory(directory);
command.setInitialBranch("main");
command.setInitialBranch(null);
try (Git git = command.call()) {
Repository r = git.getRepository();
assertNotNull(r);
assertEquals("refs/heads/master", r.getFullBranch());
}
}

@Test
public void testInitRepositoryEmptyInitialBranch() throws Exception {
File directory = createTempDirectory("testInitRepository");
InitCommand command = new InitCommand();
command.setDirectory(directory);
command.setInitialBranch("main");
command.setInitialBranch("");
try (Git git = command.call()) {
Repository r = git.getRepository();
assertNotNull(r);
assertEquals("refs/heads/master", r.getFullBranch());
}
}

@Test
public void testInitNonEmptyRepository() throws IOException,
JGitInternalException, GitAPIException {

+ 10
- 3
org.eclipse.jgit/src/org/eclipse/jgit/api/InitCommand.java View File

@@ -17,11 +17,14 @@ import java.util.concurrent.Callable;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.InvalidRefNameException;
import org.eclipse.jgit.api.errors.JGitInternalException;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.RepositoryBuilder;
import org.eclipse.jgit.util.FS;
import org.eclipse.jgit.util.StringUtils;
import org.eclipse.jgit.util.SystemReader;

/**
@@ -39,7 +42,7 @@ public class InitCommand implements Callable<Git> {

private FS fs;

private String initialBranch = Constants.MASTER;
private String initialBranch;

/**
* {@inheritDoc}
@@ -90,12 +93,16 @@ public class InitCommand implements Callable<Git> {
builder.setWorkTree(new File(dStr));
}
}
builder.setInitialBranch(initialBranch);
builder.setInitialBranch(StringUtils.isEmptyOrNull(initialBranch)
? SystemReader.getInstance().getUserConfig().getString(
ConfigConstants.CONFIG_INIT_SECTION, null,
ConfigConstants.CONFIG_KEY_DEFAULT_BRANCH)
: initialBranch);
Repository repository = builder.build();
if (!repository.getObjectDatabase().exists())
repository.create(bare);
return new Git(repository, true);
} catch (IOException e) {
} catch (IOException | ConfigInvalidException e) {
throw new JGitInternalException(e.getMessage(), e);
}
}

+ 13
- 0
org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java View File

@@ -715,4 +715,17 @@ public final class ConfigConstants {
*/
public static final String CONFIG_KEY_VERSION = "version";

/**
* The "init" section
*
* @since 5.11
*/
public static final String CONFIG_INIT_SECTION = "init";

/**
* The "defaultBranch" key
*
* @since 5.11
*/
public static final String CONFIG_KEY_DEFAULT_BRANCH = "defaultbranch";
}

Loading…
Cancel
Save