Make adding of signed-off-by footer for online changes customizable
Now that we migrated general user preferences to Git backend, we can easily introduce new customization option: Signed-off-by footer for changes created with inline edit feature: * "Create Change" button on project screen * "Edit Config" button on project screen * "Follow-Up" button on change screen Change-Id: Ifa94c18d5351196fbc741c6b16d0b129e2b4a6cb
This commit is contained in:
committed by
David Pursehouse
parent
5f8ce2c486
commit
5d8f62c938
@@ -1946,6 +1946,9 @@ Whether to show the change sizes as colored bars in the change table.
|
|||||||
Whether to show change number in the change table.
|
Whether to show change number in the change table.
|
||||||
|`mute_common_path_prefixes` |not set if `false`|
|
|`mute_common_path_prefixes` |not set if `false`|
|
||||||
Whether to mute common path prefixes in file names in the file table.
|
Whether to mute common path prefixes in file names in the file table.
|
||||||
|
|`signed_off_by` |not set if `false`|
|
||||||
|
Whether to insert Signed-off-by footer in changes created with the
|
||||||
|
inline edit feature.
|
||||||
|`review_category_strategy` ||
|
|`review_category_strategy` ||
|
||||||
The strategy used to displayed info in the review category column.
|
The strategy used to displayed info in the review category column.
|
||||||
Allowed values are `NONE`, `NAME`, `EMAIL`, `USERNAME`, `ABBREV`.
|
Allowed values are `NONE`, `NAME`, `EMAIL`, `USERNAME`, `ABBREV`.
|
||||||
@@ -2001,6 +2004,9 @@ Whether to show the change sizes as colored bars in the change table.
|
|||||||
Whether to show change number in the change table.
|
Whether to show change number in the change table.
|
||||||
|`mute_common_path_prefixes` |optional|
|
|`mute_common_path_prefixes` |optional|
|
||||||
Whether to mute common path prefixes in file names in the file table.
|
Whether to mute common path prefixes in file names in the file table.
|
||||||
|
|`signed_off_by` |optional|
|
||||||
|
Whether to insert Signed-off-by footer in changes created with the
|
||||||
|
inline edit feature.
|
||||||
|`review_category_strategy` |optional|
|
|`review_category_strategy` |optional|
|
||||||
The strategy used to displayed info in the review category column.
|
The strategy used to displayed info in the review category column.
|
||||||
Allowed values are `NONE`, `NAME`, `EMAIL`, `USERNAME`, `ABBREV`.
|
Allowed values are `NONE`, `NAME`, `EMAIL`, `USERNAME`, `ABBREV`.
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ public class GeneralPreferencesIT extends AbstractDaemonTest {
|
|||||||
assertThat(o.legacycidInChangeTable).isNull();
|
assertThat(o.legacycidInChangeTable).isNull();
|
||||||
assertThat(o.muteCommonPathPrefixes).isEqualTo(
|
assertThat(o.muteCommonPathPrefixes).isEqualTo(
|
||||||
d.muteCommonPathPrefixes);
|
d.muteCommonPathPrefixes);
|
||||||
|
assertThat(o.signedOffBy).isNull();
|
||||||
assertThat(o.reviewCategoryStrategy).isEqualTo(
|
assertThat(o.reviewCategoryStrategy).isEqualTo(
|
||||||
d.getReviewCategoryStrategy());
|
d.getReviewCategoryStrategy());
|
||||||
assertThat(o.diffView).isEqualTo(d.getDiffView());
|
assertThat(o.diffView).isEqualTo(d.getDiffView());
|
||||||
@@ -93,6 +94,7 @@ public class GeneralPreferencesIT extends AbstractDaemonTest {
|
|||||||
i.sizeBarInChangeTable ^= true;
|
i.sizeBarInChangeTable ^= true;
|
||||||
i.legacycidInChangeTable ^= true;
|
i.legacycidInChangeTable ^= true;
|
||||||
i.muteCommonPathPrefixes ^= true;
|
i.muteCommonPathPrefixes ^= true;
|
||||||
|
i.signedOffBy ^= true;
|
||||||
i.reviewCategoryStrategy = ReviewCategoryStrategy.ABBREV;
|
i.reviewCategoryStrategy = ReviewCategoryStrategy.ABBREV;
|
||||||
i.diffView = DiffView.UNIFIED_DIFF;
|
i.diffView = DiffView.UNIFIED_DIFF;
|
||||||
i.my = new ArrayList<>();
|
i.my = new ArrayList<>();
|
||||||
@@ -117,6 +119,7 @@ public class GeneralPreferencesIT extends AbstractDaemonTest {
|
|||||||
assertThat(o.sizeBarInChangeTable).isNull();
|
assertThat(o.sizeBarInChangeTable).isNull();
|
||||||
assertThat(o.legacycidInChangeTable).isEqualTo(i.legacycidInChangeTable);
|
assertThat(o.legacycidInChangeTable).isEqualTo(i.legacycidInChangeTable);
|
||||||
assertThat(o.muteCommonPathPrefixes).isNull();
|
assertThat(o.muteCommonPathPrefixes).isNull();
|
||||||
|
assertThat(o.signedOffBy).isEqualTo(i.signedOffBy);
|
||||||
assertThat(o.reviewCategoryStrategy).isEqualTo(
|
assertThat(o.reviewCategoryStrategy).isEqualTo(
|
||||||
i.getReviewCategoryStrategy());
|
i.getReviewCategoryStrategy());
|
||||||
assertThat(o.diffView).isEqualTo(i.getDiffView());
|
assertThat(o.diffView).isEqualTo(i.getDiffView());
|
||||||
|
|||||||
@@ -17,11 +17,13 @@ package com.google.gerrit.acceptance.rest.change;
|
|||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static com.google.common.truth.TruthJUnit.assume;
|
import static com.google.common.truth.TruthJUnit.assume;
|
||||||
import static java.util.concurrent.TimeUnit.SECONDS;
|
import static java.util.concurrent.TimeUnit.SECONDS;
|
||||||
|
import static org.eclipse.jgit.lib.Constants.SIGNED_OFF_BY_TAG;
|
||||||
|
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.gerrit.acceptance.AbstractDaemonTest;
|
import com.google.gerrit.acceptance.AbstractDaemonTest;
|
||||||
import com.google.gerrit.acceptance.NoHttpd;
|
import com.google.gerrit.acceptance.RestResponse;
|
||||||
import com.google.gerrit.extensions.client.ChangeStatus;
|
import com.google.gerrit.extensions.client.ChangeStatus;
|
||||||
|
import com.google.gerrit.extensions.client.GeneralPreferencesInfo;
|
||||||
import com.google.gerrit.extensions.common.ChangeInfo;
|
import com.google.gerrit.extensions.common.ChangeInfo;
|
||||||
import com.google.gerrit.extensions.common.ChangeInput;
|
import com.google.gerrit.extensions.common.ChangeInput;
|
||||||
import com.google.gerrit.extensions.restapi.BadRequestException;
|
import com.google.gerrit.extensions.restapi.BadRequestException;
|
||||||
@@ -42,7 +44,6 @@ import org.junit.AfterClass;
|
|||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
@NoHttpd
|
|
||||||
public class CreateChangeIT extends AbstractDaemonTest {
|
public class CreateChangeIT extends AbstractDaemonTest {
|
||||||
@ConfigSuite.Config
|
@ConfigSuite.Config
|
||||||
public static Config allowDraftsDisabled() {
|
public static Config allowDraftsDisabled() {
|
||||||
@@ -59,7 +60,6 @@ public class CreateChangeIT extends AbstractDaemonTest {
|
|||||||
TestTimeUtil.useSystemTime();
|
TestTimeUtil.useSystemTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void createEmptyChange_MissingBranch() throws Exception {
|
public void createEmptyChange_MissingBranch() throws Exception {
|
||||||
ChangeInput ci = new ChangeInput();
|
ChangeInput ci = new ChangeInput();
|
||||||
@@ -89,6 +89,17 @@ public class CreateChangeIT extends AbstractDaemonTest {
|
|||||||
assertCreateSucceeds(newChangeInput(ChangeStatus.NEW));
|
assertCreateSucceeds(newChangeInput(ChangeStatus.NEW));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createNewChangeSignedOffByFooter() throws Exception {
|
||||||
|
assume().that(isAllowDrafts()).isTrue();
|
||||||
|
setSignedOffByFooter();
|
||||||
|
ChangeInfo info = assertCreateSucceeds(newChangeInput(ChangeStatus.NEW));
|
||||||
|
String message = info.revisions.get(info.currentRevision).commit.message;
|
||||||
|
assertThat(message.contains(
|
||||||
|
String.format("%s Adminitrstaor %s", SIGNED_OFF_BY_TAG,
|
||||||
|
admin.getIdent().getEmailAddress())));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void createDraftChange() throws Exception {
|
public void createDraftChange() throws Exception {
|
||||||
assume().that(isAllowDrafts()).isTrue();
|
assume().that(isAllowDrafts()).isTrue();
|
||||||
@@ -164,4 +175,21 @@ public class CreateChangeIT extends AbstractDaemonTest {
|
|||||||
}
|
}
|
||||||
return draft ? ChangeStatus.DRAFT : ChangeStatus.NEW;
|
return draft ? ChangeStatus.DRAFT : ChangeStatus.NEW;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(davido): Expose setting of account preferences in the API
|
||||||
|
private void setSignedOffByFooter() throws Exception {
|
||||||
|
RestResponse r = adminSession.get("/accounts/" + admin.email
|
||||||
|
+ "/preferences");
|
||||||
|
r.assertOK();
|
||||||
|
GeneralPreferencesInfo i =
|
||||||
|
newGson().fromJson(r.getReader(), GeneralPreferencesInfo.class);
|
||||||
|
i.signedOffBy = true;
|
||||||
|
|
||||||
|
r = adminSession.put("/accounts/" + admin.email + "/preferences", i);
|
||||||
|
r.assertOK();
|
||||||
|
GeneralPreferencesInfo o = newGson().fromJson(r.getReader(),
|
||||||
|
GeneralPreferencesInfo.class);
|
||||||
|
|
||||||
|
assertThat(o.signedOffBy).isTrue();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ public class GeneralPreferencesInfo {
|
|||||||
public Boolean legacycidInChangeTable;
|
public Boolean legacycidInChangeTable;
|
||||||
public ReviewCategoryStrategy reviewCategoryStrategy;
|
public ReviewCategoryStrategy reviewCategoryStrategy;
|
||||||
public Boolean muteCommonPathPrefixes;
|
public Boolean muteCommonPathPrefixes;
|
||||||
|
public Boolean signedOffBy;
|
||||||
public List<MenuItem> my;
|
public List<MenuItem> my;
|
||||||
public Map<String, String> urlAliases;
|
public Map<String, String> urlAliases;
|
||||||
public EmailStrategy emailStrategy;
|
public EmailStrategy emailStrategy;
|
||||||
@@ -178,6 +179,7 @@ public class GeneralPreferencesInfo {
|
|||||||
p.sizeBarInChangeTable = true;
|
p.sizeBarInChangeTable = true;
|
||||||
p.legacycidInChangeTable = false;
|
p.legacycidInChangeTable = false;
|
||||||
p.muteCommonPathPrefixes = true;
|
p.muteCommonPathPrefixes = true;
|
||||||
|
p.signedOffBy = false;
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ public class GeneralPreferences extends JavaScriptObject {
|
|||||||
p.sizeBarInChangeTable(d.sizeBarInChangeTable);
|
p.sizeBarInChangeTable(d.sizeBarInChangeTable);
|
||||||
p.legacycidInChangeTable(d.legacycidInChangeTable);
|
p.legacycidInChangeTable(d.legacycidInChangeTable);
|
||||||
p.muteCommonPathPrefixes(d.muteCommonPathPrefixes);
|
p.muteCommonPathPrefixes(d.muteCommonPathPrefixes);
|
||||||
|
p.signedOffBy(d.signedOffBy);
|
||||||
p.reviewCategoryStrategy(d.getReviewCategoryStrategy());
|
p.reviewCategoryStrategy(d.getReviewCategoryStrategy());
|
||||||
p.diffView(d.getDiffView());
|
p.diffView(d.getDiffView());
|
||||||
p.emailStrategy(d.emailStrategy);
|
p.emailStrategy(d.emailStrategy);
|
||||||
@@ -109,6 +110,9 @@ public class GeneralPreferences extends JavaScriptObject {
|
|||||||
public final native boolean muteCommonPathPrefixes()
|
public final native boolean muteCommonPathPrefixes()
|
||||||
/*-{ return this.mute_common_path_prefixes || false }-*/;
|
/*-{ return this.mute_common_path_prefixes || false }-*/;
|
||||||
|
|
||||||
|
public final native boolean signedOffBy()
|
||||||
|
/*-{ return this.signed_off_by || false }-*/;
|
||||||
|
|
||||||
public final ReviewCategoryStrategy reviewCategoryStrategy() {
|
public final ReviewCategoryStrategy reviewCategoryStrategy() {
|
||||||
String s = reviewCategeoryStrategyRaw();
|
String s = reviewCategeoryStrategyRaw();
|
||||||
return s != null ? ReviewCategoryStrategy.valueOf(s) : ReviewCategoryStrategy.NONE;
|
return s != null ? ReviewCategoryStrategy.valueOf(s) : ReviewCategoryStrategy.NONE;
|
||||||
@@ -176,6 +180,9 @@ public class GeneralPreferences extends JavaScriptObject {
|
|||||||
public final native void muteCommonPathPrefixes(boolean s)
|
public final native void muteCommonPathPrefixes(boolean s)
|
||||||
/*-{ this.mute_common_path_prefixes = s }-*/;
|
/*-{ this.mute_common_path_prefixes = s }-*/;
|
||||||
|
|
||||||
|
public final native void signedOffBy(boolean s)
|
||||||
|
/*-{ this.signed_off_by = s }-*/;
|
||||||
|
|
||||||
public final void reviewCategoryStrategy(ReviewCategoryStrategy s) {
|
public final void reviewCategoryStrategy(ReviewCategoryStrategy s) {
|
||||||
reviewCategoryStrategyRaw(s != null ? s.toString() : null);
|
reviewCategoryStrategyRaw(s != null ? s.toString() : null);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ public interface AccountConstants extends Constants {
|
|||||||
String showSizeBarInChangeTable();
|
String showSizeBarInChangeTable();
|
||||||
String showLegacycidInChangeTable();
|
String showLegacycidInChangeTable();
|
||||||
String muteCommonPathPrefixes();
|
String muteCommonPathPrefixes();
|
||||||
|
String signedOffBy();
|
||||||
String myMenu();
|
String myMenu();
|
||||||
String myMenuInfo();
|
String myMenuInfo();
|
||||||
String myMenuName();
|
String myMenuName();
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ showRelativeDateInChangeTable = Show Relative Dates In Changes Table
|
|||||||
showSizeBarInChangeTable = Show Change Sizes As Colored Bars
|
showSizeBarInChangeTable = Show Change Sizes As Colored Bars
|
||||||
showLegacycidInChangeTable = Show Change Number In Changes Table
|
showLegacycidInChangeTable = Show Change Number In Changes Table
|
||||||
muteCommonPathPrefixes = Mute Common Path Prefixes In File List
|
muteCommonPathPrefixes = Mute Common Path Prefixes In File List
|
||||||
|
signedOffBy = Insert Signed-off-by Footer For Inline Edit Changes
|
||||||
myMenu = My Menu
|
myMenu = My Menu
|
||||||
myMenuInfo = \
|
myMenuInfo = \
|
||||||
Menu items for the 'My' top level menu. \
|
Menu items for the 'My' top level menu. \
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ public class MyPreferencesScreen extends SettingsScreen {
|
|||||||
private CheckBox sizeBarInChangeTable;
|
private CheckBox sizeBarInChangeTable;
|
||||||
private CheckBox legacycidInChangeTable;
|
private CheckBox legacycidInChangeTable;
|
||||||
private CheckBox muteCommonPathPrefixes;
|
private CheckBox muteCommonPathPrefixes;
|
||||||
|
private CheckBox signedOffBy;
|
||||||
private ListBox maximumPageSize;
|
private ListBox maximumPageSize;
|
||||||
private ListBox dateFormat;
|
private ListBox dateFormat;
|
||||||
private ListBox timeFormat;
|
private ListBox timeFormat;
|
||||||
@@ -152,9 +153,10 @@ public class MyPreferencesScreen extends SettingsScreen {
|
|||||||
sizeBarInChangeTable = new CheckBox(Util.C.showSizeBarInChangeTable());
|
sizeBarInChangeTable = new CheckBox(Util.C.showSizeBarInChangeTable());
|
||||||
legacycidInChangeTable = new CheckBox(Util.C.showLegacycidInChangeTable());
|
legacycidInChangeTable = new CheckBox(Util.C.showLegacycidInChangeTable());
|
||||||
muteCommonPathPrefixes = new CheckBox(Util.C.muteCommonPathPrefixes());
|
muteCommonPathPrefixes = new CheckBox(Util.C.muteCommonPathPrefixes());
|
||||||
|
signedOffBy = new CheckBox(Util.C.signedOffBy());
|
||||||
|
|
||||||
boolean flashClippy = !UserAgent.hasJavaScriptClipboard() && UserAgent.Flash.isInstalled();
|
boolean flashClippy = !UserAgent.hasJavaScriptClipboard() && UserAgent.Flash.isInstalled();
|
||||||
final Grid formGrid = new Grid(11 + (flashClippy ? 1 : 0), 2);
|
final Grid formGrid = new Grid(12 + (flashClippy ? 1 : 0), 2);
|
||||||
|
|
||||||
int row = 0;
|
int row = 0;
|
||||||
formGrid.setText(row, labelIdx, "");
|
formGrid.setText(row, labelIdx, "");
|
||||||
@@ -197,6 +199,9 @@ public class MyPreferencesScreen extends SettingsScreen {
|
|||||||
|
|
||||||
formGrid.setText(row, labelIdx, Util.C.emailFieldLabel());
|
formGrid.setText(row, labelIdx, Util.C.emailFieldLabel());
|
||||||
formGrid.setWidget(row, fieldIdx, emailStrategy);
|
formGrid.setWidget(row, fieldIdx, emailStrategy);
|
||||||
|
|
||||||
|
formGrid.setText(row, labelIdx, "");
|
||||||
|
formGrid.setWidget(row, fieldIdx, signedOffBy);
|
||||||
row++;
|
row++;
|
||||||
|
|
||||||
formGrid.setText(row, labelIdx, Util.C.diffViewLabel());
|
formGrid.setText(row, labelIdx, Util.C.diffViewLabel());
|
||||||
@@ -228,6 +233,7 @@ public class MyPreferencesScreen extends SettingsScreen {
|
|||||||
e.listenTo(sizeBarInChangeTable);
|
e.listenTo(sizeBarInChangeTable);
|
||||||
e.listenTo(legacycidInChangeTable);
|
e.listenTo(legacycidInChangeTable);
|
||||||
e.listenTo(muteCommonPathPrefixes);
|
e.listenTo(muteCommonPathPrefixes);
|
||||||
|
e.listenTo(signedOffBy);
|
||||||
e.listenTo(diffView);
|
e.listenTo(diffView);
|
||||||
e.listenTo(reviewCategoryStrategy);
|
e.listenTo(reviewCategoryStrategy);
|
||||||
e.listenTo(emailStrategy);
|
e.listenTo(emailStrategy);
|
||||||
@@ -260,6 +266,7 @@ public class MyPreferencesScreen extends SettingsScreen {
|
|||||||
sizeBarInChangeTable.setEnabled(on);
|
sizeBarInChangeTable.setEnabled(on);
|
||||||
legacycidInChangeTable.setEnabled(on);
|
legacycidInChangeTable.setEnabled(on);
|
||||||
muteCommonPathPrefixes.setEnabled(on);
|
muteCommonPathPrefixes.setEnabled(on);
|
||||||
|
signedOffBy.setEnabled(on);
|
||||||
reviewCategoryStrategy.setEnabled(on);
|
reviewCategoryStrategy.setEnabled(on);
|
||||||
diffView.setEnabled(on);
|
diffView.setEnabled(on);
|
||||||
emailStrategy.setEnabled(on);
|
emailStrategy.setEnabled(on);
|
||||||
@@ -277,6 +284,7 @@ public class MyPreferencesScreen extends SettingsScreen {
|
|||||||
sizeBarInChangeTable.setValue(p.sizeBarInChangeTable());
|
sizeBarInChangeTable.setValue(p.sizeBarInChangeTable());
|
||||||
legacycidInChangeTable.setValue(p.legacycidInChangeTable());
|
legacycidInChangeTable.setValue(p.legacycidInChangeTable());
|
||||||
muteCommonPathPrefixes.setValue(p.muteCommonPathPrefixes());
|
muteCommonPathPrefixes.setValue(p.muteCommonPathPrefixes());
|
||||||
|
signedOffBy.setValue(p.signedOffBy());
|
||||||
setListBox(reviewCategoryStrategy,
|
setListBox(reviewCategoryStrategy,
|
||||||
GeneralPreferencesInfo.ReviewCategoryStrategy.NONE,
|
GeneralPreferencesInfo.ReviewCategoryStrategy.NONE,
|
||||||
p.reviewCategoryStrategy());
|
p.reviewCategoryStrategy());
|
||||||
@@ -363,6 +371,7 @@ public class MyPreferencesScreen extends SettingsScreen {
|
|||||||
p.sizeBarInChangeTable(sizeBarInChangeTable.getValue());
|
p.sizeBarInChangeTable(sizeBarInChangeTable.getValue());
|
||||||
p.legacycidInChangeTable(legacycidInChangeTable.getValue());
|
p.legacycidInChangeTable(legacycidInChangeTable.getValue());
|
||||||
p.muteCommonPathPrefixes(muteCommonPathPrefixes.getValue());
|
p.muteCommonPathPrefixes(muteCommonPathPrefixes.getValue());
|
||||||
|
p.signedOffBy(signedOffBy.getValue());
|
||||||
p.reviewCategoryStrategy(getListBox(reviewCategoryStrategy,
|
p.reviewCategoryStrategy(getListBox(reviewCategoryStrategy,
|
||||||
ReviewCategoryStrategy.NONE,
|
ReviewCategoryStrategy.NONE,
|
||||||
ReviewCategoryStrategy.values()));
|
ReviewCategoryStrategy.values()));
|
||||||
|
|||||||
@@ -14,11 +14,14 @@
|
|||||||
|
|
||||||
package com.google.gerrit.server.change;
|
package com.google.gerrit.server.change;
|
||||||
|
|
||||||
|
import static org.eclipse.jgit.lib.Constants.SIGNED_OFF_BY_TAG;
|
||||||
|
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.gerrit.common.TimeUtil;
|
import com.google.gerrit.common.TimeUtil;
|
||||||
import com.google.gerrit.common.data.Capable;
|
import com.google.gerrit.common.data.Capable;
|
||||||
import com.google.gerrit.extensions.client.ChangeStatus;
|
import com.google.gerrit.extensions.client.ChangeStatus;
|
||||||
|
import com.google.gerrit.extensions.client.GeneralPreferencesInfo;
|
||||||
import com.google.gerrit.extensions.common.ChangeInfo;
|
import com.google.gerrit.extensions.common.ChangeInfo;
|
||||||
import com.google.gerrit.extensions.common.ChangeInput;
|
import com.google.gerrit.extensions.common.ChangeInput;
|
||||||
import com.google.gerrit.extensions.restapi.AuthException;
|
import com.google.gerrit.extensions.restapi.AuthException;
|
||||||
@@ -41,6 +44,9 @@ import com.google.gerrit.server.GerritPersonIdent;
|
|||||||
import com.google.gerrit.server.IdentifiedUser;
|
import com.google.gerrit.server.IdentifiedUser;
|
||||||
import com.google.gerrit.server.PatchSetUtil;
|
import com.google.gerrit.server.PatchSetUtil;
|
||||||
import com.google.gerrit.server.Sequences;
|
import com.google.gerrit.server.Sequences;
|
||||||
|
import com.google.gerrit.server.account.AccountCache;
|
||||||
|
import com.google.gerrit.server.account.AccountState;
|
||||||
|
import com.google.gerrit.server.config.AnonymousCowardName;
|
||||||
import com.google.gerrit.server.config.GerritServerConfig;
|
import com.google.gerrit.server.config.GerritServerConfig;
|
||||||
import com.google.gerrit.server.git.BatchUpdate;
|
import com.google.gerrit.server.git.BatchUpdate;
|
||||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||||
@@ -79,8 +85,10 @@ import java.util.TimeZone;
|
|||||||
public class CreateChange implements
|
public class CreateChange implements
|
||||||
RestModifyView<TopLevelResource, ChangeInput> {
|
RestModifyView<TopLevelResource, ChangeInput> {
|
||||||
|
|
||||||
|
private final String anonymousCowardName;
|
||||||
private final Provider<ReviewDb> db;
|
private final Provider<ReviewDb> db;
|
||||||
private final GitRepositoryManager gitManager;
|
private final GitRepositoryManager gitManager;
|
||||||
|
private final AccountCache accountCache;
|
||||||
private final Sequences seq;
|
private final Sequences seq;
|
||||||
private final TimeZone serverTimeZone;
|
private final TimeZone serverTimeZone;
|
||||||
private final Provider<CurrentUser> user;
|
private final Provider<CurrentUser> user;
|
||||||
@@ -93,8 +101,10 @@ public class CreateChange implements
|
|||||||
private final boolean allowDrafts;
|
private final boolean allowDrafts;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
CreateChange(Provider<ReviewDb> db,
|
CreateChange(@AnonymousCowardName String anonymousCowardName,
|
||||||
|
Provider<ReviewDb> db,
|
||||||
GitRepositoryManager gitManager,
|
GitRepositoryManager gitManager,
|
||||||
|
AccountCache accountCache,
|
||||||
Sequences seq,
|
Sequences seq,
|
||||||
@GerritPersonIdent PersonIdent myIdent,
|
@GerritPersonIdent PersonIdent myIdent,
|
||||||
Provider<CurrentUser> user,
|
Provider<CurrentUser> user,
|
||||||
@@ -105,8 +115,10 @@ public class CreateChange implements
|
|||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
PatchSetUtil psUtil,
|
PatchSetUtil psUtil,
|
||||||
@GerritServerConfig Config config) {
|
@GerritServerConfig Config config) {
|
||||||
|
this.anonymousCowardName = anonymousCowardName;
|
||||||
this.db = db;
|
this.db = db;
|
||||||
this.gitManager = gitManager;
|
this.gitManager = gitManager;
|
||||||
|
this.accountCache = accountCache;
|
||||||
this.seq = seq;
|
this.seq = seq;
|
||||||
this.serverTimeZone = myIdent.getTimeZone();
|
this.serverTimeZone = myIdent.getTimeZone();
|
||||||
this.user = user;
|
this.user = user;
|
||||||
@@ -204,6 +216,9 @@ public class CreateChange implements
|
|||||||
Timestamp now = TimeUtil.nowTs();
|
Timestamp now = TimeUtil.nowTs();
|
||||||
IdentifiedUser me = user.get().asIdentifiedUser();
|
IdentifiedUser me = user.get().asIdentifiedUser();
|
||||||
PersonIdent author = me.newCommitterIdent(now, serverTimeZone);
|
PersonIdent author = me.newCommitterIdent(now, serverTimeZone);
|
||||||
|
AccountState account = accountCache.get(me.getAccountId());
|
||||||
|
GeneralPreferencesInfo info =
|
||||||
|
account.getAccount().getGeneralPreferencesInfo();
|
||||||
|
|
||||||
try (ObjectInserter oi = git.newObjectInserter()) {
|
try (ObjectInserter oi = git.newObjectInserter()) {
|
||||||
ObjectId treeId =
|
ObjectId treeId =
|
||||||
@@ -211,6 +226,11 @@ public class CreateChange implements
|
|||||||
ObjectId id = ChangeIdUtil.computeChangeId(treeId,
|
ObjectId id = ChangeIdUtil.computeChangeId(treeId,
|
||||||
mergeTip, author, author, input.subject);
|
mergeTip, author, author, input.subject);
|
||||||
String commitMessage = ChangeIdUtil.insertId(input.subject, id);
|
String commitMessage = ChangeIdUtil.insertId(input.subject, id);
|
||||||
|
if (Boolean.TRUE.equals(info.signedOffBy)) {
|
||||||
|
commitMessage += String.format("%s%s",
|
||||||
|
SIGNED_OFF_BY_TAG,
|
||||||
|
account.getAccount().getNameEmail(anonymousCowardName));
|
||||||
|
}
|
||||||
|
|
||||||
RevCommit c = newCommit(oi, rw, author, mergeTip, commitMessage);
|
RevCommit c = newCommit(oi, rw, author, mergeTip, commitMessage);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user