Search in sources :

Example 21 with Term

use of com.googlecode.prolog_cafe.lang.Term in project gerrit by GerritCodeReview.

the class PRED_uploader_1 method exec.

@Override
public Operation exec(Prolog engine) throws PrologException {
    engine.setB0();
    Term a1 = arg1.dereference();
    PatchSet patchSet = StoredValues.getPatchSet(engine);
    if (patchSet == null) {
        logger.atSevere().log("Failed to load current patch set of change %s", StoredValues.getChange(engine).getChangeId());
        return engine.fail();
    }
    Account.Id uploaderId = patchSet.uploader();
    if (!a1.unify(new StructureTerm(user, new IntegerTerm(uploaderId.get())), engine.trail)) {
        return engine.fail();
    }
    return cont;
}
Also used : Account(com.google.gerrit.entities.Account) IntegerTerm(com.googlecode.prolog_cafe.lang.IntegerTerm) StructureTerm(com.googlecode.prolog_cafe.lang.StructureTerm) PatchSet(com.google.gerrit.entities.PatchSet) Term(com.googlecode.prolog_cafe.lang.Term) IntegerTerm(com.googlecode.prolog_cafe.lang.IntegerTerm) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) StructureTerm(com.googlecode.prolog_cafe.lang.StructureTerm)

Example 22 with Term

use of com.googlecode.prolog_cafe.lang.Term in project gerrit by GerritCodeReview.

the class PRED_commit_delta_4 method exec.

@Override
public Operation exec(Prolog engine) throws PrologException {
    engine.cont = cont;
    engine.setB0();
    Term a1 = arg1.dereference();
    if (a1 instanceof VariableTerm) {
        throw new PInstantiationException(this, 1);
    }
    if (!(a1 instanceof SymbolTerm)) {
        throw new IllegalTypeException(this, 1, "symbol", a1);
    }
    Pattern regex = Pattern.compile(a1.name());
    engine.r1 = new JavaObjectTerm(regex);
    engine.r2 = arg2;
    engine.r3 = arg3;
    engine.r4 = arg4;
    Repository repository = StoredValues.REPOSITORY.get(engine);
    try (DiffFormatter diffFormatter = new DiffFormatter(DisabledOutputStream.INSTANCE)) {
        diffFormatter.setRepository(repository);
        // Do not detect renames; that would require reading file contents, which is slow for large
        // files.
        RevCommit commit = StoredValues.COMMIT.get(engine);
        List<DiffEntry> diffEntries = diffFormatter.scan(// parent #0 is always the right choice, if it exists.
        commit.getParentCount() > 0 ? commit.getParent(0) : null, commit);
        engine.r5 = new JavaObjectTerm(diffEntries.iterator());
    } catch (IOException e) {
        throw new JavaException(e);
    }
    return engine.jtry5(commit_delta_check, commit_delta_next);
}
Also used : Pattern(java.util.regex.Pattern) JavaException(com.googlecode.prolog_cafe.exceptions.JavaException) IllegalTypeException(com.googlecode.prolog_cafe.exceptions.IllegalTypeException) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) Term(com.googlecode.prolog_cafe.lang.Term) JavaObjectTerm(com.googlecode.prolog_cafe.lang.JavaObjectTerm) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) VariableTerm(com.googlecode.prolog_cafe.lang.VariableTerm) IOException(java.io.IOException) PInstantiationException(com.googlecode.prolog_cafe.exceptions.PInstantiationException) Repository(org.eclipse.jgit.lib.Repository) JavaObjectTerm(com.googlecode.prolog_cafe.lang.JavaObjectTerm) VariableTerm(com.googlecode.prolog_cafe.lang.VariableTerm) DiffFormatter(org.eclipse.jgit.diff.DiffFormatter) RevCommit(org.eclipse.jgit.revwalk.RevCommit) DiffEntry(org.eclipse.jgit.diff.DiffEntry)

Example 23 with Term

use of com.googlecode.prolog_cafe.lang.Term in project gerrit by GerritCodeReview.

the class AbstractCommitUserIdentityPredicate method exec.

protected Operation exec(Prolog engine, PersonIdent userId) throws PrologException {
    engine.setB0();
    Term a1 = arg1.dereference();
    Term a2 = arg2.dereference();
    Term a3 = arg3.dereference();
    Term idTerm;
    Term nameTerm = Prolog.Nil;
    Term emailTerm = Prolog.Nil;
    PrologEnvironment env = (PrologEnvironment) engine.control;
    Emails emails = env.getArgs().getEmails();
    Account.Id id = null;
    try {
        ImmutableSet<Account.Id> ids = emails.getAccountForExternal(userId.getEmailAddress());
        if (ids.size() == 1) {
            id = ids.iterator().next();
        }
    } catch (IOException e) {
        throw new SystemException(e.getMessage());
    }
    if (id == null) {
        idTerm = anonymous;
    } else {
        idTerm = new IntegerTerm(id.get());
    }
    String name = userId.getName();
    if (name != null && !name.equals("")) {
        nameTerm = SymbolTerm.create(name);
    }
    String email = userId.getEmailAddress();
    if (email != null && !email.equals("")) {
        emailTerm = SymbolTerm.create(email);
    }
    if (!a1.unify(new StructureTerm(user, idTerm), engine.trail)) {
        return engine.fail();
    }
    if (!a2.unify(nameTerm, engine.trail)) {
        return engine.fail();
    }
    if (!a3.unify(emailTerm, engine.trail)) {
        return engine.fail();
    }
    return cont;
}
Also used : Account(com.google.gerrit.entities.Account) IntegerTerm(com.googlecode.prolog_cafe.lang.IntegerTerm) SystemException(com.googlecode.prolog_cafe.exceptions.SystemException) StructureTerm(com.googlecode.prolog_cafe.lang.StructureTerm) Term(com.googlecode.prolog_cafe.lang.Term) IntegerTerm(com.googlecode.prolog_cafe.lang.IntegerTerm) StructureTerm(com.googlecode.prolog_cafe.lang.StructureTerm) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm) Emails(com.google.gerrit.server.account.Emails) IOException(java.io.IOException) PrologEnvironment(com.google.gerrit.server.rules.PrologEnvironment)

Example 24 with Term

use of com.googlecode.prolog_cafe.lang.Term in project gerrit by GerritCodeReview.

the class PRED_change_branch_1 method exec.

@Override
public Operation exec(Prolog engine) throws PrologException {
    engine.setB0();
    Term a1 = arg1.dereference();
    BranchNameKey name = StoredValues.getChange(engine).getDest();
    if (!a1.unify(SymbolTerm.create(name.branch()), engine.trail)) {
        return engine.fail();
    }
    return cont;
}
Also used : BranchNameKey(com.google.gerrit.entities.BranchNameKey) Term(com.googlecode.prolog_cafe.lang.Term) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm)

Example 25 with Term

use of com.googlecode.prolog_cafe.lang.Term in project gerrit by GerritCodeReview.

the class PRED_change_project_1 method exec.

@Override
public Operation exec(Prolog engine) throws PrologException {
    engine.setB0();
    Term a1 = arg1.dereference();
    Project.NameKey name = StoredValues.getChange(engine).getProject();
    if (!a1.unify(SymbolTerm.create(name.get()), engine.trail)) {
        return engine.fail();
    }
    return cont;
}
Also used : Project(com.google.gerrit.entities.Project) Term(com.googlecode.prolog_cafe.lang.Term) SymbolTerm(com.googlecode.prolog_cafe.lang.SymbolTerm)

Aggregations

Term (com.googlecode.prolog_cafe.lang.Term)43 SymbolTerm (com.googlecode.prolog_cafe.lang.SymbolTerm)37 StructureTerm (com.googlecode.prolog_cafe.lang.StructureTerm)30 IntegerTerm (com.googlecode.prolog_cafe.lang.IntegerTerm)27 VariableTerm (com.googlecode.prolog_cafe.lang.VariableTerm)20 ListTerm (com.googlecode.prolog_cafe.lang.ListTerm)17 JavaObjectTerm (com.googlecode.prolog_cafe.lang.JavaObjectTerm)13 ArrayList (java.util.ArrayList)6 SubmitRecord (com.google.gerrit.entities.SubmitRecord)4 CurrentUser (com.google.gerrit.server.CurrentUser)4 RuleEvalException (com.google.gerrit.server.project.RuleEvalException)4 ChangeData (com.google.gerrit.server.query.change.ChangeData)4 OrmException (com.google.gwtorm.server.OrmException)4 CompileException (com.googlecode.prolog_cafe.exceptions.CompileException)4 IllegalTypeException (com.googlecode.prolog_cafe.exceptions.IllegalTypeException)4 JavaException (com.googlecode.prolog_cafe.exceptions.JavaException)4 PInstantiationException (com.googlecode.prolog_cafe.exceptions.PInstantiationException)4 ReductionLimitException (com.googlecode.prolog_cafe.exceptions.ReductionLimitException)4 IOException (java.io.IOException)4 RevCommit (org.eclipse.jgit.revwalk.RevCommit)4