
Move c.g.g.rules and c.g.g.audit packages to c.g.g.server package to reflect the real dependencies on server package for these clases. This allows us to move server code related BUILD rules from general package c.g.g to c.g.g.server package. With this small refactoring we can achieve our goal having the BUILD files as close to the sources as possible. Moreover, this non-intrusive change (no core plugins were affected) significantly simplifies the whole build structure as this allows us to eliminate BUILD rule in general c.g.g package. Before this change a developer must study build files to actually understand what parts of codes are controlled by c.g.g/BUILD build file. With this change, it is obvious, because all BUILD files are located as close as possible to the sources they control. This changes also leaves place for improvement. At the moment, the sources can be isolated from the giant java/com/google/gerrit/server rules, the packages can be moved outside of c.g.g.server package and de-coupled from java/com/google/gerrit/server rules, as it was already done with receive, index, metrics and lifecycle packages. These future and further decomposition of java/com/google/gerrit/server rule is beyond of the scope of this change. Change-Id: Iac35422bd9d6ad933c2dded2293c679cdd2aead5
68 lines
2.3 KiB
Java
68 lines
2.3 KiB
Java
// Copyright 2011 Google Inc. All Rights Reserved.
|
|
|
|
package gerrit;
|
|
|
|
import com.google.gerrit.common.data.LabelType;
|
|
import com.google.gerrit.common.data.LabelTypes;
|
|
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
|
import com.google.gerrit.server.query.change.ChangeData;
|
|
import com.google.gerrit.server.rules.StoredValues;
|
|
import com.google.gwtorm.server.OrmException;
|
|
import com.googlecode.prolog_cafe.exceptions.JavaException;
|
|
import com.googlecode.prolog_cafe.exceptions.PrologException;
|
|
import com.googlecode.prolog_cafe.lang.IntegerTerm;
|
|
import com.googlecode.prolog_cafe.lang.ListTerm;
|
|
import com.googlecode.prolog_cafe.lang.Operation;
|
|
import com.googlecode.prolog_cafe.lang.Predicate;
|
|
import com.googlecode.prolog_cafe.lang.Prolog;
|
|
import com.googlecode.prolog_cafe.lang.StructureTerm;
|
|
import com.googlecode.prolog_cafe.lang.SymbolTerm;
|
|
import com.googlecode.prolog_cafe.lang.Term;
|
|
|
|
/** Exports list of {@code commit_label( label('Code-Review', 2), user(12345789) )}. */
|
|
class PRED__load_commit_labels_1 extends Predicate.P1 {
|
|
private static final SymbolTerm sym_commit_label = SymbolTerm.intern("commit_label", 2);
|
|
private static final SymbolTerm sym_label = SymbolTerm.intern("label", 2);
|
|
private static final SymbolTerm sym_user = SymbolTerm.intern("user", 1);
|
|
|
|
PRED__load_commit_labels_1(Term a1, Operation n) {
|
|
arg1 = a1;
|
|
cont = n;
|
|
}
|
|
|
|
@Override
|
|
public Operation exec(Prolog engine) throws PrologException {
|
|
engine.setB0();
|
|
Term a1 = arg1.dereference();
|
|
|
|
Term listHead = Prolog.Nil;
|
|
try {
|
|
ChangeData cd = StoredValues.CHANGE_DATA.get(engine);
|
|
LabelTypes types = cd.getLabelTypes();
|
|
|
|
for (PatchSetApproval a : cd.currentApprovals()) {
|
|
LabelType t = types.byLabel(a.getLabelId());
|
|
if (t == null) {
|
|
continue;
|
|
}
|
|
|
|
StructureTerm labelTerm =
|
|
new StructureTerm(
|
|
sym_label, SymbolTerm.intern(t.getName()), new IntegerTerm(a.getValue()));
|
|
|
|
StructureTerm userTerm =
|
|
new StructureTerm(sym_user, new IntegerTerm(a.getAccountId().get()));
|
|
|
|
listHead = new ListTerm(new StructureTerm(sym_commit_label, labelTerm, userTerm), listHead);
|
|
}
|
|
} catch (OrmException err) {
|
|
throw new JavaException(this, 1, err);
|
|
}
|
|
|
|
if (!a1.unify(listHead, engine.trail)) {
|
|
return engine.fail();
|
|
}
|
|
return cont;
|
|
}
|
|
}
|