Option to reject implicit merges when pushing changes for review

An implicit merge is a case where by submitting an open change one also
merges a branch into the target branch. Typically, this happens when a
change is done on top of master and, by mistake, pushed to stable
branch. Merging this change would also implicitly merge master into
stable.

Example 1:

  o < change pushed for stable
  |
  o < master
  |
  o < stable

  Submitting this change will implicitly merge master into stable:

  o < change pushed for stable, stable
  |
  o < master
  |
  o

Example 2:

           o < change pushed for stable
           |
  master > o   o < stable
            \ /
             o

  Submitting this change will implicitly merge master into stable:

               o < stable
              /|
            /  |
           o < change pushed for stable
           |   |
  master > o   o
            \ /
             o

A new project property receive.rejectImplicitMerges controls whether an
implicit merge will be rejected. When an implicit merge is detected
Gerrit will print error(s) to the user:

  remote: ERROR: Implicit Merge of 39adddb Commit message subject
  remote: ERROR: Implicit Merge of ...

and will reject the push.

Bug: issue 1107
Change-Id: I0b14c64bebe28ea5579fc11f6beedacf5982e5aa
This commit is contained in:
Saša Živkov
2015-11-17 17:37:43 +01:00
parent 968e3b0c6d
commit 8af982ae60
17 changed files with 243 additions and 4 deletions

View File

@@ -99,6 +99,8 @@ public final class Project {
protected InheritableBoolean enableSignedPush;
protected InheritableBoolean requireSignedPush;
protected InheritableBoolean rejectImplicitMerges;
protected Project() {
}
@@ -151,6 +153,10 @@ public final class Project {
return maxObjectSizeLimit;
}
public InheritableBoolean getRejectImplicitMerges() {
return rejectImplicitMerges;
}
public void setUseContributorAgreements(final InheritableBoolean u) {
useContributorAgreements = u;
}
@@ -196,6 +202,10 @@ public final class Project {
maxObjectSizeLimit = limit;
}
public void setRejectImplicitMerges(InheritableBoolean check) {
rejectImplicitMerges = check;
}
public SubmitType getSubmitType() {
return submitType;
}