+
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/main/distrib/data/defaults.properties
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,21 @@ tickets.acceptNewPatchsets = true
# SINCE 1.4.0
tickets.requireApproval = false

# Default setting to control how patchsets are merged to the integration branch.
# Valid values:
# MERGE_ALWAYS - Always merge with a merge commit. Every ticket will show up as a branch,
# even if it could have been fast-forward merged. This is the default.
# MERGE_IF_NECESSARY - If possible, fast-forward the integration branch,
# if not, merge with a merge commit.
# FAST_FORWARD_ONLY - Only merge when a fast-forward is possible. This produces a strictly
# linear history of the integration branch.
#
# This setting can be overriden per-repository.
#
# RESTART REQUIRED
# SINCE 1.9.0
tickets.mergeType = MERGE_ALWAYS

# The case-insensitive regular expression used to identify and close tickets on
# push to the integration branch for commits that are NOT already referenced as
# a patchset tip.
Expand Down
31 changes: 31 additions & 0 deletions src/main/java/com/gitblit/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -639,6 +639,37 @@ public static Transport fromUrl(String url) {
}
}

/**
* The type of merge Gitblit will use when merging a ticket to the integration branch.
* <p>
* The default type is MERGE_ALWAYS.
* <p>
* This is modeled after the Gerrit SubmitType.
*/
public static enum MergeType {
/** Allows a merge only if it can be fast-forward merged into the integration branch. */
FAST_FORWARD_ONLY,
/** Uses a fast-forward merge if possible, other wise a merge commit is created. */
MERGE_IF_NECESSARY,
// Future REBASE_IF_NECESSARY,
/** Always merge with a merge commit, even when a fast-forward would be possible. */
MERGE_ALWAYS,
// Future? CHERRY_PICK
;

public static final MergeType DEFAULT_MERGE_TYPE = MERGE_ALWAYS;

public static MergeType fromName(String name) {
for (MergeType type : values()) {
if (type.name().equalsIgnoreCase(name)) {
return type;
}
}
return DEFAULT_MERGE_TYPE;
}
}


@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Unused {
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/com/gitblit/git/PatchsetReceivePack.java
Original file line number Diff line number Diff line change
Expand Up @@ -599,7 +599,7 @@ private PatchsetCommand preparePatchset(ReceiveCommand cmd) {
}

// ensure that the patchset can be cleanly merged right now
MergeStatus status = JGitUtils.canMerge(getRepository(), tipCommit.getName(), forBranch);
MergeStatus status = JGitUtils.canMerge(getRepository(), tipCommit.getName(), forBranch, repository.mergeType);
switch (status) {
case ALREADY_MERGED:
sendError("");
Expand Down Expand Up @@ -1279,6 +1279,7 @@ public MergeStatus merge(TicketModel ticket) {
getRepository(),
patchset.tip,
ticket.mergeTo,
getRepositoryModel().mergeType,
committer,
message);

Expand Down
9 changes: 9 additions & 0 deletions src/main/java/com/gitblit/manager/RepositoryManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
import com.gitblit.Constants.AuthorizationControl;
import com.gitblit.Constants.CommitMessageRenderer;
import com.gitblit.Constants.FederationStrategy;
import com.gitblit.Constants.MergeType;
import com.gitblit.Constants.PermissionType;
import com.gitblit.Constants.RegistrantType;
import com.gitblit.GitBlitException;
Expand Down Expand Up @@ -899,6 +900,7 @@ private RepositoryModel loadRepositoryModel(String repositoryName) {
model.acceptNewTickets = getConfig(config, "acceptNewTickets", true);
model.requireApproval = getConfig(config, "requireApproval", settings.getBoolean(Keys.tickets.requireApproval, false));
model.mergeTo = getConfig(config, "mergeTo", null);
model.mergeType = MergeType.fromName(getConfig(config, "mergeType", settings.getString(Keys.tickets.mergeType, null)));
model.useIncrementalPushTags = getConfig(config, "useIncrementalPushTags", false);
model.incrementalPushTagPrefix = getConfig(config, "incrementalPushTagPrefix", null);
model.allowForks = getConfig(config, "allowForks", true);
Expand Down Expand Up @@ -1557,6 +1559,13 @@ public void updateConfiguration(Repository r, RepositoryModel repository) {
if (!StringUtils.isEmpty(repository.mergeTo)) {
config.setString(Constants.CONFIG_GITBLIT, null, "mergeTo", repository.mergeTo);
}
if (repository.mergeType == null || repository.mergeType == MergeType.fromName(settings.getString(Keys.tickets.mergeType, null))) {
// use default
config.unset(Constants.CONFIG_GITBLIT, null, "mergeType");
} else {
// override default
config.setString(Constants.CONFIG_GITBLIT, null, "mergeType", repository.mergeType.name());
}
config.setBoolean(Constants.CONFIG_GITBLIT, null, "useIncrementalPushTags", repository.useIncrementalPushTags);
if (StringUtils.isEmpty(repository.incrementalPushTagPrefix) ||
repository.incrementalPushTagPrefix.equals(settings.getString(Keys.git.defaultIncrementalPushTagPrefix, "r"))) {
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/com/gitblit/models/RepositoryModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.gitblit.Constants.AuthorizationControl;
import com.gitblit.Constants.CommitMessageRenderer;
import com.gitblit.Constants.FederationStrategy;
import com.gitblit.Constants.MergeType;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.ModelUtils;
import com.gitblit.utils.StringUtils;
Expand Down Expand Up @@ -89,6 +90,7 @@ public class RepositoryModel implements Serializable, Comparable<RepositoryModel
public boolean acceptNewTickets;
public boolean requireApproval;
public String mergeTo;
public MergeType mergeType;

public transient boolean isCollectingGarbage;
public Date lastGC;
Expand All @@ -111,6 +113,7 @@ public RepositoryModel(String name, String description, String owner, Date lastc
this.isBare = true;
this.acceptNewTickets = true;
this.acceptNewPatchsets = true;
this.mergeType = MergeType.DEFAULT_MERGE_TYPE;

addOwner(owner);
}
Expand Down
Loading
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载