Refactoring AccountDiffPreference vs PatchScriptSettings+PrettySettings
There was some code duplication in these classes. This refactoring removes the PatchScriptSettings and PrettySettings classes and uses AccountDiffPreference instead. Issue: bug 629 Change-Id: I57ab1522b0023503d0cbd29620236ea68b7717ed Signed-off-by: Sasa Zivkov <zivkov@gmail.com>
This commit is contained in:
parent
228e8dd509
commit
8e33d76853
@ -16,6 +16,7 @@ package com.google.gerrit.common.data;
|
||||
|
||||
import com.google.gerrit.common.auth.SignInRequired;
|
||||
import com.google.gerrit.reviewdb.Account;
|
||||
import com.google.gerrit.reviewdb.AccountDiffPreference;
|
||||
import com.google.gerrit.reviewdb.ApprovalCategoryValue;
|
||||
import com.google.gerrit.reviewdb.Change;
|
||||
import com.google.gerrit.reviewdb.Patch;
|
||||
@ -34,7 +35,7 @@ import java.util.Set;
|
||||
@RpcImpl(version = Version.V2_0)
|
||||
public interface PatchDetailService extends RemoteJsonService {
|
||||
void patchScript(Patch.Key key, PatchSet.Id a, PatchSet.Id b,
|
||||
PatchScriptSettings settings, AsyncCallback<PatchScript> callback);
|
||||
AccountDiffPreference diffPrefs, AsyncCallback<PatchScript> callback);
|
||||
|
||||
@SignInRequired
|
||||
void saveDraft(PatchLineComment comment,
|
||||
|
@ -17,7 +17,6 @@ package com.google.gerrit.common.data;
|
||||
import com.google.gerrit.prettify.client.ClientSideFormatter;
|
||||
import com.google.gerrit.prettify.common.EditList;
|
||||
import com.google.gerrit.prettify.common.PrettyFormatter;
|
||||
import com.google.gerrit.prettify.common.PrettySettings;
|
||||
import com.google.gerrit.prettify.common.SparseFileContent;
|
||||
import com.google.gerrit.prettify.common.SparseHtmlFile;
|
||||
import com.google.gerrit.reviewdb.AccountDiffPreference;
|
||||
@ -40,7 +39,7 @@ public class PatchScript {
|
||||
protected String oldName;
|
||||
protected String newName;
|
||||
protected List<String> header;
|
||||
protected PatchScriptSettings settings;
|
||||
protected AccountDiffPreference diffPrefs;
|
||||
protected SparseFileContent a;
|
||||
protected SparseFileContent b;
|
||||
protected List<Edit> edits;
|
||||
@ -52,7 +51,7 @@ public class PatchScript {
|
||||
protected boolean intralineDifference;
|
||||
|
||||
public PatchScript(final Change.Key ck, final ChangeType ct, final String on,
|
||||
final String nn, final List<String> h, final PatchScriptSettings s,
|
||||
final String nn, final List<String> h, final AccountDiffPreference dp,
|
||||
final SparseFileContent ca, final SparseFileContent cb,
|
||||
final List<Edit> e, final DisplayMethod ma, final DisplayMethod mb,
|
||||
final CommentDetail cd, final List<Patch> hist, final boolean hf,
|
||||
@ -62,7 +61,7 @@ public class PatchScript {
|
||||
oldName = on;
|
||||
newName = nn;
|
||||
header = h;
|
||||
settings = s;
|
||||
diffPrefs = dp;
|
||||
a = ca;
|
||||
b = cb;
|
||||
edits = e;
|
||||
@ -113,12 +112,12 @@ public class PatchScript {
|
||||
return history;
|
||||
}
|
||||
|
||||
public PatchScriptSettings getSettings() {
|
||||
return settings;
|
||||
public AccountDiffPreference getDiffPrefs() {
|
||||
return diffPrefs;
|
||||
}
|
||||
|
||||
public void setSettings(PatchScriptSettings s) {
|
||||
settings = s;
|
||||
public void setDiffPrefs(AccountDiffPreference dp) {
|
||||
diffPrefs = dp;
|
||||
}
|
||||
|
||||
public boolean isHugeFile() {
|
||||
@ -126,7 +125,7 @@ public class PatchScript {
|
||||
}
|
||||
|
||||
public boolean isIgnoreWhitespace() {
|
||||
return settings.getWhitespace() != Whitespace.IGNORE_NONE;
|
||||
return diffPrefs.getIgnoreWhitespace() != Whitespace.IGNORE_NONE;
|
||||
}
|
||||
|
||||
public boolean hasIntralineDifference() {
|
||||
@ -142,12 +141,12 @@ public class PatchScript {
|
||||
}
|
||||
|
||||
public SparseHtmlFile getSparseHtmlFileA() {
|
||||
PrettySettings s = new PrettySettings(settings.getPrettySettings());
|
||||
s.setFileName(a.getPath());
|
||||
s.setShowWhiteSpaceErrors(false);
|
||||
AccountDiffPreference dp = new AccountDiffPreference(diffPrefs);
|
||||
dp.setShowWhitespaceErrors(false);
|
||||
|
||||
PrettyFormatter f = ClientSideFormatter.FACTORY.get();
|
||||
f.setPrettySettings(s);
|
||||
f.setDiffPrefs(dp);
|
||||
f.setFileName(a.getPath());
|
||||
f.setEditFilter(PrettyFormatter.A);
|
||||
f.setEditList(edits);
|
||||
f.format(a);
|
||||
@ -155,15 +154,15 @@ public class PatchScript {
|
||||
}
|
||||
|
||||
public SparseHtmlFile getSparseHtmlFileB() {
|
||||
PrettySettings s = new PrettySettings(settings.getPrettySettings());
|
||||
s.setFileName(b.getPath());
|
||||
AccountDiffPreference dp = new AccountDiffPreference(diffPrefs);
|
||||
|
||||
PrettyFormatter f = ClientSideFormatter.FACTORY.get();
|
||||
f.setPrettySettings(s);
|
||||
f.setDiffPrefs(dp);
|
||||
f.setFileName(b.getPath());
|
||||
f.setEditFilter(PrettyFormatter.B);
|
||||
f.setEditList(edits);
|
||||
|
||||
if (s.isSyntaxHighlighting() && a.isWholeFile() && !b.isWholeFile()) {
|
||||
if (dp.isSyntaxHighlighting() && a.isWholeFile() && !b.isWholeFile()) {
|
||||
f.format(b.apply(a, edits));
|
||||
} else {
|
||||
f.format(b);
|
||||
@ -176,7 +175,7 @@ public class PatchScript {
|
||||
}
|
||||
|
||||
public Iterable<EditList.Hunk> getHunks() {
|
||||
int ctx = settings.getContext();
|
||||
int ctx = diffPrefs.getContext();
|
||||
if (ctx == AccountDiffPreference.WHOLE_FILE_CONTEXT) {
|
||||
ctx = Math.max(a.size(), b.size());
|
||||
}
|
||||
|
@ -1,63 +0,0 @@
|
||||
// Copyright (C) 2009 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.common.data;
|
||||
|
||||
import com.google.gerrit.prettify.common.PrettySettings;
|
||||
import com.google.gerrit.reviewdb.AccountDiffPreference;
|
||||
import com.google.gerrit.reviewdb.AccountDiffPreference.Whitespace;
|
||||
|
||||
public class PatchScriptSettings {
|
||||
protected int context;
|
||||
protected Whitespace whitespace;
|
||||
protected PrettySettings pretty;
|
||||
|
||||
public PatchScriptSettings() {
|
||||
context = AccountDiffPreference.DEFAULT_CONTEXT;
|
||||
whitespace = Whitespace.IGNORE_NONE;
|
||||
pretty = new PrettySettings();
|
||||
}
|
||||
|
||||
public PatchScriptSettings(final PatchScriptSettings s) {
|
||||
context = s.context;
|
||||
whitespace = s.whitespace;
|
||||
pretty = new PrettySettings(s.pretty);
|
||||
}
|
||||
|
||||
public PrettySettings getPrettySettings() {
|
||||
return pretty;
|
||||
}
|
||||
|
||||
public void setPrettySettings(PrettySettings s) {
|
||||
pretty = s;
|
||||
}
|
||||
|
||||
public int getContext() {
|
||||
return context;
|
||||
}
|
||||
|
||||
public void setContext(final int ctx) {
|
||||
assert 0 <= ctx || ctx == AccountDiffPreference.WHOLE_FILE_CONTEXT;
|
||||
context = ctx;
|
||||
}
|
||||
|
||||
public Whitespace getWhitespace() {
|
||||
return whitespace;
|
||||
}
|
||||
|
||||
public void setWhitespace(final Whitespace ws) {
|
||||
assert ws != null;
|
||||
whitespace = ws;
|
||||
}
|
||||
}
|
@ -27,7 +27,6 @@ import com.google.gerrit.client.ui.InlineHyperlink;
|
||||
import com.google.gerrit.client.ui.Screen;
|
||||
import com.google.gerrit.common.PageLinks;
|
||||
import com.google.gerrit.common.data.PatchScript;
|
||||
import com.google.gerrit.common.data.PatchScriptSettings;
|
||||
import com.google.gerrit.common.data.PatchSetDetail;
|
||||
import com.google.gerrit.prettify.client.ClientSideFormatter;
|
||||
import com.google.gerrit.prettify.common.PrettyFactory;
|
||||
@ -81,9 +80,9 @@ public abstract class PatchScreen extends Screen implements
|
||||
public Unified(final Patch.Key id, final int patchIndex,
|
||||
final PatchSetDetail patchSetDetail, final PatchTable patchTable) {
|
||||
super(id, patchIndex, patchSetDetail, patchTable);
|
||||
final PatchScriptSettings s = settingsPanel.getValue();
|
||||
s.getPrettySettings().setSyntaxHighlighting(false);
|
||||
settingsPanel.setValue(s);
|
||||
final AccountDiffPreference dp = settingsPanel.getValue();
|
||||
dp.setSyntaxHighlighting(false);
|
||||
settingsPanel.setValue(dp);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -181,9 +180,9 @@ public abstract class PatchScreen extends Screen implements
|
||||
|
||||
settingsPanel = new PatchScriptSettingsPanel();
|
||||
settingsPanel
|
||||
.addValueChangeHandler(new ValueChangeHandler<PatchScriptSettings>() {
|
||||
.addValueChangeHandler(new ValueChangeHandler<AccountDiffPreference>() {
|
||||
@Override
|
||||
public void onValueChange(ValueChangeEvent<PatchScriptSettings> event) {
|
||||
public void onValueChange(ValueChangeEvent<AccountDiffPreference> event) {
|
||||
update(event.getValue());
|
||||
}
|
||||
});
|
||||
@ -206,9 +205,9 @@ public abstract class PatchScreen extends Screen implements
|
||||
lastScript = null;
|
||||
}
|
||||
|
||||
private void update(PatchScriptSettings s) {
|
||||
if (lastScript != null && canReuse(s, lastScript)) {
|
||||
lastScript.setSettings(s);
|
||||
private void update(AccountDiffPreference dp) {
|
||||
if (lastScript != null && canReuse(dp, lastScript)) {
|
||||
lastScript.setDiffPrefs(dp);
|
||||
RpcStatus.INSTANCE.onRpcStart(null);
|
||||
settingsPanel.setEnabled(false);
|
||||
DeferredCommand.addCommand(new Command() {
|
||||
@ -226,24 +225,24 @@ public abstract class PatchScreen extends Screen implements
|
||||
}
|
||||
}
|
||||
|
||||
private boolean canReuse(PatchScriptSettings s, PatchScript last) {
|
||||
if (last.getSettings().getWhitespace() != s.getWhitespace()) {
|
||||
private boolean canReuse(AccountDiffPreference dp, PatchScript last) {
|
||||
if (last.getDiffPrefs().getIgnoreWhitespace() != dp.getIgnoreWhitespace()) {
|
||||
// Whitespace ignore setting requires server computation.
|
||||
return false;
|
||||
}
|
||||
|
||||
final int ctx = s.getContext();
|
||||
final int ctx = dp.getContext();
|
||||
if (ctx == AccountDiffPreference.WHOLE_FILE_CONTEXT && !last.getA().isWholeFile()) {
|
||||
// We don't have the entire file here, so we can't render it.
|
||||
return false;
|
||||
}
|
||||
|
||||
if (last.getSettings().getContext() < ctx && !last.getA().isWholeFile()) {
|
||||
if (last.getDiffPrefs().getContext() < ctx && !last.getA().isWholeFile()) {
|
||||
// We don't have sufficient context.
|
||||
return false;
|
||||
}
|
||||
|
||||
if (s.getPrettySettings().isSyntaxHighlighting()
|
||||
if (dp.isSyntaxHighlighting()
|
||||
&& !last.getA().isWholeFile()) {
|
||||
// We need the whole file to syntax highlight accurately.
|
||||
return false;
|
||||
|
@ -18,8 +18,6 @@ import com.google.gerrit.client.Gerrit;
|
||||
import com.google.gerrit.client.account.Util;
|
||||
import com.google.gerrit.client.rpc.GerritCallback;
|
||||
import com.google.gerrit.client.ui.NpIntTextBox;
|
||||
import com.google.gerrit.common.data.PatchScriptSettings;
|
||||
import com.google.gerrit.prettify.common.PrettySettings;
|
||||
import com.google.gerrit.reviewdb.AccountDiffPreference;
|
||||
import com.google.gerrit.reviewdb.AccountDiffPreference.Whitespace;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
@ -44,13 +42,13 @@ import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwtjsonrpc.client.VoidResult;
|
||||
|
||||
public class PatchScriptSettingsPanel extends Composite implements
|
||||
HasValueChangeHandlers<PatchScriptSettings> {
|
||||
HasValueChangeHandlers<AccountDiffPreference> {
|
||||
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
|
||||
|
||||
interface MyUiBinder extends UiBinder<Widget, PatchScriptSettingsPanel> {
|
||||
}
|
||||
|
||||
private PatchScriptSettings value;
|
||||
private AccountDiffPreference value;
|
||||
private boolean enableIntralineDifference = true;
|
||||
private boolean enableSmallFileFeatures = true;
|
||||
|
||||
@ -118,15 +116,15 @@ public class PatchScriptSettingsPanel extends Composite implements
|
||||
colWidth.addKeyPressHandler(onEnter);
|
||||
|
||||
if (Gerrit.isSignedIn() && Gerrit.getAccountDiffPreference() != null) {
|
||||
setValue(createPatchScriptSettings(Gerrit.getAccountDiffPreference()));
|
||||
setValue(Gerrit.getAccountDiffPreference());
|
||||
} else {
|
||||
setValue(new PatchScriptSettings());
|
||||
setValue(AccountDiffPreference.createDefault(null));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerRegistration addValueChangeHandler(
|
||||
ValueChangeHandler<PatchScriptSettings> handler) {
|
||||
ValueChangeHandler<AccountDiffPreference> handler) {
|
||||
return super.addHandler(handler, ValueChangeEvent.getType());
|
||||
}
|
||||
|
||||
@ -149,9 +147,7 @@ public class PatchScriptSettingsPanel extends Composite implements
|
||||
public void setEnableSmallFileFeatures(final boolean on) {
|
||||
enableSmallFileFeatures = on;
|
||||
if (enableSmallFileFeatures) {
|
||||
final PrettySettings p = getValue().getPrettySettings();
|
||||
|
||||
syntaxHighlighting.setValue(p.isSyntaxHighlighting());
|
||||
syntaxHighlighting.setValue(value.isSyntaxHighlighting());
|
||||
} else {
|
||||
syntaxHighlighting.setValue(false);
|
||||
}
|
||||
@ -161,8 +157,7 @@ public class PatchScriptSettingsPanel extends Composite implements
|
||||
public void setEnableIntralineDifference(final boolean on) {
|
||||
enableIntralineDifference = on;
|
||||
if (enableIntralineDifference) {
|
||||
final PrettySettings p = getValue().getPrettySettings();
|
||||
intralineDifference.setValue(p.isIntralineDifference());
|
||||
intralineDifference.setValue(value.isIntralineDifference());
|
||||
} else {
|
||||
intralineDifference.setValue(false);
|
||||
}
|
||||
@ -182,28 +177,26 @@ public class PatchScriptSettingsPanel extends Composite implements
|
||||
return reviewed;
|
||||
}
|
||||
|
||||
public PatchScriptSettings getValue() {
|
||||
public AccountDiffPreference getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(final PatchScriptSettings s) {
|
||||
final PrettySettings p = s.getPrettySettings();
|
||||
|
||||
setIgnoreWhitespace(s.getWhitespace());
|
||||
public void setValue(final AccountDiffPreference dp) {
|
||||
setIgnoreWhitespace(dp.getIgnoreWhitespace());
|
||||
if (enableSmallFileFeatures) {
|
||||
syntaxHighlighting.setValue(p.isSyntaxHighlighting());
|
||||
syntaxHighlighting.setValue(dp.isSyntaxHighlighting());
|
||||
} else {
|
||||
syntaxHighlighting.setValue(false);
|
||||
}
|
||||
setContext(s.getContext());
|
||||
setContext(dp.getContext());
|
||||
|
||||
tabWidth.setIntValue(p.getTabSize());
|
||||
colWidth.setIntValue(p.getLineLength());
|
||||
intralineDifference.setValue(p.isIntralineDifference());
|
||||
whitespaceErrors.setValue(p.isShowWhiteSpaceErrors());
|
||||
showTabs.setValue(p.isShowTabs());
|
||||
tabWidth.setIntValue(dp.getTabSize());
|
||||
colWidth.setIntValue(dp.getLineLength());
|
||||
intralineDifference.setValue(dp.isIntralineDifference());
|
||||
whitespaceErrors.setValue(dp.isShowWhitespaceErrors());
|
||||
showTabs.setValue(dp.isShowTabs());
|
||||
|
||||
value = s;
|
||||
value = dp;
|
||||
}
|
||||
|
||||
@UiHandler("update")
|
||||
@ -212,20 +205,18 @@ public class PatchScriptSettingsPanel extends Composite implements
|
||||
}
|
||||
|
||||
private void update() {
|
||||
PatchScriptSettings s = new PatchScriptSettings(getValue());
|
||||
PrettySettings p = s.getPrettySettings();
|
||||
AccountDiffPreference dp = new AccountDiffPreference(value);
|
||||
dp.setIgnoreWhitespace(getIgnoreWhitespace());
|
||||
dp.setContext(getContext());
|
||||
dp.setTabSize(tabWidth.getIntValue());
|
||||
dp.setLineLength(colWidth.getIntValue());
|
||||
dp.setSyntaxHighlighting(syntaxHighlighting.getValue());
|
||||
dp.setIntralineDifference(intralineDifference.getValue());
|
||||
dp.setShowWhitespaceErrors(whitespaceErrors.getValue());
|
||||
dp.setShowTabs(showTabs.getValue());
|
||||
|
||||
s.setWhitespace(getIgnoreWhitespace());
|
||||
s.setContext(getContext());
|
||||
p.setTabSize(tabWidth.getIntValue());
|
||||
p.setLineLength(colWidth.getIntValue());
|
||||
p.setSyntaxHighlighting(syntaxHighlighting.getValue());
|
||||
p.setIntralineDifference(intralineDifference.getValue());
|
||||
p.setShowWhiteSpaceErrors(whitespaceErrors.getValue());
|
||||
p.setShowTabs(showTabs.getValue());
|
||||
|
||||
value = s;
|
||||
fireEvent(new ValueChangeEvent<PatchScriptSettings>(s) {});
|
||||
value = dp;
|
||||
fireEvent(new ValueChangeEvent<AccountDiffPreference>(dp) {});
|
||||
|
||||
if (Gerrit.isSignedIn()) {
|
||||
persistDiffPreferences();
|
||||
@ -234,19 +225,10 @@ public class PatchScriptSettingsPanel extends Composite implements
|
||||
|
||||
private void persistDiffPreferences() {
|
||||
setEnabled(false);
|
||||
final AccountDiffPreference diffPref = new AccountDiffPreference(Gerrit.getUserAccount().getId());
|
||||
diffPref.setIgnoreWhitespace(getIgnoreWhitespace());
|
||||
diffPref.setTabSize(tabWidth.getIntValue());
|
||||
diffPref.setLineLength(colWidth.getIntValue());
|
||||
diffPref.setSyntaxHighlighting(syntaxHighlighting.getValue());
|
||||
diffPref.setShowWhitespaceErrors(whitespaceErrors.getValue());
|
||||
diffPref.setIntralineDifference(intralineDifference.getValue());
|
||||
diffPref.setShowTabs(showTabs.getValue());
|
||||
diffPref.setContext(getContext());
|
||||
Util.ACCOUNT_SVC.changeDiffPreferences(diffPref, new GerritCallback<VoidResult>() {
|
||||
Util.ACCOUNT_SVC.changeDiffPreferences(value, new GerritCallback<VoidResult>() {
|
||||
@Override
|
||||
public void onSuccess(VoidResult result) {
|
||||
Gerrit.setAccountDiffPreference(diffPref);
|
||||
Gerrit.setAccountDiffPreference(value);
|
||||
setEnabled(true);
|
||||
}
|
||||
|
||||
@ -285,7 +267,7 @@ public class PatchScriptSettingsPanel extends Composite implements
|
||||
if (0 <= sel) {
|
||||
return Whitespace.valueOf(ignoreWhitespace.getValue(sel));
|
||||
}
|
||||
return value.getWhitespace();
|
||||
return value.getIgnoreWhitespace();
|
||||
}
|
||||
|
||||
private void setIgnoreWhitespace(Whitespace s) {
|
||||
@ -316,20 +298,4 @@ public class PatchScriptSettingsPanel extends Composite implements
|
||||
}
|
||||
context.setSelectedIndex(0);
|
||||
}
|
||||
|
||||
private PatchScriptSettings createPatchScriptSettings(AccountDiffPreference diffPref) {
|
||||
final PatchScriptSettings s = new PatchScriptSettings();
|
||||
if (diffPref != null) {
|
||||
s.setWhitespace(diffPref.getIgnoreWhitespace());
|
||||
s.setContext(diffPref.getContext());
|
||||
final PrettySettings p = s.getPrettySettings();
|
||||
p.setTabSize(diffPref.getTabSize());
|
||||
p.setLineLength(diffPref.getLineLength());
|
||||
p.setSyntaxHighlighting(diffPref.isSyntaxHighlighting());
|
||||
p.setIntralineDifference(diffPref.isIntralineDifference());
|
||||
p.setShowWhiteSpaceErrors(diffPref.isShowWhitespaceErrors());
|
||||
p.setShowTabs(diffPref.isShowTabs());
|
||||
}
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ public class SideBySideTable extends AbstractPatchContentTable {
|
||||
final ArrayList<PatchLine> lines = new ArrayList<PatchLine>();
|
||||
final SafeHtmlBuilder nc = new SafeHtmlBuilder();
|
||||
final boolean intraline =
|
||||
script.getSettings().getPrettySettings().isIntralineDifference()
|
||||
script.getDiffPrefs().isIntralineDifference()
|
||||
&& script.hasIntralineDifference();
|
||||
|
||||
appendHeader(script, nc);
|
||||
|
@ -133,7 +133,7 @@ public class UnifiedDiffTable extends AbstractPatchContentTable {
|
||||
}
|
||||
|
||||
final boolean syntaxHighlighting =
|
||||
script.getSettings().getPrettySettings().isSyntaxHighlighting();
|
||||
script.getDiffPrefs().isSyntaxHighlighting();
|
||||
final ArrayList<PatchLine> lines = new ArrayList<PatchLine>();
|
||||
for (final EditList.Hunk hunk : script.getHunks()) {
|
||||
appendHunkHeader(nc, hunk);
|
||||
|
@ -20,11 +20,11 @@ import com.google.gerrit.common.data.ApprovalSummarySet;
|
||||
import com.google.gerrit.common.data.ApprovalTypes;
|
||||
import com.google.gerrit.common.data.PatchDetailService;
|
||||
import com.google.gerrit.common.data.PatchScript;
|
||||
import com.google.gerrit.common.data.PatchScriptSettings;
|
||||
import com.google.gerrit.common.errors.NoSuchEntityException;
|
||||
import com.google.gerrit.httpd.rpc.BaseServiceImplementation;
|
||||
import com.google.gerrit.httpd.rpc.Handler;
|
||||
import com.google.gerrit.reviewdb.Account;
|
||||
import com.google.gerrit.reviewdb.AccountDiffPreference;
|
||||
import com.google.gerrit.reviewdb.AccountPatchReview;
|
||||
import com.google.gerrit.reviewdb.ApprovalCategory;
|
||||
import com.google.gerrit.reviewdb.ApprovalCategoryValue;
|
||||
@ -92,13 +92,13 @@ class PatchDetailServiceImpl extends BaseServiceImplementation implements
|
||||
}
|
||||
|
||||
public void patchScript(final Patch.Key patchKey, final PatchSet.Id psa,
|
||||
final PatchSet.Id psb, final PatchScriptSettings s,
|
||||
final PatchSet.Id psb, final AccountDiffPreference dp,
|
||||
final AsyncCallback<PatchScript> callback) {
|
||||
if (psb == null) {
|
||||
callback.onFailure(new NoSuchEntityException());
|
||||
return;
|
||||
}
|
||||
patchScriptFactoryFactory.create(patchKey, psa, psb, s).to(callback);
|
||||
patchScriptFactoryFactory.create(patchKey, psa, psb, dp).to(callback);
|
||||
}
|
||||
|
||||
public void saveDraft(final PatchLineComment comment,
|
||||
|
@ -16,7 +16,6 @@ package com.google.gerrit.httpd.rpc.patch;
|
||||
|
||||
import com.google.gerrit.common.data.CommentDetail;
|
||||
import com.google.gerrit.common.data.PatchScript;
|
||||
import com.google.gerrit.common.data.PatchScriptSettings;
|
||||
import com.google.gerrit.common.data.PatchScript.DisplayMethod;
|
||||
import com.google.gerrit.prettify.common.EditList;
|
||||
import com.google.gerrit.prettify.common.SparseFileContent;
|
||||
@ -66,7 +65,7 @@ class PatchScriptBuilder {
|
||||
|
||||
private Repository db;
|
||||
private Change change;
|
||||
private PatchScriptSettings settings;
|
||||
private AccountDiffPreference diffPrefs;
|
||||
private ObjectId aId;
|
||||
private ObjectId bId;
|
||||
|
||||
@ -92,10 +91,10 @@ class PatchScriptBuilder {
|
||||
this.change = c;
|
||||
}
|
||||
|
||||
void setSettings(final PatchScriptSettings s) {
|
||||
settings = s;
|
||||
void setDiffPrefs(final AccountDiffPreference dp) {
|
||||
diffPrefs = dp;
|
||||
|
||||
context = settings.getContext();
|
||||
context = diffPrefs.getContext();
|
||||
if (context == AccountDiffPreference.WHOLE_FILE_CONTEXT) {
|
||||
context = MAX_CONTEXT;
|
||||
} else if (context > MAX_CONTEXT) {
|
||||
@ -117,7 +116,7 @@ class PatchScriptBuilder {
|
||||
//
|
||||
return new PatchScript(change.getKey(), content.getChangeType(), content
|
||||
.getOldName(), content.getNewName(), content.getHeaderLines(),
|
||||
settings, a.dst, b.dst, Collections.<Edit> emptyList(),
|
||||
diffPrefs, a.dst, b.dst, Collections.<Edit> emptyList(),
|
||||
a.displayMethod, b.displayMethod, comments, history, false, false);
|
||||
}
|
||||
|
||||
@ -150,24 +149,24 @@ class PatchScriptBuilder {
|
||||
// IF the file is really large, we disable things to avoid choking
|
||||
// the browser client.
|
||||
//
|
||||
settings.setContext(Math.min(25, context));
|
||||
settings.getPrettySettings().setSyntaxHighlighting(false);
|
||||
context = settings.getContext();
|
||||
diffPrefs.setContext((short) Math.min(25, context));
|
||||
diffPrefs.setSyntaxHighlighting(false);
|
||||
context = diffPrefs.getContext();
|
||||
hugeFile = true;
|
||||
|
||||
} else if (settings.getPrettySettings().isSyntaxHighlighting()) {
|
||||
} else if (diffPrefs.isSyntaxHighlighting()) {
|
||||
// In order to syntax highlight the file properly we need to
|
||||
// give the client the complete file contents. So force our
|
||||
// context temporarily to the complete file size.
|
||||
//
|
||||
context = MAX_CONTEXT;
|
||||
}
|
||||
packContent(settings.getWhitespace() != Whitespace.IGNORE_NONE);
|
||||
packContent(diffPrefs.getIgnoreWhitespace() != Whitespace.IGNORE_NONE);
|
||||
}
|
||||
|
||||
return new PatchScript(change.getKey(), content.getChangeType(), content
|
||||
.getOldName(), content.getNewName(), content.getHeaderLines(),
|
||||
settings, a.dst, b.dst, edits, a.displayMethod, b.displayMethod,
|
||||
diffPrefs, a.dst, b.dst, edits, a.displayMethod, b.displayMethod,
|
||||
comments, history, hugeFile, intralineDifference);
|
||||
}
|
||||
|
||||
|
@ -16,9 +16,9 @@ package com.google.gerrit.httpd.rpc.patch;
|
||||
|
||||
import com.google.gerrit.common.data.CommentDetail;
|
||||
import com.google.gerrit.common.data.PatchScript;
|
||||
import com.google.gerrit.common.data.PatchScriptSettings;
|
||||
import com.google.gerrit.httpd.rpc.Handler;
|
||||
import com.google.gerrit.reviewdb.Account;
|
||||
import com.google.gerrit.reviewdb.AccountDiffPreference;
|
||||
import com.google.gerrit.reviewdb.Change;
|
||||
import com.google.gerrit.reviewdb.Patch;
|
||||
import com.google.gerrit.reviewdb.PatchLineComment;
|
||||
@ -62,7 +62,7 @@ class PatchScriptFactory extends Handler<PatchScript> {
|
||||
PatchScriptFactory create(Patch.Key patchKey,
|
||||
@Assisted("patchSetA") PatchSet.Id patchSetA,
|
||||
@Assisted("patchSetB") PatchSet.Id patchSetB,
|
||||
PatchScriptSettings settings);
|
||||
AccountDiffPreference diffPrefs);
|
||||
}
|
||||
|
||||
private static final Logger log =
|
||||
@ -79,7 +79,7 @@ class PatchScriptFactory extends Handler<PatchScript> {
|
||||
@Nullable
|
||||
private final PatchSet.Id psa;
|
||||
private final PatchSet.Id psb;
|
||||
private final PatchScriptSettings settings;
|
||||
private final AccountDiffPreference diffPrefs;
|
||||
|
||||
private final PatchSet.Id patchSetId;
|
||||
private final Change.Id changeId;
|
||||
@ -102,7 +102,7 @@ class PatchScriptFactory extends Handler<PatchScript> {
|
||||
@Assisted final Patch.Key patchKey,
|
||||
@Assisted("patchSetA") @Nullable final PatchSet.Id patchSetA,
|
||||
@Assisted("patchSetB") final PatchSet.Id patchSetB,
|
||||
@Assisted final PatchScriptSettings settings) {
|
||||
@Assisted final AccountDiffPreference diffPrefs) {
|
||||
this.repoManager = grm;
|
||||
this.builderFactory = builderFactory;
|
||||
this.patchListCache = patchListCache;
|
||||
@ -113,7 +113,7 @@ class PatchScriptFactory extends Handler<PatchScript> {
|
||||
this.patchKey = patchKey;
|
||||
this.psa = patchSetA;
|
||||
this.psb = patchSetB;
|
||||
this.settings = settings;
|
||||
this.diffPrefs = diffPrefs;
|
||||
|
||||
patchSetId = patchKey.getParentKey();
|
||||
changeId = patchSetId.getParentKey();
|
||||
@ -143,7 +143,7 @@ class PatchScriptFactory extends Handler<PatchScript> {
|
||||
throw new NoSuchChangeException(changeId, e);
|
||||
}
|
||||
try {
|
||||
final PatchList list = listFor(keyFor(settings.getWhitespace()));
|
||||
final PatchList list = listFor(keyFor(diffPrefs.getIgnoreWhitespace()));
|
||||
final boolean intraline = list.hasIntralineDifference();
|
||||
final PatchScriptBuilder b = newBuilder(list, git);
|
||||
final PatchListEntry content = list.get(patchKey.getFileName());
|
||||
@ -172,11 +172,11 @@ class PatchScriptFactory extends Handler<PatchScript> {
|
||||
}
|
||||
|
||||
private PatchScriptBuilder newBuilder(final PatchList list, Repository git) {
|
||||
final PatchScriptSettings s = new PatchScriptSettings(settings);
|
||||
final AccountDiffPreference dp = new AccountDiffPreference(diffPrefs);
|
||||
final PatchScriptBuilder b = builderFactory.get();
|
||||
b.setRepository(git);
|
||||
b.setChange(change);
|
||||
b.setSettings(s);
|
||||
b.setDiffPrefs(dp);
|
||||
b.setTrees(list.getOldId(), list.getNewId());
|
||||
return b;
|
||||
}
|
||||
|
@ -44,6 +44,12 @@ limitations under the License.
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.gerrit</groupId>
|
||||
<artifactId>gerrit-reviewdb</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.gwt</groupId>
|
||||
<artifactId>gwt-user</artifactId>
|
||||
|
@ -52,7 +52,7 @@ public class ClientSideFormatter extends PrettyFormatter {
|
||||
|
||||
@Override
|
||||
protected String prettify(String html, String type) {
|
||||
return go(prettify.getContext(), html, type, settings.getTabSize());
|
||||
return go(prettify.getContext(), html, type, diffPrefs.getTabSize());
|
||||
}
|
||||
|
||||
private static native String go(JavaScriptObject ctx, String srcText,
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
package com.google.gerrit.prettify.common;
|
||||
|
||||
import com.google.gerrit.reviewdb.AccountDiffPreference;
|
||||
import com.google.gwtexpui.safehtml.client.SafeHtml;
|
||||
import com.google.gwtexpui.safehtml.client.SafeHtmlBuilder;
|
||||
|
||||
@ -71,7 +72,8 @@ public abstract class PrettyFormatter implements SparseHtmlFile {
|
||||
protected SparseFileContent content;
|
||||
protected EditFilter side;
|
||||
protected List<Edit> edits;
|
||||
protected PrettySettings settings;
|
||||
protected AccountDiffPreference diffPrefs;
|
||||
protected String fileName;
|
||||
protected Set<Integer> trailingEdits;
|
||||
|
||||
private int col;
|
||||
@ -105,8 +107,12 @@ public abstract class PrettyFormatter implements SparseHtmlFile {
|
||||
edits = all;
|
||||
}
|
||||
|
||||
public void setPrettySettings(PrettySettings how) {
|
||||
settings = how;
|
||||
public void setDiffPrefs(AccountDiffPreference how) {
|
||||
diffPrefs = how;
|
||||
}
|
||||
|
||||
public void setFileName(String fileName) {
|
||||
this.fileName = fileName;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -122,7 +128,7 @@ public abstract class PrettyFormatter implements SparseHtmlFile {
|
||||
|
||||
String html = toHTML(src);
|
||||
|
||||
if (settings.isSyntaxHighlighting() && getFileType() != null
|
||||
if (diffPrefs.isSyntaxHighlighting() && getFileType() != null
|
||||
&& src.isWholeFile()) {
|
||||
// The prettify parsers don't like ' as an entity for the
|
||||
// single quote character. Replace them all out so we don't
|
||||
@ -205,7 +211,7 @@ public abstract class PrettyFormatter implements SparseHtmlFile {
|
||||
cleanText(txt, pos, start);
|
||||
pos = txt.indexOf(';', start + 1) + 1;
|
||||
|
||||
if (settings.getLineLength() <= col) {
|
||||
if (diffPrefs.getLineLength() <= col) {
|
||||
buf.append("<br />");
|
||||
col = 0;
|
||||
}
|
||||
@ -219,14 +225,14 @@ public abstract class PrettyFormatter implements SparseHtmlFile {
|
||||
|
||||
private void cleanText(String txt, int pos, int end) {
|
||||
while (pos < end) {
|
||||
int free = settings.getLineLength() - col;
|
||||
int free = diffPrefs.getLineLength() - col;
|
||||
if (free <= 0) {
|
||||
// The current line is full. Throw an explicit line break
|
||||
// onto the end, and we'll continue on the next line.
|
||||
//
|
||||
buf.append("<br />");
|
||||
col = 0;
|
||||
free = settings.getLineLength();
|
||||
free = diffPrefs.getLineLength();
|
||||
}
|
||||
|
||||
int n = Math.min(end - pos, free);
|
||||
@ -305,7 +311,7 @@ public abstract class PrettyFormatter implements SparseHtmlFile {
|
||||
private String toHTML(SparseFileContent src) {
|
||||
SafeHtml html;
|
||||
|
||||
if (settings.isIntralineDifference()) {
|
||||
if (diffPrefs.isIntralineDifference()) {
|
||||
html = colorLineEdits(src);
|
||||
} else {
|
||||
SafeHtmlBuilder b = new SafeHtmlBuilder();
|
||||
@ -321,7 +327,7 @@ public abstract class PrettyFormatter implements SparseHtmlFile {
|
||||
html = html.replaceAll("\r([^\n])", r);
|
||||
}
|
||||
|
||||
if (settings.isShowWhiteSpaceErrors()) {
|
||||
if (diffPrefs.isShowWhitespaceErrors()) {
|
||||
// We need to do whitespace errors before showing tabs, because
|
||||
// these patterns rely on \t as a literal, before it expands.
|
||||
//
|
||||
@ -329,8 +335,8 @@ public abstract class PrettyFormatter implements SparseHtmlFile {
|
||||
html = showTrailingWhitespace(html);
|
||||
}
|
||||
|
||||
if (settings.isShowTabs()) {
|
||||
String t = 1 < settings.getTabSize() ? "\t" : "";
|
||||
if (diffPrefs.isShowTabs()) {
|
||||
String t = 1 < diffPrefs.getTabSize() ? "\t" : "";
|
||||
html = html.replaceAll("\t", "<span class=\"vt\">\u00BB</span>" + t);
|
||||
}
|
||||
|
||||
@ -496,17 +502,17 @@ public abstract class PrettyFormatter implements SparseHtmlFile {
|
||||
private String expandTabs(String html) {
|
||||
StringBuilder tmp = new StringBuilder();
|
||||
int i = 0;
|
||||
if (settings.isShowTabs()) {
|
||||
if (diffPrefs.isShowTabs()) {
|
||||
i = 1;
|
||||
}
|
||||
for (; i < settings.getTabSize(); i++) {
|
||||
for (; i < diffPrefs.getTabSize(); i++) {
|
||||
tmp.append(" ");
|
||||
}
|
||||
return html.replaceAll("\t", tmp.toString());
|
||||
}
|
||||
|
||||
private String getFileType() {
|
||||
String srcType = settings.getFilename();
|
||||
String srcType = fileName;
|
||||
if (srcType == null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -1,106 +0,0 @@
|
||||
// Copyright (C) 2010 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.prettify.common;
|
||||
|
||||
/** Settings to configure a {@link PrettyFormatter}. */
|
||||
public class PrettySettings {
|
||||
protected String fileName;
|
||||
protected boolean showWhiteSpaceErrors;
|
||||
protected int lineLength;
|
||||
protected int tabSize;
|
||||
protected boolean showTabs;
|
||||
protected boolean syntaxHighlighting;
|
||||
protected boolean intralineDifference;
|
||||
|
||||
public PrettySettings() {
|
||||
showWhiteSpaceErrors = true;
|
||||
lineLength = 100;
|
||||
tabSize = 8;
|
||||
showTabs = true;
|
||||
syntaxHighlighting = true;
|
||||
intralineDifference = true;
|
||||
}
|
||||
|
||||
public PrettySettings(PrettySettings pretty) {
|
||||
fileName = pretty.fileName;
|
||||
showWhiteSpaceErrors = pretty.showWhiteSpaceErrors;
|
||||
lineLength = pretty.lineLength;
|
||||
tabSize = pretty.tabSize;
|
||||
showTabs = pretty.showTabs;
|
||||
syntaxHighlighting = pretty.syntaxHighlighting;
|
||||
intralineDifference = pretty.intralineDifference;
|
||||
}
|
||||
|
||||
public String getFilename() {
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public PrettySettings setFileName(final String name) {
|
||||
fileName = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isShowWhiteSpaceErrors() {
|
||||
return showWhiteSpaceErrors;
|
||||
}
|
||||
|
||||
public PrettySettings setShowWhiteSpaceErrors(final boolean show) {
|
||||
showWhiteSpaceErrors = show;
|
||||
return this;
|
||||
}
|
||||
|
||||
public int getLineLength() {
|
||||
return lineLength;
|
||||
}
|
||||
|
||||
public PrettySettings setLineLength(final int len) {
|
||||
lineLength = len;
|
||||
return this;
|
||||
}
|
||||
|
||||
public int getTabSize() {
|
||||
return tabSize;
|
||||
}
|
||||
|
||||
public PrettySettings setTabSize(final int len) {
|
||||
tabSize = len;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isShowTabs() {
|
||||
return showTabs;
|
||||
}
|
||||
|
||||
public PrettySettings setShowTabs(final boolean show) {
|
||||
showTabs = show;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isSyntaxHighlighting() {
|
||||
return syntaxHighlighting;
|
||||
}
|
||||
|
||||
public void setSyntaxHighlighting(final boolean on) {
|
||||
syntaxHighlighting = on;
|
||||
}
|
||||
|
||||
public boolean isIntralineDifference() {
|
||||
return intralineDifference;
|
||||
}
|
||||
|
||||
public void setIntralineDifference(final boolean on) {
|
||||
intralineDifference = on;
|
||||
}
|
||||
}
|
@ -103,6 +103,18 @@ public class AccountDiffPreference {
|
||||
this.accountId = accountId;
|
||||
}
|
||||
|
||||
public AccountDiffPreference(AccountDiffPreference p) {
|
||||
this.accountId = p.accountId;
|
||||
this.ignoreWhitespace = p.ignoreWhitespace;
|
||||
this.tabSize = p.tabSize;
|
||||
this.lineLength = p.lineLength;
|
||||
this.syntaxHighlighting = p.syntaxHighlighting;
|
||||
this.showWhitespaceErrors = p.showWhitespaceErrors;
|
||||
this.intralineDifference = p.intralineDifference;
|
||||
this.showTabs = p.showTabs;
|
||||
this.context = p.context;
|
||||
}
|
||||
|
||||
public Account.Id getAccountId() {
|
||||
return accountId;
|
||||
}
|
||||
@ -169,7 +181,8 @@ public class AccountDiffPreference {
|
||||
}
|
||||
|
||||
/** Set the number of lines of context when viewing a patch. */
|
||||
public void setContext(final short s) {
|
||||
context = s;
|
||||
public void setContext(final short context) {
|
||||
assert 0 <= context || context == WHOLE_FILE_CONTEXT;
|
||||
this.context = context;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user