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

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

Introduction

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

Prototype

@Override
public void close() 

Source Link

Document

Decrement the use count, and maybe close resources.

Usage

From source file:com.gitblit.wicket.pages.DashboardPage.java

License:Apache License

protected void addActivity(UserModel user, Collection<RepositoryModel> repositories, String feedTitle,
        int daysBack) {
    Calendar c = Calendar.getInstance();
    c.add(Calendar.DATE, -1 * daysBack);
    Date minimumDate = c.getTime();
    TimeZone timezone = getTimeZone();

    // create daily commit digest feed
    List<DailyLogEntry> digests = new ArrayList<DailyLogEntry>();
    for (RepositoryModel model : repositories) {
        if (model.isCollectingGarbage) {
            continue;
        }//from  w w  w  . j  a v a 2 s  . com
        if (model.hasCommits && model.lastChange.after(minimumDate)) {
            Repository repository = app().repositories().getRepository(model.name);
            List<DailyLogEntry> entries = RefLogUtils.getDailyLogByRef(model.name, repository, minimumDate,
                    timezone);
            digests.addAll(entries);
            repository.close();
        }
    }

    Fragment activityFragment = new Fragment("activity", "activityFragment", DashboardPage.this);
    add(activityFragment);
    activityFragment.add(new Label("feedTitle", feedTitle));
    if (digests.size() == 0) {
        // quiet or no starred repositories
        if (repositories.size() == 0) {
            if (UserModel.ANONYMOUS.equals(user)) {
                if (daysBack == 1) {
                    activityFragment.add(new Label("digests", getString("gb.noActivityToday")));
                } else {
                    activityFragment.add(
                            new Label("digests", MessageFormat.format(getString("gb.noActivity"), daysBack)));
                }
            } else {
                activityFragment.add(new LinkPanel("digests", null, getString("gb.findSomeRepositories"),
                        RepositoriesPage.class));
            }
        } else {
            if (daysBack == 1) {
                activityFragment.add(new Label("digests", getString("gb.noActivityToday")));
            } else {
                activityFragment
                        .add(new Label("digests", MessageFormat.format(getString("gb.noActivity"), daysBack)));
            }
        }
    } else {
        // show daily commit digest feed
        Collections.sort(digests);
        DigestsPanel digestsPanel = new DigestsPanel("digests", digests);
        activityFragment.add(digestsPanel);
    }

    // add the nifty charts
    if (!ArrayUtils.isEmpty(digests)) {
        // aggregate author exclusions
        Set<String> authorExclusions = new TreeSet<String>();
        for (String author : app().settings().getStrings(Keys.web.metricAuthorExclusions)) {
            authorExclusions.add(author.toLowerCase());
        }
        for (RepositoryModel model : repositories) {
            if (!ArrayUtils.isEmpty(model.metricAuthorExclusions)) {
                for (String author : model.metricAuthorExclusions) {
                    authorExclusions.add(author.toLowerCase());
                }
            }
        }

        addCharts(activityFragment, digests, authorExclusions, daysBack);
    } else {
        activityFragment.add(new Label("charts").setVisible(false));
        activityFragment.add(new Label("feedheader").setVisible(false));
    }
}

From source file:com.gitblit.wicket.pages.NewRepositoryPage.java

License:Apache License

/**
 * Prepare the initial commit for the repository.
 *
 * @param repository/*from w  w  w  .j a va  2s  .  com*/
 * @param addReadme
 * @param gitignore
 * @param addGitFlow
 * @return true if an initial commit was created
 */
protected boolean initialCommit(RepositoryModel repository, boolean addReadme, String gitignore,
        boolean addGitFlow) {
    boolean initialCommit = addReadme || !StringUtils.isEmpty(gitignore) || addGitFlow;
    if (!initialCommit) {
        return false;
    }

    // build an initial commit
    boolean success = false;
    Repository db = app().repositories().getRepository(repositoryModel.name);
    ObjectInserter odi = db.newObjectInserter();
    try {

        UserModel user = GitBlitWebSession.get().getUser();
        String email = Optional.fromNullable(user.emailAddress).or(user.username + "@" + "gitblit");
        PersonIdent author = new PersonIdent(user.getDisplayName(), email);

        DirCache newIndex = DirCache.newInCore();
        DirCacheBuilder indexBuilder = newIndex.builder();

        if (addReadme) {
            // insert a README
            String title = StringUtils.stripDotGit(StringUtils.getLastPathElement(repositoryModel.name));
            String description = repositoryModel.description == null ? "" : repositoryModel.description;
            String readme = String.format("## %s\n\n%s\n\n", title, description);
            byte[] bytes = readme.getBytes(Constants.ENCODING);

            DirCacheEntry entry = new DirCacheEntry("README.md");
            entry.setLength(bytes.length);
            entry.setLastModified(System.currentTimeMillis());
            entry.setFileMode(FileMode.REGULAR_FILE);
            entry.setObjectId(odi.insert(org.eclipse.jgit.lib.Constants.OBJ_BLOB, bytes));

            indexBuilder.add(entry);
        }

        if (!StringUtils.isEmpty(gitignore)) {
            // insert a .gitignore file
            File dir = app().runtime().getFileOrFolder(Keys.git.gitignoreFolder, "${baseFolder}/gitignore");
            File file = new File(dir, gitignore + ".gitignore");
            if (file.exists() && file.length() > 0) {
                byte[] bytes = FileUtils.readContent(file);
                if (!ArrayUtils.isEmpty(bytes)) {
                    DirCacheEntry entry = new DirCacheEntry(".gitignore");
                    entry.setLength(bytes.length);
                    entry.setLastModified(System.currentTimeMillis());
                    entry.setFileMode(FileMode.REGULAR_FILE);
                    entry.setObjectId(odi.insert(org.eclipse.jgit.lib.Constants.OBJ_BLOB, bytes));

                    indexBuilder.add(entry);
                }
            }
        }

        if (addGitFlow) {
            // insert a .gitflow file
            Config config = new Config();
            config.setString("gitflow", null, "masterBranch", Constants.MASTER);
            config.setString("gitflow", null, "developBranch", Constants.DEVELOP);
            config.setString("gitflow", null, "featureBranchPrefix", "feature/");
            config.setString("gitflow", null, "releaseBranchPrefix", "release/");
            config.setString("gitflow", null, "hotfixBranchPrefix", "hotfix/");
            config.setString("gitflow", null, "supportBranchPrefix", "support/");
            config.setString("gitflow", null, "versionTagPrefix", "");

            byte[] bytes = config.toText().getBytes(Constants.ENCODING);

            DirCacheEntry entry = new DirCacheEntry(".gitflow");
            entry.setLength(bytes.length);
            entry.setLastModified(System.currentTimeMillis());
            entry.setFileMode(FileMode.REGULAR_FILE);
            entry.setObjectId(odi.insert(org.eclipse.jgit.lib.Constants.OBJ_BLOB, bytes));

            indexBuilder.add(entry);
        }

        indexBuilder.finish();

        if (newIndex.getEntryCount() == 0) {
            // nothing to commit
            return false;
        }

        ObjectId treeId = newIndex.writeTree(odi);

        // Create a commit object
        CommitBuilder commit = new CommitBuilder();
        commit.setAuthor(author);
        commit.setCommitter(author);
        commit.setEncoding(Constants.ENCODING);
        commit.setMessage("Initial commit");
        commit.setTreeId(treeId);

        // Insert the commit into the repository
        ObjectId commitId = odi.insert(commit);
        odi.flush();

        // set the branch refs
        RevWalk revWalk = new RevWalk(db);
        try {
            // set the master branch
            RevCommit revCommit = revWalk.parseCommit(commitId);
            RefUpdate masterRef = db.updateRef(Constants.R_MASTER);
            masterRef.setNewObjectId(commitId);
            masterRef.setRefLogMessage("commit: " + revCommit.getShortMessage(), false);
            Result masterRC = masterRef.update();
            switch (masterRC) {
            case NEW:
                success = true;
                break;
            default:
                success = false;
            }

            if (addGitFlow) {
                // set the develop branch for git-flow
                RefUpdate developRef = db.updateRef(Constants.R_DEVELOP);
                developRef.setNewObjectId(commitId);
                developRef.setRefLogMessage("commit: " + revCommit.getShortMessage(), false);
                Result developRC = developRef.update();
                switch (developRC) {
                case NEW:
                    success = true;
                    break;
                default:
                    success = false;
                }
            }
        } finally {
            revWalk.close();
        }
    } catch (UnsupportedEncodingException e) {
        logger().error(null, e);
    } catch (IOException e) {
        logger().error(null, e);
    } finally {
        odi.close();
        db.close();
    }
    return success;
}

From source file:com.gitblit.wicket.pages.PatchPage.java

License:Apache License

public PatchPage(final PageParameters params) {
    super(params);

    if (params.get("r").isEmpty()) {
        error(getString("gb.repositoryNotSpecified"));
        redirectToInterceptPage(new RepositoriesPage());
    }// ww w.  ja  v  a  2 s. co m

    final String repositoryName = WicketUtils.getRepositoryName(params);
    final String baseObjectId = WicketUtils.getBaseObjectId(params);
    final String objectId = WicketUtils.getObject(params);
    final String blobPath = WicketUtils.getPath(params);

    GitBlitWebSession session = GitBlitWebSession.get();
    UserModel user = session.getUser();

    RepositoryModel model = app().repositories().getRepositoryModel(user, repositoryName);
    if (model == null) {
        // user does not have permission
        error(getString("gb.canNotLoadRepository") + " " + repositoryName);
        redirectToInterceptPage(new RepositoriesPage());
        return;
    }

    Repository r = app().repositories().getRepository(repositoryName);
    if (r == null) {
        error(getString("gb.canNotLoadRepository") + " " + repositoryName);
        redirectToInterceptPage(new RepositoriesPage());
        return;
    }

    RevCommit commit = JGitUtils.getCommit(r, objectId);
    if (commit == null) {
        GitBlitWebSession.get().cacheErrorMessage(getString("gb.commitIsNull"));
        redirectToInterceptPage(new RepositoriesPage());
        return;
    }

    RevCommit baseCommit = null;
    if (!StringUtils.isEmpty(baseObjectId)) {
        baseCommit = JGitUtils.getCommit(r, baseObjectId);
    }
    String patch = DiffUtils.getCommitPatch(r, baseCommit, commit, blobPath);
    add(new Label("patchText", patch));
    r.close();
}

From source file:com.gitblit.wicket.pages.RawPage.java

License:Apache License

public RawPage(final PageParameters params) {
    super(params);

    if (params.get("r").isEmpty()) {
        error(getString("gb.repositoryNotSpecified"));
        redirectToInterceptPage(new RepositoriesPage());
    }/*from www. java  2s  .  c  o m*/

    getRequestCycle().scheduleRequestHandlerAfterCurrent(new IRequestHandler() {

        @Override
        public void respond(IRequestCycle requestCycle) {
            WebResponse response = (WebResponse) requestCycle.getResponse();

            final String repositoryName = WicketUtils.getRepositoryName(params);
            final String objectId = WicketUtils.getObject(params);
            final String blobPath = WicketUtils.getPath(params);

            String[] encodings = getEncodings();
            GitBlitWebSession session = GitBlitWebSession.get();
            UserModel user = session.getUser();

            RepositoryModel model = app().repositories().getRepositoryModel(user, repositoryName);
            if (model == null) {
                // user does not have permission
                error(getString("gb.canNotLoadRepository") + " " + repositoryName);
                redirectToInterceptPage(new RepositoriesPage());
                return;
            }

            Repository r = app().repositories().getRepository(repositoryName);
            if (r == null) {
                error(getString("gb.canNotLoadRepository") + " " + repositoryName);
                redirectToInterceptPage(new RepositoriesPage());
                return;
            }

            if (StringUtils.isEmpty(blobPath)) {
                // objectid referenced raw view
                byte[] binary = JGitUtils.getByteContent(r, objectId);
                if (binary == null) {
                    final String objectNotFound = MessageFormat
                            .format("Raw page failed to find object {0} in {1}", objectId, repositoryName);
                    logger.error(objectNotFound);
                    throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, objectNotFound);
                }
                contentType = "application/octet-stream";
                response.setContentType(contentType);
                response.setContentLength(binary.length);
                try {
                    response.getOutputStream().write(binary);
                } catch (Exception e) {
                    logger.error("Failed to write binary response", e);
                }
            } else {
                // standard raw blob view
                RevCommit commit = JGitUtils.getCommit(r, objectId);
                if (commit == null) {
                    final String commitNotFound = MessageFormat
                            .format("Raw page failed to find commit {0} in {1}", objectId, repositoryName);
                    logger.error(commitNotFound);
                    throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, commitNotFound);
                }

                String filename = blobPath;
                if (blobPath.indexOf('/') > -1) {
                    filename = blobPath.substring(blobPath.lastIndexOf('/') + 1);
                }

                String extension = null;
                if (blobPath.lastIndexOf('.') > -1) {
                    extension = blobPath.substring(blobPath.lastIndexOf('.') + 1);
                }

                // Map the extensions to types
                Map<String, Integer> map = new HashMap<String, Integer>();
                for (String ext : app().settings().getStrings(Keys.web.imageExtensions)) {
                    map.put(ext.toLowerCase(), 2);
                }
                for (String ext : app().settings().getStrings(Keys.web.binaryExtensions)) {
                    map.put(ext.toLowerCase(), 3);
                }

                final String blobNotFound = MessageFormat.format(
                        "Raw page failed to find blob {0} in {1} @ {2}", blobPath, repositoryName, objectId);

                if (extension != null) {
                    int type = 0;
                    if (map.containsKey(extension)) {
                        type = map.get(extension);
                    }
                    switch (type) {
                    case 2:
                        // image blobs
                        byte[] image = JGitUtils.getByteContent(r, commit.getTree(), blobPath, true);
                        if (image == null) {
                            logger.error(blobNotFound);
                            throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                                    blobNotFound);
                        }
                        contentType = "image/" + extension.toLowerCase();
                        response.setContentType(contentType);
                        response.setContentLength(image.length);
                        try {
                            response.getOutputStream().write(image);
                        } catch (IOException e) {
                            logger.error("Failed to write image response", e);
                        }
                        break;
                    case 3:
                        // binary blobs (download)
                        byte[] binary = JGitUtils.getByteContent(r, commit.getTree(), blobPath, true);
                        if (binary == null) {
                            logger.error(blobNotFound);
                            throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                                    blobNotFound);
                        }
                        contentType = "application/octet-stream";
                        response.setContentLength(binary.length);
                        response.setContentType(contentType);

                        try {
                            String userAgent = GitBlitRequestUtils.getServletRequest().getHeader("User-Agent");

                            if (userAgent != null && userAgent.indexOf("MSIE 5.5") > -1) {
                                response.setHeader("Content-Disposition",
                                        "filename=\"" + URLEncoder.encode(filename, Constants.ENCODING) + "\"");
                            } else if (userAgent != null && userAgent.indexOf("MSIE") > -1) {
                                response.setHeader("Content-Disposition", "attachment; filename=\""
                                        + URLEncoder.encode(filename, Constants.ENCODING) + "\"");
                            } else {
                                response.setHeader("Content-Disposition", "attachment; filename=\""
                                        + new String(filename.getBytes(Constants.ENCODING), "latin1") + "\"");
                            }
                        } catch (UnsupportedEncodingException e) {
                            response.setHeader("Content-Disposition",
                                    "attachment; filename=\"" + filename + "\"");
                        }

                        try {
                            response.getOutputStream().write(binary);
                        } catch (IOException e) {
                            logger.error("Failed to write binary response", e);
                        }
                        break;
                    default:
                        // plain text
                        String content = JGitUtils.getStringContent(r, commit.getTree(), blobPath, encodings);
                        if (content == null) {
                            logger.error(blobNotFound);
                            throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                                    blobNotFound);
                        }
                        contentType = "text/plain; charset=UTF-8";
                        response.setContentType(contentType);
                        try {
                            response.getOutputStream().write(content.getBytes("UTF-8"));
                        } catch (Exception e) {
                            logger.error("Failed to write text response", e);
                        }
                    }

                } else {
                    // plain text
                    String content = JGitUtils.getStringContent(r, commit.getTree(), blobPath, encodings);
                    if (content == null) {
                        logger.error(blobNotFound);
                        throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                                blobNotFound);
                    }
                    contentType = "text/plain; charset=UTF-8";
                    response.setContentType(contentType);
                    try {
                        response.getOutputStream().write(content.getBytes("UTF-8"));
                    } catch (Exception e) {
                        logger.error("Failed to write text response", e);
                    }
                }
            }
            r.close();
        }

        @Override
        public void detach(IRequestCycle requestCycle) {
            // TODO Auto-generated method stub

        }

    });

}

From source file:com.gitblit.wicket.pages.TicketPage.java

License:Apache License

private Link<Void> createDeletePatchsetLink(final RepositoryModel repositoryModel, final Patchset patchset) {
    Link<Void> deleteLink = new Link<Void>("deleteRevision") {
        private static final long serialVersionUID = 1L;

        @Override//from w w w  . j av  a  2  s .c o  m
        public void onClick() {
            Repository r = app().repositories().getRepository(repositoryModel.name);
            UserModel user = GitBlitWebSession.get().getUser();

            if (r == null) {
                if (app().repositories().isCollectingGarbage(repositoryModel.name)) {
                    error(MessageFormat.format(getString("gb.busyCollectingGarbage"), repositoryModel.name));
                } else {
                    error(MessageFormat.format("Failed to find repository {0}", repositoryModel.name));
                }
                return;
            }

            //Construct the ref name based on the patchset
            String ticketShard = String.format("%02d", ticket.number);
            ticketShard = ticketShard.substring(ticketShard.length() - 2);
            final String refName = String.format("%s%s/%d/%d", Constants.R_TICKETS_PATCHSETS, ticketShard,
                    ticket.number, patchset.number);

            Ref ref = null;
            boolean success = true;

            try {
                ref = r.findRef(refName);

                if (ref != null) {
                    success = JGitUtils.deleteBranchRef(r, ref.getName());
                } else {
                    success = false;
                }

                if (success) {
                    // clear commit cache
                    CommitCache.instance().clear(repositoryModel.name, refName);

                    // optionally update reflog
                    if (RefLogUtils.hasRefLogBranch(r)) {
                        RefLogUtils.deleteRef(user, r, ref);
                    }

                    TicketModel updatedTicket = app().tickets().deletePatchset(ticket, patchset, user.username);

                    if (updatedTicket == null) {
                        success = false;
                    }
                }
            } catch (IOException e) {
                logger().error("failed to determine ticket from ref", e);
                success = false;
            } finally {
                r.close();
            }

            if (success) {
                getSession().info(MessageFormat.format(getString("gb.deletePatchsetSuccess"), patchset.number));
                logger().info(MessageFormat.format("{0} deleted patchset {1} from ticket {2}", user.username,
                        patchset.number, ticket.number));
            } else {
                getSession()
                        .error(MessageFormat.format(getString("gb.deletePatchsetFailure"), patchset.number));
            }

            //Force reload of the page to rebuild ticket change cache
            String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(TicketsPage.class, getPageParameters());
            setResponsePage(new RedirectPage(absoluteUrl));
        }
    };

    WicketUtils.setHtmlTooltip(deleteLink,
            MessageFormat.format(getString("gb.deletePatchset"), patchset.number));

    deleteLink.add(new JavascriptEventConfirmation("click",
            MessageFormat.format(getString("gb.deletePatchset"), patchset.number)));

    return deleteLink;
}

From source file:com.gitblit.wicket.panels.BranchesPanel.java

License:Apache License

private Link<Void> createDeleteBranchLink(final RepositoryModel repositoryModel, final RefModel entry) {
    Link<Void> deleteLink = new Link<Void>("deleteBranch") {
        private static final long serialVersionUID = 1L;

        @Override/*ww  w.ja  v a2 s.com*/
        public void onClick() {
            Repository r = app().repositories().getRepository(repositoryModel.name);
            if (r == null) {
                if (app().repositories().isCollectingGarbage(repositoryModel.name)) {
                    error(MessageFormat.format(getString("gb.busyCollectingGarbage"), repositoryModel.name));
                } else {
                    error(MessageFormat.format("Failed to find repository {0}", repositoryModel.name));
                }
                return;
            }
            final String branch = entry.getName();
            Ref ref = null;
            try {
                ref = r.findRef(branch);
                if (ref == null && !branch.startsWith(Constants.R_HEADS)) {
                    ref = r.findRef(Constants.R_HEADS + branch);
                }
            } catch (IOException e) {
            }
            if (ref != null) {
                boolean success = JGitUtils.deleteBranchRef(r, ref.getName());
                if (success) {
                    // clear commit cache
                    CommitCache.instance().clear(repositoryModel.name, branch);

                    // optionally update reflog
                    if (RefLogUtils.hasRefLogBranch(r)) {
                        UserModel user = GitBlitWebSession.get().getUser();
                        RefLogUtils.deleteRef(user, r, ref);
                    }
                }

                if (success) {
                    info(MessageFormat.format("Branch \"{0}\" deleted", branch));
                } else {
                    error(MessageFormat.format("Failed to delete branch \"{0}\"", branch));
                }
            }
            r.close();

            // redirect to the owning page
            PageParameters params = WicketUtils.newRepositoryParameter(repositoryModel.name);
            String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(getPage().getClass(), params);
            getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl));
        }
    };

    deleteLink.add(new JavascriptEventConfirmation("click",
            MessageFormat.format("Delete branch \"{0}\"?", entry.displayName)));
    return deleteLink;
}

From source file:com.gitblit.wicket.panels.HistoryPanel.java

License:Apache License

public HistoryPanel(String wicketId, final String repositoryName, final String objectId, final String path,
        Repository r, int limit, int pageOffset, boolean showRemoteRefs) {
    super(wicketId);
    boolean pageResults = limit <= 0;
    int itemsPerPage = app().settings().getInteger(Keys.web.itemsPerPage, 50);
    if (itemsPerPage <= 1) {
        itemsPerPage = 50;//from w  ww.j a v  a2s  .c  om
    }

    RevCommit commit = JGitUtils.getCommit(r, objectId);
    PathModel matchingPath = null;
    Map<String, SubmoduleModel> submodules = new HashMap<String, SubmoduleModel>();

    if (commit == null) {
        // commit missing
        String msg = MessageFormat.format("Failed to find history of **{0}** *{1}*", path, objectId);
        logger().error(msg + " " + repositoryName);
        add(new Label("commitHeader", MarkdownUtils.transformMarkdown(msg)).setEscapeModelStrings(false));
        add(new Label("breadcrumbs"));
    } else {
        // commit found
        List<PathChangeModel> paths = JGitUtils.getFilesInCommit(r, commit);
        add(new CommitHeaderPanel("commitHeader", repositoryName, commit));
        add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, path, objectId));
        for (SubmoduleModel model : JGitUtils.getSubmodules(r, commit.getTree())) {
            submodules.put(model.path, model);
        }

        for (PathModel p : paths) {
            if (p.path.equals(path)) {
                matchingPath = p;
                break;
            }
        }
        if (matchingPath == null) {
            // path not in commit
            // manually locate path in tree
            TreeWalk tw = new TreeWalk(r);
            tw.reset();
            tw.setRecursive(true);
            try {
                tw.addTree(commit.getTree());
                tw.setFilter(PathFilterGroup.createFromStrings(Collections.singleton(path)));
                while (tw.next()) {
                    if (tw.getPathString().equals(path)) {
                        matchingPath = new PathChangeModel(tw.getPathString(), tw.getPathString(), null, 0,
                                tw.getRawMode(0), tw.getObjectId(0).getName(), commit.getId().getName(),
                                ChangeType.MODIFY);
                    }
                }
            } catch (Exception e) {
            } finally {
                tw.close();
            }
        }
    }

    final boolean isTree = matchingPath == null ? true : matchingPath.isTree();
    final boolean isSubmodule = matchingPath == null ? false : matchingPath.isSubmodule();

    // submodule
    final String submodulePath;
    final boolean hasSubmodule;
    if (isSubmodule) {
        SubmoduleModel submodule = getSubmodule(submodules, repositoryName,
                matchingPath == null ? null : matchingPath.path);
        submodulePath = submodule.gitblitPath;
        hasSubmodule = submodule.hasSubmodule;
    } else {
        submodulePath = "";
        hasSubmodule = false;
    }

    final Map<ObjectId, List<RefModel>> allRefs = JGitUtils.getAllRefs(r, showRemoteRefs);
    List<RevCommit> commits;
    if (pageResults) {
        // Paging result set
        commits = JGitUtils.getRevLog(r, objectId, path, pageOffset * itemsPerPage, itemsPerPage);
    } else {
        // Fixed size result set
        commits = JGitUtils.getRevLog(r, objectId, path, 0, limit);
    }

    // inaccurate way to determine if there are more commits.
    // works unless commits.size() represents the exact end.
    hasMore = commits.size() >= itemsPerPage;

    final int hashLen = app().settings().getInteger(Keys.web.shortCommitIdLength, 6);
    ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits);
    DataView<RevCommit> logView = new DataView<RevCommit>("commit", dp) {
        private static final long serialVersionUID = 1L;
        int counter;

        @Override
        public void populateItem(final Item<RevCommit> item) {
            final RevCommit entry = item.getModelObject();
            final Date date = JGitUtils.getAuthorDate(entry);

            item.add(WicketUtils.createDateLabel("commitDate", date, getTimeZone(), getTimeUtils()));

            // author search link
            String author = entry.getAuthorIdent().getName();
            LinkPanel authorLink = new LinkPanel("commitAuthor", "list", author, GitSearchPage.class,
                    WicketUtils.newSearchParameter(repositoryName, null, author, Constants.SearchType.AUTHOR));
            setPersonSearchTooltip(authorLink, author, Constants.SearchType.AUTHOR);
            item.add(authorLink);

            // merge icon
            if (entry.getParentCount() > 1) {
                item.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
            } else {
                item.add(WicketUtils.newBlankImage("commitIcon"));
            }

            String shortMessage = entry.getShortMessage();
            String trimmedMessage = shortMessage;
            if (allRefs.containsKey(entry.getId())) {
                trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG_REFS);
            } else {
                trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG);
            }
            LinkPanel shortlog = new LinkPanel("commitShortMessage", "list subject", trimmedMessage,
                    CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()));
            if (!shortMessage.equals(trimmedMessage)) {
                WicketUtils.setHtmlTooltip(shortlog, shortMessage);
            }
            item.add(shortlog);

            item.add(new RefsPanel("commitRefs", repositoryName, entry, allRefs));

            if (isTree) {
                // tree
                item.add(new Label("hashLabel", getString("gb.tree") + "@"));
                LinkPanel commitHash = new LinkPanel("hashLink", null, entry.getName().substring(0, hashLen),
                        TreePage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()));
                WicketUtils.setCssClass(commitHash, "shortsha1");
                WicketUtils.setHtmlTooltip(commitHash, entry.getName());
                item.add(commitHash);

                Fragment links = new Fragment("historyLinks", "treeLinks", HistoryPanel.this);
                links.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class,
                        WicketUtils.newObjectParameter(repositoryName, entry.getName())));
                item.add(links);
            } else if (isSubmodule) {
                // submodule
                Repository repository = app().repositories().getRepository(repositoryName);
                String submoduleId = JGitUtils.getSubmoduleCommitId(repository, path, entry);
                repository.close();
                if (StringUtils.isEmpty(submoduleId)) {
                    // not a submodule at this commit, just a matching path
                    item.add(new Label("hashLabel").setVisible(false));
                    item.add(new Label("hashLink").setVisible(false));
                } else {
                    // really a submodule
                    item.add(new Label("hashLabel", submodulePath + "@"));
                    LinkPanel commitHash = new LinkPanel("hashLink", null, submoduleId.substring(0, hashLen),
                            TreePage.class, WicketUtils.newObjectParameter(submodulePath, submoduleId));
                    WicketUtils.setCssClass(commitHash, "shortsha1");
                    WicketUtils.setHtmlTooltip(commitHash, submoduleId);
                    item.add(commitHash.setEnabled(hasSubmodule));
                }
                Fragment links = new Fragment("historyLinks", "treeLinks", HistoryPanel.this);
                links.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class,
                        WicketUtils.newObjectParameter(repositoryName, entry.getName())));
                item.add(links);
            } else {
                // commit
                item.add(new Label("hashLabel", getString("gb.blob") + "@"));
                LinkPanel commitHash = new LinkPanel("hashLink", null, entry.getName().substring(0, hashLen),
                        BlobPage.class, WicketUtils.newPathParameter(repositoryName, entry.getName(), path));
                WicketUtils.setCssClass(commitHash, "sha1");
                WicketUtils.setHtmlTooltip(commitHash, entry.getName());
                item.add(commitHash);

                Fragment links = new Fragment("historyLinks", "blobLinks", HistoryPanel.this);
                links.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class,
                        WicketUtils.newObjectParameter(repositoryName, entry.getName())));
                links.add(new BookmarkablePageLink<Void>("difftocurrent", BlobDiffPage.class,
                        WicketUtils.newBlobDiffParameter(repositoryName, entry.getName(), objectId, path))
                                .setEnabled(counter > 0));
                item.add(links);
            }

            WicketUtils.setAlternatingBackground(item, counter);
            counter++;
        }
    };
    add(logView);

    // determine to show pager, more, or neither
    if (limit <= 0) {
        // no display limit
        add(new Label("moreHistory", "").setVisible(false));
    } else {
        if (pageResults) {
            // paging
            add(new Label("moreHistory", "").setVisible(false));
        } else {
            // more
            if (commits.size() == limit) {
                // show more
                add(new LinkPanel("moreHistory", "link", new StringResourceModel("gb.moreHistory", this, null),
                        HistoryPage.class, WicketUtils.newPathParameter(repositoryName, objectId, path)));
            } else {
                // no more
                add(new Label("moreHistory", "").setVisible(false));
            }
        }
    }
}

From source file:com.gitblit.wicket.panels.TicketListPanel.java

License:Apache License

public TicketListPanel(String wicketId, List<QueryResult> list, final boolean showSwatch,
        final boolean showRepository) {
    super(wicketId);

    final ListDataProvider<QueryResult> dp = new ListDataProvider<QueryResult>(list);
    DataView<QueryResult> dataView = new DataView<QueryResult>("row", dp) {
        private static final long serialVersionUID = 1L;

        @Override/*from   ww w.j a v  a  2s  .c om*/
        protected void populateItem(Item<QueryResult> item) {
            final QueryResult ticket = item.getModelObject();

            if (showSwatch) {
                // set repository color
                String color = StringUtils.getColor(StringUtils.stripDotGit(ticket.repository));
                WicketUtils.setCssStyle(item, MessageFormat.format("border-left: 2px solid {0};", color));
            }

            PageParameters tp = WicketUtils.newObjectParameter(ticket.repository, "" + ticket.number);

            if (showRepository) {
                String name = StringUtils.stripDotGit(ticket.repository);
                PageParameters rp = WicketUtils.newOpenTicketsParameter(ticket.repository);
                LinkPanel link = new LinkPanel("ticketsLink", null, name, TicketsPage.class, rp);
                WicketUtils.setCssBackground(link, name);
                item.add(link);
            } else {
                item.add(new Label("ticketsLink").setVisible(false));
            }

            Label icon = TicketsUI.getStateIcon("state", ticket.type, ticket.status, ticket.severity);
            WicketUtils.addCssClass(icon, TicketsUI.getSeverityClass(ticket.severity));
            item.add(icon);

            item.add(new Label("id", "" + ticket.number));
            UserModel creator = app().users().getUserModel(ticket.createdBy);
            if (creator != null) {
                item.add(new LinkPanel("createdBy", null, creator.getDisplayName(), UserPage.class,
                        WicketUtils.newUsernameParameter(ticket.createdBy)));
            } else {
                item.add(new Label("createdBy", ticket.createdBy));
            }
            item.add(WicketUtils.createDateLabel("createDate", ticket.createdAt,
                    GitBlitWebSession.get().getTimezone(), getTimeUtils(), false));

            if (ticket.updatedAt == null) {
                item.add(new Label("updated").setVisible(false));
            } else {
                Fragment updated = new Fragment("updated", "updatedFragment", TicketListPanel.this);
                UserModel updater = app().users().getUserModel(ticket.updatedBy);
                if (updater != null) {
                    updated.add(new LinkPanel("updatedBy", null, updater.getDisplayName(), UserPage.class,
                            WicketUtils.newUsernameParameter(ticket.updatedBy)));
                } else {
                    updated.add(new Label("updatedBy", ticket.updatedBy));
                }
                updated.add(WicketUtils.createDateLabel("updateDate", ticket.updatedAt,
                        GitBlitWebSession.get().getTimezone(), getTimeUtils(), false));
                item.add(updated);
            }

            item.add(new LinkPanel("title", "list subject",
                    StringUtils.trimString(ticket.title, Constants.LEN_SHORTLOG), TicketsPage.class, tp));

            ListDataProvider<String> labelsProvider = new ListDataProvider<String>(ticket.getLabels());
            DataView<String> labelsView = new DataView<String>("labels", labelsProvider) {
                private static final long serialVersionUID = 1L;

                @Override
                public void populateItem(final Item<String> labelItem) {
                    RepositoryModel repository = app().repositories().getRepositoryModel(ticket.repository);
                    Label label;
                    TicketLabel tLabel;
                    if (repository == null) {
                        label = new Label("label", labelItem.getModelObject());
                        tLabel = new TicketLabel(labelItem.getModelObject());
                    } else {
                        Repository db = app().repositories().getRepository(repository.name);
                        BugtraqProcessor btp = new BugtraqProcessor(app().settings());
                        String content = btp.processText(db, repository.name, labelItem.getModelObject());
                        String safeContent = app().xssFilter().relaxed(content);
                        db.close();

                        label = new Label("label", safeContent);
                        label.setEscapeModelStrings(false);

                        tLabel = app().tickets().getLabel(repository, labelItem.getModelObject());
                    }

                    String background = MessageFormat.format("background-color:{0};", tLabel.color);
                    label.add(new AttributeModifier("style", background));
                    labelItem.add(label);
                }
            };
            item.add(labelsView);

            if (StringUtils.isEmpty(ticket.responsible)) {
                item.add(new Label("responsible").setVisible(false));
            } else {
                UserModel responsible = app().users().getUserModel(ticket.responsible);
                if (responsible == null) {
                    responsible = new UserModel(ticket.responsible);
                }
                AvatarImage avatar = new AvatarImage("responsible", responsible.getDisplayName(),
                        responsible.emailAddress, null, 16, true);
                avatar.setTooltip(getString("gb.responsible") + ": " + responsible.getDisplayName());
                item.add(avatar);
            }

            // votes indicator
            Label v = new Label("votes", "" + ticket.votesCount);
            WicketUtils.setHtmlTooltip(v, getString("gb.votes"));
            item.add(v.setVisible(ticket.votesCount > 0));

            // watching indicator
            item.add(
                    new Label("watching").setVisible(ticket.isWatching(GitBlitWebSession.get().getUsername())));

            // priority indicator
            Label priorityIcon = TicketsUI.getPriorityIcon("priority", ticket.priority);
            WicketUtils.addCssClass(priorityIcon, TicketsUI.getPriorityClass(ticket.priority));
            item.add(priorityIcon.setVisible(true));

            // status indicator
            String css = TicketsUI.getLozengeClass(ticket.status, true);
            Label l = new Label("status", ticket.status.toString());
            WicketUtils.setCssClass(l, css);
            item.add(l);

            // add the ticket indicators/icons
            List<Indicator> indicators = new ArrayList<Indicator>();

            // comments
            if (ticket.commentsCount > 0) {
                int count = ticket.commentsCount;
                String pattern = getString("gb.nComments");
                if (count == 1) {
                    pattern = getString("gb.oneComment");
                }
                indicators.add(new Indicator("fa fa-comment", count, pattern));
            }

            // participants
            if (!ArrayUtils.isEmpty(ticket.participants)) {
                int count = ticket.participants.size();
                if (count > 1) {
                    String pattern = getString("gb.nParticipants");
                    indicators.add(new Indicator("fa fa-user", count, pattern));
                }
            }

            // attachments
            if (!ArrayUtils.isEmpty(ticket.attachments)) {
                int count = ticket.attachments.size();
                String pattern = getString("gb.nAttachments");
                if (count == 1) {
                    pattern = getString("gb.oneAttachment");
                }
                indicators.add(new Indicator("fa fa-file", count, pattern));
            }

            // patchset revisions
            if (ticket.patchset != null) {
                int count = ticket.patchset.commits;
                String pattern = getString("gb.nCommits");
                if (count == 1) {
                    pattern = getString("gb.oneCommit");
                }
                indicators.add(new Indicator("fa fa-code", count, pattern));
            }

            // milestone
            if (!StringUtils.isEmpty(ticket.milestone)) {
                indicators.add(new Indicator("fa fa-bullseye", ticket.milestone));
            }

            ListDataProvider<Indicator> indicatorsDp = new ListDataProvider<Indicator>(indicators);
            DataView<Indicator> indicatorsView = new DataView<Indicator>("indicators", indicatorsDp) {
                private static final long serialVersionUID = 1L;

                @Override
                public void populateItem(final Item<Indicator> item) {
                    Indicator indicator = item.getModelObject();
                    String tooltip = indicator.getTooltip();

                    Label icon = new Label("icon");
                    WicketUtils.setCssClass(icon, indicator.css);
                    item.add(icon);

                    if (indicator.count > 0) {
                        Label count = new Label("count", "" + indicator.count);
                        item.add(count.setVisible(!StringUtils.isEmpty(tooltip)));
                    } else {
                        item.add(new Label("count").setVisible(false));
                    }

                    WicketUtils.setHtmlTooltip(item, tooltip);
                }
            };
            item.add(indicatorsView);
        }
    };

    add(dataView);
}

From source file:com.github.checkstyle.regression.git.DiffParser.java

License:Open Source License

/**
 * Parses the diff between a given branch and the master in the give repository path.
 * @param repositoryPath the path of checkstyle repository
 * @param branchName     the name of the branch to be compared with master
 * @return a list of {@link GitChange} to represent the changes
 * @throws IOException     JGit library exception
 * @throws GitAPIException JGit library exception
 *///  w  w w .j  a v a2s  .co  m
public static List<GitChange> parse(String repositoryPath, String branchName)
        throws IOException, GitAPIException {
    final List<GitChange> returnValue = new LinkedList<>();
    final File gitDir = new File(repositoryPath, ".git");
    final Repository repository = new FileRepositoryBuilder().setGitDir(gitDir).readEnvironment().findGitDir()
            .build();

    try {
        final TreeParserPair pair = getTreeParserPair(repository, branchName);
        final Git git = new Git(repository);
        final DiffFormatter formatter = new DiffFormatter(DisabledOutputStream.INSTANCE);
        formatter.setRepository(repository);

        try {
            final List<DiffEntry> diffs = git.diff().setOldTree(pair.commonAncestorTreeParser)
                    .setNewTree(pair.prTreeParser).call().stream()
                    .filter(entry -> entry.getChangeType() != DiffEntry.ChangeType.DELETE)
                    .collect(Collectors.toList());
            for (DiffEntry diff : diffs) {
                returnValue.add(convertDiffEntryToGitChange(diff, formatter));
            }
        } finally {
            git.close();
        }
    } finally {
        repository.close();
    }

    return returnValue;
}

From source file:com.github.kaitoy.goslings.server.dao.jgit.RepositoryResolver.java

License:Open Source License

/**
 * Get the {@link Git} instance which corresponds to the repository specified by the given token.
 *
 * @param token token/*w w  w .j a v  a 2  s  . c om*/
 * @return a {@link Git} instance. Never null.
 * @throws DaoException if any errors.
 */
Git getGit(String token) {
    if (GITS.containsKey(token)) {
        return GITS.get(token);
    }

    File gitDir = Paths.get(REPOS_DIR, token).toFile();
    Git git = null;
    try {
        Repository repo = new FileRepositoryBuilder().setGitDir(gitDir).readEnvironment().findGitDir().build();
        git = new Git(repo);
        WeakReferenceMonitor.monitor(git, () -> repo.close());
        GITS.put(token, git);
        return git;
    } catch (IOException e) {
        LOG.error("Failed to build a repo {}", gitDir, e);
        throw new DaoException("The server couldn't find a repository by the token: " + token, e);
    }
}