Persisting users diff formatting preferences

When a user changes diff formatting preferences and clicks the
Update button the preferences will then be persisted in the database.
This way a user doesn't have to adjust the diff formatting
preferences each time it switches to the next file diff.

Bug: issue 579
Change-Id: I52cd1dcf702ed04046b236228f994fb9042243d9
Signed-off-by: Sasa Zivkov <sasa.zivkov@sap.com>
This commit is contained in:
Sasa Zivkov
2010-06-14 15:00:05 +02:00
committed by Shawn O. Pearce
parent 5a00b3161d
commit 077b2c5dd0
25 changed files with 512 additions and 154 deletions

View File

@@ -15,6 +15,7 @@
package com.google.gerrit.server;
import com.google.gerrit.reviewdb.Account;
import com.google.gerrit.reviewdb.AccountDiffPreference;
import com.google.gerrit.reviewdb.AccountGroup;
import com.google.gerrit.reviewdb.AccountProjectWatch;
import com.google.gerrit.reviewdb.Change;
@@ -178,6 +179,20 @@ public class IdentifiedUser extends CurrentUser {
return state().getAccount();
}
public AccountDiffPreference getAccountDiffPreference() {
AccountDiffPreference diffPref;
try {
diffPref = dbProvider.get().accountDiffPreferences().get(getAccountId());
if (diffPref == null) {
diffPref = AccountDiffPreference.createDefault(getAccountId());
}
} catch (OrmException e) {
log.warn("Cannot query account diff preferences", e);
diffPref = AccountDiffPreference.createDefault(getAccountId());
}
return diffPref;
}
public Set<String> getEmailAddresses() {
if (emailAddresses == null) {
emailAddresses = state().getEmailAddresses();

View File

@@ -14,9 +14,9 @@
package com.google.gerrit.server.patch;
import com.google.gerrit.common.data.PatchScriptSettings.Whitespace;
import com.google.gerrit.reviewdb.Change;
import com.google.gerrit.reviewdb.PatchSet;
import com.google.gerrit.reviewdb.AccountDiffPreference.Whitespace;
/** Provides a cached list of {@link PatchListEntry}. */
public interface PatchListCache {

View File

@@ -14,12 +14,11 @@
package com.google.gerrit.server.patch;
import static com.google.gerrit.common.data.PatchScriptSettings.Whitespace.IGNORE_NONE;
import com.google.gerrit.common.data.PatchScriptSettings.Whitespace;
import com.google.gerrit.reviewdb.Change;
import com.google.gerrit.reviewdb.PatchSet;
import com.google.gerrit.reviewdb.Project;
import com.google.gerrit.reviewdb.AccountDiffPreference.Whitespace;
import com.google.gerrit.server.cache.Cache;
import com.google.gerrit.server.cache.CacheModule;
import com.google.gerrit.server.cache.EvictionPolicy;
@@ -116,7 +115,7 @@ public class PatchListCacheImpl implements PatchListCache {
}
public PatchList get(final Change change, final PatchSet patchSet) {
return get(change, patchSet, IGNORE_NONE);
return get(change, patchSet, Whitespace.IGNORE_NONE);
}
public PatchList get(final Change change, final PatchSet patchSet,

View File

@@ -21,8 +21,8 @@ import static org.eclipse.jgit.lib.ObjectIdSerialization.readNotNull;
import static org.eclipse.jgit.lib.ObjectIdSerialization.writeCanBeNull;
import static org.eclipse.jgit.lib.ObjectIdSerialization.writeNotNull;
import com.google.gerrit.common.data.PatchScriptSettings.Whitespace;
import com.google.gerrit.reviewdb.Project;
import com.google.gerrit.reviewdb.AccountDiffPreference.Whitespace;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.ObjectId;

View File

@@ -32,7 +32,7 @@ import java.util.List;
/** A version of the database schema. */
public abstract class SchemaVersion {
/** The current schema version. */
private static final Class<? extends SchemaVersion> C = Schema_37.class;
private static final Class<? extends SchemaVersion> C = Schema_38.class;
public static class Module extends AbstractModule {
@Override

View File

@@ -0,0 +1,67 @@
// 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.server.schema;
import com.google.gerrit.reviewdb.Account;
import com.google.gerrit.reviewdb.AccountDiffPreference;
import com.google.gerrit.reviewdb.ReviewDb;
import com.google.gwtorm.client.OrmException;
import com.google.gwtorm.jdbc.JdbcSchema;
import com.google.inject.Inject;
import com.google.inject.Provider;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class Schema_38 extends SchemaVersion {
@Inject
Schema_38(Provider<Schema_37> prior) {
super(prior);
}
/**
* Migrate the account.default_context column to account_diff_preferences.context column.
* <p>
* Other fields in account_diff_preferences will be filled in with their defaults as
* defined in the {@link AccountDiffPreference#createDefault(com.google.gerrit.reviewdb.Account.Id)}
*/
@Override
protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException,
SQLException {
List<AccountDiffPreference> newPrefs =
new ArrayList<AccountDiffPreference>();
Statement stmt = ((JdbcSchema) db).getConnection().createStatement();
try {
ResultSet result =
stmt.executeQuery("SELECT account_id, default_context"
+ " FROM accounts WHERE default_context <> 10");
while (result.next()) {
int accountId = result.getInt(1);
short defaultContext = result.getShort(2);
AccountDiffPreference diffPref = AccountDiffPreference.createDefault(new Account.Id(accountId));
diffPref.setContext(defaultContext);
newPrefs.add(diffPref);
}
} finally {
stmt.close();
}
db.accountDiffPreferences().insert(newPrefs);
}
}