Example usage for org.eclipse.jgit.lib Repository newObjectReader

List of usage examples for org.eclipse.jgit.lib Repository newObjectReader

Introduction

In this page you can find the example usage for org.eclipse.jgit.lib Repository newObjectReader.

Prototype

@NonNull
public ObjectReader newObjectReader() 

Source Link

Document

Create a new reader to read objects from #getObjectDatabase() .

Usage

From source file:gerrit.PRED_commit_edits_2.java

License:Apache License

@Override
public Operation exec(Prolog engine) throws PrologException {
    engine.setB0();//from  w ww  .j a va  2s . com

    Term a1 = arg1.dereference();
    Term a2 = arg2.dereference();

    Pattern fileRegex = getRegexParameter(a1);
    Pattern editRegex = getRegexParameter(a2);

    PatchList pl = StoredValues.PATCH_LIST.get(engine);
    Repository repo = StoredValues.REPOSITORY.get(engine);

    try (ObjectReader reader = repo.newObjectReader(); RevWalk rw = new RevWalk(reader)) {
        final RevTree aTree;
        final RevTree bTree;
        final RevCommit bCommit = rw.parseCommit(pl.getNewId());

        if (pl.getOldId() != null) {
            aTree = rw.parseTree(pl.getOldId());
        } else {
            // Octopus merge with unknown automatic merge result, since the
            // web UI returns no files to match against, just fail.
            return engine.fail();
        }
        bTree = bCommit.getTree();

        for (PatchListEntry entry : pl.getPatches()) {
            String newName = entry.getNewName();
            String oldName = entry.getOldName();

            if (newName.equals("/COMMIT_MSG")) {
                continue;
            }

            if (fileRegex.matcher(newName).find() || (oldName != null && fileRegex.matcher(oldName).find())) {
                List<Edit> edits = entry.getEdits();

                if (edits.isEmpty()) {
                    continue;
                }
                Text tA;
                if (oldName != null) {
                    tA = load(aTree, oldName, reader);
                } else {
                    tA = load(aTree, newName, reader);
                }
                Text tB = load(bTree, newName, reader);
                for (Edit edit : edits) {
                    if (tA != Text.EMPTY) {
                        String aDiff = tA.getString(edit.getBeginA(), edit.getEndA(), true);
                        if (editRegex.matcher(aDiff).find()) {
                            return cont;
                        }
                    }
                    if (tB != Text.EMPTY) {
                        String bDiff = tB.getString(edit.getBeginB(), edit.getEndB(), true);
                        if (editRegex.matcher(bDiff).find()) {
                            return cont;
                        }
                    }
                }
            }
        }
    } catch (IOException err) {
        throw new JavaException(this, 1, err);
    }

    return engine.fail();
}

From source file:git_manager.tool.GitOperations.java

License:Open Source License

void printDiffWithHead() {
    Repository repository = git.getRepository();
    ObjectId oldHead;/*from w  w  w  .j a v  a 2s.co m*/
    try {
        oldHead = repository.resolve("HEAD~1^{tree}");
        ObjectId head = repository.resolve("HEAD^{tree}");

        System.out.println("Printing diff between tree: " + oldHead + " and " + head);

        // prepare the two iterators to compute the diff between
        ObjectReader reader = repository.newObjectReader();
        CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
        oldTreeIter.reset(reader, oldHead);
        CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
        newTreeIter.reset(reader, head);

        // finally get the list of changed files
        List<DiffEntry> diffs = git.diff().setNewTree(newTreeIter).setOldTree(oldTreeIter).call();
        for (DiffEntry entry : diffs) {
            System.out.println("Entry: " + entry);
        }
        System.out.println("----------------------");

        DiffFormatter df = new DiffFormatter(new ByteArrayOutputStream());
        df.setRepository(git.getRepository());
        List<DiffEntry> entries = df.scan(oldTreeIter, newTreeIter);

        for (DiffEntry entry : entries) {
            System.out.println(entry);
        }

        System.out.println("Done");

        repository.close();
    } catch (RevisionSyntaxException e) {
        e.printStackTrace();
    } catch (AmbiguousObjectException e) {
        e.printStackTrace();
    } catch (IncorrectObjectTypeException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (GitAPIException e) {
        e.printStackTrace();
    }
}

From source file:io.fabric8.git.internal.GitDataStore.java

License:Apache License

private AbstractTreeIterator getTreeIterator(Repository db, String name) throws IOException {
    final ObjectId id = db.resolve(name);
    if (id == null)
        throw new IllegalArgumentException(name);
    final CanonicalTreeParser p = new CanonicalTreeParser();
    final ObjectReader or = db.newObjectReader();
    try {//from   w w w.j  a  va  2  s .co  m
        p.reset(or, new RevWalk(db).parseTree(id));
        return p;
    } finally {
        or.release();
    }
}

From source file:jbenchmarker.trace.git.GitExtraction.java

License:Open Source License

public GitExtraction(Repository repo, CouchDbRepositorySupport<Commit> dbc, CouchDbRepositorySupport<Patch> dbp,
        DiffAlgorithm diffAlgorithm, String path, boolean detectMovesAndUpdates, int updateThresold,
        int moveThresold) {
    this.repository = repo;
    this.reader = repo.newObjectReader();
    this.source = ContentSource.create(reader);
    this.pairSource = new ContentSource.Pair(source, source);
    this.diffAlgorithm = diffAlgorithm;
    this.patchCrud = dbp;
    this.commitCrud = dbc;
    this.git = new Git(repo);
    this.path = path;
    this.detectMoveAndUpdate = detectMovesAndUpdates;
    this.updateThresold = updateThresold;
    this.moveThresold = moveThresold;
}

From source file:jetbrains.buildServer.buildTriggers.vcs.git.submodules.SubmoduleAwareTreeIterator.java

License:Apache License

@Override
public AbstractTreeIterator createSubtreeIterator(ObjectReader reader) throws IOException {
    String path = myWrappedIterator.getEntryPathString();
    if (myIsOnSubmodule) {
        CanonicalTreeParser p = new CanonicalTreeParser();
        ObjectReader or = null;/*from  w w  w.jav  a 2s. c o  m*/
        try {
            Repository r = mySubmoduleResolver.resolveRepository(mySubmoduleResolver.getSubmoduleUrl(path));
            or = r.newObjectReader();
            p.reset(or, mySubmoduleCommit.getTree().getId());
        } catch (Exception e) {
            if (e instanceof IOException)
                throw (IOException) e;
            IOException ioe = new IOException("Submodule error");
            ioe.initCause(e);
            throw ioe;
        } finally {
            if (or != null)
                or.release();
        }
        return createSubmoduleAwareTreeIterator(this, p,
                mySubmoduleResolver.getSubResolver(mySubmoduleCommit, path), "",
                mySubmoduleResolver.getSubmoduleUrl(path), getPathFromRoot(path),
                SubmodulesCheckoutPolicy.getSubSubModulePolicyFor(mySubmodulesPolicy), myLogSubmoduleErrors);
    } else {
        Repository r = mySubmoduleResolver.getRepository();
        ObjectReader or = r.newObjectReader();
        AbstractTreeIterator ati = null;
        try {
            ati = myWrappedIterator.createSubtreeIterator(or);
        } finally {
            or.release();
        }
        return createSubmoduleAwareTreeIterator(this, ati, mySubmoduleResolver, path, myUrl, myPathFromRoot,
                mySubmodulesPolicy, myLogSubmoduleErrors);
    }
}

From source file:jetbrains.buildServer.buildTriggers.vcs.git.submodules.SubmoduleAwareTreeIteratorFactory.java

License:Apache License

private static CanonicalTreeParser createTreeParser(final Repository db, final RevCommit commit)
        throws IOException {
    ObjectReader reader = db.newObjectReader();
    try {//from  w  w w. j  a  v  a 2 s  .  co m
        CanonicalTreeParser parser = new CanonicalTreeParser();
        parser.reset(reader, commit.getTree().getId());
        return parser;
    } finally {
        reader.release();
    }
}

From source file:model.Buildmodel.java

public int build(Git git, List<RevCommit> logs, RepoSettings rs)
        throws NoHeadException, GitAPIException, IOException {

    //ObjectId lastCommitId = repository.resolve(Constants.MASTER);
    ObjectId parentid = null;//from  w  w  w. ja v a  2 s .  c  o m
    ObjectId currid = null;

    Repository repository = git.getRepository();

    //a new reader to read objects from getObjectDatabase()
    ObjectReader reader = repository.newObjectReader();
    CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
    CanonicalTreeParser newTreeIter = new CanonicalTreeParser();

    List<DiffEntry> diffs = null;

    WriteData wd = new WriteData(); //Class to write data to an external file
    wd.initiate(rs);

    int cnt = 0; //Commits count that is written in data
    for (RevCommit rev : logs) {

        if (rev.getParentCount() == 1) { //Not taking Merge commits, for taking them make it >= .

            try {

                parentid = repository.resolve(rev.getParent(0).getName() + "^{tree}");
                currid = repository.resolve(rev.getName() + "^{tree}");

                //Reset this parser to walk through the given tree
                oldTreeIter.reset(reader, parentid);
                newTreeIter.reset(reader, currid);
                diffs = git.diff() //Returns a command object to execute a diff command
                        .setNewTree(newTreeIter).setOldTree(oldTreeIter).call(); //returns a DiffEntry for each path which is different

            } catch (RevisionSyntaxException | IOException | GitAPIException e) {
                e.printStackTrace();
            }

            ByteArrayOutputStream out = new ByteArrayOutputStream();
            //Create a new formatter with a default level of context.
            DiffFormatter df = new DiffFormatter(out);
            //Set the repository the formatter can load object contents from.
            df.setRepository(git.getRepository());

            ArrayList<String> diffText = new ArrayList<String>();
            ArrayList<String> filetypes = new ArrayList<String>();

            //A DiffEntry is 'A value class representing a change to a file' therefore for each file you have a diff entry.
            int ovllineadd = 0;
            int ovllinerem = 0;
            int totallinechanged = 0;
            int totalfilrem = 0;
            int totalfiladd = 0;

            for (DiffEntry diff : diffs) {

                try {

                    df.format(diff); //Format a patch script for one file entry.
                    RawText r = new RawText(out.toByteArray());
                    r.getLineDelimiter();
                    diffText.add(out.toString());

                    String st = out.toString();
                    String filetype = null;
                    int filerem = 0, fileadd = 0, filtyp = 0;
                    ;
                    int lineadd = 0, linerem = 0;

                    String[] temp = st.split("\n");

                    for (String tem : temp) {

                        if (tem.startsWith("---") || tem.startsWith("+++")) {

                            if (tem.startsWith("---")) {
                                if (tem.endsWith("null")) {
                                    fileadd++; //File added
                                } else {
                                    int p = tem.lastIndexOf("/");
                                    if (p >= 0) {
                                        tem = tem.substring(p + 1, tem.length());
                                    }
                                    int h = tem.lastIndexOf(".");
                                    if (h >= 0) {
                                        filetype = tem.substring(h, tem.length());
                                        filetype = filetype.replace(" ", "");
                                        filetype = filetype.replace("\"", "");
                                        if (filtyp != 1) {
                                            filetypes.add(filetype);
                                            filtyp = 1;
                                        }
                                    } else {
                                        //README, LICENSE type wanna do?
                                    }
                                }
                            }
                            if (tem.startsWith("+++")) {
                                if (tem.endsWith("null")) {
                                    filerem++; //Fil removed
                                } else {
                                    int p = tem.lastIndexOf("/");
                                    if (p >= 0) {
                                        tem = tem.substring(p + 1, tem.length());
                                    }
                                    int h = tem.lastIndexOf(".");
                                    if (h >= 0) {
                                        filetype = tem.substring(h, tem.length());
                                        filetype = filetype.replace(" ", "");
                                        filetype = filetype.replace("\"", "");
                                        if (filtyp != 1) {
                                            filetypes.add(filetype);
                                            filtyp = 1;
                                        }
                                    } else {
                                        //README, LICENSE type wanna do?
                                    }
                                }
                            }

                        }

                        if (tem.startsWith("+") && !tem.startsWith("+++")) {
                            lineadd++;
                        } else if (tem.startsWith("-") && !tem.startsWith("---")) {
                            linerem++;
                        }

                    }
                    ovllineadd += lineadd;
                    ovllinerem += linerem;
                    totallinechanged += (lineadd + linerem);
                    totalfiladd += fileadd;
                    totalfilrem += filerem;

                    out.reset();

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            PersonIdent p = rev.getAuthorIdent();
            //DateFormat formatter= new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
            DateFormat formatter = new SimpleDateFormat("HH");
            formatter.setTimeZone(TimeZone.getTimeZone("UTC"));

            String email = p.getEmailAddress();
            //So that email folder is created properly
            if (email.contains("://") || email.contains("//")) {
                email = email.replace(":", "");
                email = email.replace("//", "");
            }

            String[] commsgwords = rev.getFullMessage().split(" ");

            wd.write(rev.getName(), email, totallinechanged, ovllineadd, ovllinerem, filetypes.size(),
                    totalfiladd, totalfilrem, Integer.parseInt(formatter.format(p.getWhen())), filetypes,
                    commsgwords.length);
            cnt++;
        }
    }

    repository.close();
    return cnt;
}

From source file:neembuu.uploader.zip.generator.UpdaterGenerator.java

License:Apache License

/**
 * Populate all the files to update, if the system should update.
 *//*from   w w w  . j  ava2 s  . c o m*/
private boolean populateDiff() {
    try {
        git.fetch().call();
        Repository repo = git.getRepository();
        ObjectId fetchHead = repo.resolve("FETCH_HEAD^{tree}");
        ObjectId head = repo.resolve("HEAD^{tree}");

        ObjectReader reader = repo.newObjectReader();
        CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
        oldTreeIter.reset(reader, head);
        CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
        newTreeIter.reset(reader, fetchHead);
        List<DiffEntry> diffs = git.diff().setShowNameAndStatusOnly(true).setNewTree(newTreeIter)
                .setOldTree(oldTreeIter).call();

        if (diffs.isEmpty()) {
            System.out.println("No diff");
            return false;
        } else {
            return true;
        }
    } catch (GitAPIException | IOException ex) {
        Logger.getLogger(UpdaterGenerator.class.getName()).log(Level.SEVERE, null, ex);
    }
    return true;//assume true
}

From source file:net.aprendizajengrande.gitrecommender.ExtractLog.java

License:Open Source License

private static AbstractTreeIterator prepareTreeParser(Repository repository, RevCommit commit)
        throws IOException, MissingObjectException, IncorrectObjectTypeException {
    // from the commit we can build the tree which allows us to construct
    // the TreeParser
    RevWalk walk = new RevWalk(repository);
    RevTree tree = walk.parseTree(commit.getTree().getId());
    CanonicalTreeParser result = new CanonicalTreeParser();
    ObjectReader reader = repository.newObjectReader();
    try {/*from   w  w w . j a  v a2 s.  c  o  m*/
        result.reset(reader, tree.getId());
    } finally {
        reader.release();
    }
    walk.dispose();
    return result;
}

From source file:org.apache.maven.scm.provider.git.jgit.command.diff.JGitDiffCommand.java

License:Apache License

private AbstractTreeIterator getTreeIterator(Repository repo, String name) throws IOException {
    final ObjectId id = repo.resolve(name);
    if (id == null) {
        throw new IllegalArgumentException(name);
    }// w ww.j a  v a  2  s  . co m
    final CanonicalTreeParser p = new CanonicalTreeParser();
    final ObjectReader or = repo.newObjectReader();
    try {
        p.reset(or, new RevWalk(repo).parseTree(id));
        return p;
    } finally {
        or.release();
    }
}