Search in sources :

Example 1 with PlotWalk

use of org.eclipse.jgit.revplot.PlotWalk in project gitblit by gitblit.

the class BranchGraphServlet method doGet.

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    InputStream is = null;
    Repository r = null;
    PlotWalk rw = null;
    try {
        String repository = request.getParameter("r");
        if (StringUtils.isEmpty(repository)) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            response.getWriter().append("Bad request");
            return;
        }
        String objectId = request.getParameter("h");
        String length = request.getParameter("l");
        r = repositoryManager.getRepository(repository);
        if (r == null) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            response.getWriter().append("Bad request");
            return;
        }
        rw = new PlotWalk(r);
        if (StringUtils.isEmpty(objectId)) {
            objectId = JGitUtils.getHEADRef(r);
        }
        ObjectId id = r.resolve(objectId);
        if (id == null) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            response.getWriter().append("Bad request");
            return;
        }
        rw.markStart(rw.lookupCommit(id));
        // default to the items-per-page setting, unless specified
        int maxCommits = settings.getInteger(Keys.web.itemsPerPage, 50);
        int requestedCommits = maxCommits;
        if (!StringUtils.isEmpty(length)) {
            int l = Integer.parseInt(length);
            if (l > 0) {
                requestedCommits = l;
            }
        }
        // fetch the requested commits plus some extra so that the last
        // commit displayed *likely* has correct lane assignments
        CommitList commitList = new CommitList();
        commitList.source(rw);
        commitList.fillTo(2 * Math.max(requestedCommits, maxCommits));
        // determine the appropriate width for the image
        int numLanes = 1;
        int numCommits = Math.min(requestedCommits, commitList.size());
        if (numCommits > 1) {
            // determine graph width
            Set<String> parents = new TreeSet<String>();
            for (int i = 0; i < commitList.size(); i++) {
                PlotCommit<Lane> commit = commitList.get(i);
                boolean checkLane = false;
                if (i < numCommits) {
                    // commit in visible list
                    checkLane = true;
                    // remember parents
                    for (RevCommit p : commit.getParents()) {
                        parents.add(p.getName());
                    }
                } else if (parents.contains(commit.getName())) {
                    // commit outside visible list, but it is a parent of a
                    // commit in the visible list so we need to know it's lane
                    // assignment
                    checkLane = true;
                }
                if (checkLane) {
                    int pos = commit.getLane().getPosition();
                    numLanes = Math.max(numLanes, pos + 1);
                }
            }
        }
        int graphWidth = numLanes * LANE_WIDTH + RIGHT_PAD;
        int rowHeight = ROW_HEIGHT;
        // create an image buffer and render the lanes
        BufferedImage image = new BufferedImage(graphWidth, rowHeight * numCommits, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = null;
        try {
            g = image.createGraphics();
            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            LanesRenderer renderer = new LanesRenderer();
            for (int i = 0; i < commitList.size(); i++) {
                PlotCommit<Lane> commit = commitList.get(i);
                Graphics row = g.create(0, i * rowHeight, graphWidth, rowHeight);
                try {
                    renderer.paint(row, commit, rowHeight, graphWidth);
                } finally {
                    row.dispose();
                    row = null;
                }
            }
        } finally {
            if (g != null) {
                g.dispose();
                g = null;
            }
        }
        // write the image buffer to the client
        response.setContentType("image/png");
        if (numCommits > 1) {
            response.setHeader("Cache-Control", "public, max-age=60, must-revalidate");
            response.setDateHeader("Last-Modified", JGitUtils.getCommitDate(commitList.get(0)).getTime());
        }
        OutputStream os = response.getOutputStream();
        ImageIO.write(image, "png", os);
        os.flush();
        image.flush();
        image = null;
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (is != null) {
            is.close();
            is = null;
        }
        if (rw != null) {
            rw.dispose();
            rw = null;
        }
        if (r != null) {
            r.close();
            r = null;
        }
    }
}
Also used : ObjectId(org.eclipse.jgit.lib.ObjectId) InputStream(java.io.InputStream) OutputStream(java.io.OutputStream) PlotLane(org.eclipse.jgit.revplot.PlotLane) PlotCommitList(org.eclipse.jgit.revplot.PlotCommitList) BufferedImage(java.awt.image.BufferedImage) ServletException(javax.servlet.ServletException) IOException(java.io.IOException) Graphics2D(java.awt.Graphics2D) Graphics(java.awt.Graphics) Repository(org.eclipse.jgit.lib.Repository) TreeSet(java.util.TreeSet) PlotWalk(org.eclipse.jgit.revplot.PlotWalk) RevCommit(org.eclipse.jgit.revwalk.RevCommit)

Example 2 with PlotWalk

use of org.eclipse.jgit.revplot.PlotWalk in project gitblit by gitblit.

the class JGitUtilsTest method testPlots.

@Test
public void testPlots() throws Exception {
    Repository repository = GitBlitSuite.getTicgitRepository();
    PlotWalk pw = new PlotWalk(repository);
    PlotCommitList<PlotLane> commits = new PlotCommitList<PlotLane>();
    commits.source(pw);
    commits.fillTo(25);
    for (PlotCommit<PlotLane> commit : commits) {
        System.out.println(commit);
    }
    repository.close();
}
Also used : Repository(org.eclipse.jgit.lib.Repository) PlotLane(org.eclipse.jgit.revplot.PlotLane) PlotCommitList(org.eclipse.jgit.revplot.PlotCommitList) PlotWalk(org.eclipse.jgit.revplot.PlotWalk) Test(org.junit.Test)

Example 3 with PlotWalk

use of org.eclipse.jgit.revplot.PlotWalk in project indy by Commonjava.

the class GitManager method getHeadCommit.

public ChangeSummary getHeadCommit(final File f) throws GitSubsystemException {
    return lockAnd(me -> {
        try {
            final ObjectId oid = repo.resolve("HEAD");
            final PlotWalk pw = new PlotWalk(repo);
            final RevCommit rc = pw.parseCommit(oid);
            pw.markStart(rc);
            final String filepath = relativize(f);
            pw.setTreeFilter(AndTreeFilter.create(PathFilter.create(filepath), TreeFilter.ANY_DIFF));
            final PlotCommitList<PlotLane> cl = new PlotCommitList<>();
            cl.source(pw);
            cl.fillTo(1);
            final PlotCommit<PlotLane> commit = cl.get(0);
            return toChangeSummary(commit);
        } catch (RevisionSyntaxException | IOException e) {
            throw new GitSubsystemException("Failed to resolve HEAD commit for: %s. Reason: %s", e, f, e.getMessage());
        }
    });
}
Also used : PlotLane(org.eclipse.jgit.revplot.PlotLane) ObjectId(org.eclipse.jgit.lib.ObjectId) RevisionSyntaxException(org.eclipse.jgit.errors.RevisionSyntaxException) JoinString(org.commonjava.maven.atlas.ident.util.JoinString) PlotCommitList(org.eclipse.jgit.revplot.PlotCommitList) IOException(java.io.IOException) PlotWalk(org.eclipse.jgit.revplot.PlotWalk) RevCommit(org.eclipse.jgit.revwalk.RevCommit)

Example 4 with PlotWalk

use of org.eclipse.jgit.revplot.PlotWalk in project indy by Commonjava.

the class GitManager method getChangelog.

public List<ChangeSummary> getChangelog(final File f, final int start, final int length) throws GitSubsystemException {
    return lockAnd(me -> {
        if (length == 0) {
            return Collections.emptyList();
        }
        try {
            final ObjectId oid = repo.resolve(Constants.HEAD);
            final PlotWalk pw = new PlotWalk(repo);
            final RevCommit rc = pw.parseCommit(oid);
            toChangeSummary(rc);
            pw.markStart(rc);
            final String filepath = relativize(f);
            logger.info("Getting changelog for: {} (start: {}, length: {})", filepath, start, length);
            if (!isEmpty(filepath) && !filepath.equals("/")) {
                pw.setTreeFilter(AndTreeFilter.create(PathFilter.create(filepath), TreeFilter.ANY_DIFF));
            } else {
                pw.setTreeFilter(TreeFilter.ANY_DIFF);
            }
            final List<ChangeSummary> changelogs = new ArrayList<ChangeSummary>();
            int count = 0;
            final int stop = length > 0 ? length + 1 : 0;
            RevCommit commit = null;
            while ((commit = pw.next()) != null && (stop < 1 || count < stop)) {
                if (count < start) {
                    count++;
                    continue;
                }
                changelogs.add(toChangeSummary(commit));
                count++;
            }
            if (length < -1) {
                final int remove = (-1 * length) - 1;
                for (int i = 0; i < remove; i++) {
                    changelogs.remove(changelogs.size() - 1);
                }
            }
            return changelogs;
        } catch (RevisionSyntaxException | IOException e) {
            throw new GitSubsystemException("Failed to resolve HEAD commit for: %s. Reason: %s", e, f, e.getMessage());
        }
    });
}
Also used : ObjectId(org.eclipse.jgit.lib.ObjectId) RevisionSyntaxException(org.eclipse.jgit.errors.RevisionSyntaxException) ArrayList(java.util.ArrayList) JoinString(org.commonjava.maven.atlas.ident.util.JoinString) IOException(java.io.IOException) ChangeSummary(org.commonjava.indy.audit.ChangeSummary) PlotWalk(org.eclipse.jgit.revplot.PlotWalk) RevCommit(org.eclipse.jgit.revwalk.RevCommit)

Aggregations

PlotWalk (org.eclipse.jgit.revplot.PlotWalk)4 IOException (java.io.IOException)3 ObjectId (org.eclipse.jgit.lib.ObjectId)3 PlotCommitList (org.eclipse.jgit.revplot.PlotCommitList)3 PlotLane (org.eclipse.jgit.revplot.PlotLane)3 RevCommit (org.eclipse.jgit.revwalk.RevCommit)3 JoinString (org.commonjava.maven.atlas.ident.util.JoinString)2 RevisionSyntaxException (org.eclipse.jgit.errors.RevisionSyntaxException)2 Repository (org.eclipse.jgit.lib.Repository)2 Graphics (java.awt.Graphics)1 Graphics2D (java.awt.Graphics2D)1 BufferedImage (java.awt.image.BufferedImage)1 InputStream (java.io.InputStream)1 OutputStream (java.io.OutputStream)1 ArrayList (java.util.ArrayList)1 TreeSet (java.util.TreeSet)1 ServletException (javax.servlet.ServletException)1 ChangeSummary (org.commonjava.indy.audit.ChangeSummary)1 Test (org.junit.Test)1