List of usage examples for org.eclipse.jgit.api Git getRepository
public Repository getRepository()
From source file:io.fabric8.forge.rest.git.RepositoryResource.java
License:Apache License
protected String doDiff(Git git, String objectId, String baseObjectId, String pathOrBlobPath) throws IOException { Repository r = git.getRepository(); String blobPath = trimLeadingSlash(pathOrBlobPath); RevCommit commit;// w w w . j a v a 2 s.co m if (Strings.isNotBlank(objectId)) { commit = CommitUtils.getCommit(r, objectId); } else { commit = CommitUtils.getHead(r); } RevCommit baseCommit = null; if (Strings.isNotBlank(baseObjectId) && !Objects.equals(baseObjectId, objectId)) { baseCommit = CommitUtils.getCommit(r, baseObjectId); } ByteArrayOutputStream buffer = new ByteArrayOutputStream(); DiffFormatter formatter = createDiffFormatter(r, buffer); RevTree commitTree = commit.getTree(); RevTree baseTree; if (baseCommit == null) { if (commit.getParentCount() > 0) { final RevWalk rw = new RevWalk(r); RevCommit parent = rw.parseCommit(commit.getParent(0).getId()); rw.dispose(); baseTree = parent.getTree(); } else { // FIXME initial commit. no parent?! baseTree = commitTree; } } else { baseTree = baseCommit.getTree(); } List<DiffEntry> diffEntries = formatter.scan(baseTree, commitTree); if (blobPath != null && blobPath.length() > 0) { for (DiffEntry diffEntry : diffEntries) { if (diffEntry.getNewPath().equalsIgnoreCase(blobPath)) { formatter.format(diffEntry); break; } } } else { formatter.format(diffEntries); } formatter.flush(); return buffer.toString(); }
From source file:io.fabric8.forge.rest.git.RepositoryResource.java
License:Apache License
protected CommitDetail doCommitDetail(Git git, String commitId) throws IOException { RevCommit baseCommit = doGetCommit(git, commitId); if (baseCommit == null) { return null; } else {//from ww w.j av a 2s . com List<DiffInfo> diffs = new ArrayList<>(); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); Repository r = git.getRepository(); DiffFormatter formatter = createDiffFormatter(r, buffer); //git.diff().setNewTree() RevTree commitTree = baseCommit.getTree(); RevTree baseTree = null; ObjectId parentId = null; if (baseCommit.getParentCount() > 0) { final RevWalk rw = new RevWalk(r); parentId = baseCommit.getParent(0).getId(); RevCommit parent = rw.parseCommit(parentId); baseTree = parent.getTree(); rw.dispose(); } else { // FIXME initial commit. no parent?! baseTree = commitTree; } if (baseTree == null) { baseTree = baseCommit.getTree(); } List<DiffEntry> diffEntries = formatter.scan(baseTree, commitTree); if (diffEntries.isEmpty()) { // lets try get the previous commit String previousCommit = commitId + "~1"; ObjectId resolve = r.resolve(previousCommit); RevTree newTree = null; if (resolve != null) { final RevWalk rw = new RevWalk(r); RevCommit parent = rw.parseCommit(resolve); newTree = parent.getTree(); rw.dispose(); } if (baseTree == null || newTree == null || !Objects.equals(baseTree.getId(), newTree.getId())) { diffEntries = formatter.scan(newTree, commitTree); } } for (DiffEntry diffEntry : diffEntries) { formatter.format(diffEntry); formatter.flush(); String diff = buffer.toString(); buffer.reset(); DiffInfo diffInfo = createDiffInfo(diffEntry, diff); diffs.add(diffInfo); } CommitInfo commitInfo = createCommitInfo(baseCommit); return new CommitDetail(commitInfo, diffs); } }
From source file:io.fabric8.forge.rest.git.RepositoryResource.java
License:Apache License
protected static RevCommit doGetCommit(Git git, String commitId) { Repository repository = git.getRepository(); return CommitUtils.getCommit(repository, commitId); }
From source file:io.fabric8.forge.rest.git.RepositoryResource.java
License:Apache License
protected List<CommitTreeInfo> doGetCommitTree(Git git, String commitId) { Repository repository = git.getRepository(); List<CommitTreeInfo> list = new ArrayList<CommitTreeInfo>(); RevCommit commit = CommitUtils.getCommit(repository, commitId); if (commit != null) { RevWalk rw = new RevWalk(repository); try {//from ww w.j ava 2s .c o m if (commit.getParentCount() == 0) { TreeWalk treeWalk = new TreeWalk(repository); treeWalk.reset(); treeWalk.setRecursive(true); treeWalk.addTree(commit.getTree()); while (treeWalk.next()) { String pathString = treeWalk.getPathString(); ObjectId objectId = treeWalk.getObjectId(0); int rawMode = treeWalk.getRawMode(0); list.add(new CommitTreeInfo(pathString, pathString, 0, rawMode, objectId.getName(), commit.getId().getName(), DiffEntry.ChangeType.ADD)); } treeWalk.close(); } else { RevCommit parent = rw.parseCommit(commit.getParent(0).getId()); DiffFormatter df = new DiffFormatter(DisabledOutputStream.INSTANCE); df.setRepository(repository); df.setDiffComparator(RawTextComparator.DEFAULT); df.setDetectRenames(true); List<DiffEntry> diffs = df.scan(parent.getTree(), commit.getTree()); for (DiffEntry diff : diffs) { String objectId = diff.getNewId().name(); if (diff.getChangeType().equals(DiffEntry.ChangeType.DELETE)) { list.add(new CommitTreeInfo(diff.getOldPath(), diff.getOldPath(), 0, diff.getNewMode().getBits(), objectId, commit.getId().getName(), diff.getChangeType())); } else if (diff.getChangeType().equals(DiffEntry.ChangeType.RENAME)) { list.add(new CommitTreeInfo(diff.getOldPath(), diff.getNewPath(), 0, diff.getNewMode().getBits(), objectId, commit.getId().getName(), diff.getChangeType())); } else { list.add(new CommitTreeInfo(diff.getNewPath(), diff.getNewPath(), 0, diff.getNewMode().getBits(), objectId, commit.getId().getName(), diff.getChangeType())); } } } } catch (Throwable e) { LOG.warn("Failed to walk tree for commit " + commitId + ". " + e, e); } finally { rw.dispose(); } } return list; }
From source file:io.fabric8.forge.rest.git.RepositoryResource.java
License:Apache License
protected List<CommitInfo> doHistory(Git git, String objectId, String pathOrBlobPath, int limit) { List<CommitInfo> results = new ArrayList<CommitInfo>(); Repository r = git.getRepository(); try {/*from w w w . java2 s . c o m*/ String head = getHEAD(git); } catch (Exception e) { LOG.error("Cannot find HEAD of this git repository! " + e, e); return results; } String path = trimLeadingSlash(pathOrBlobPath); CommitFinder finder = new CommitFinder(r); CommitListFilter filter = new CommitListFilter(); if (Strings.isNotBlank(path)) { finder.setFilter(PathFilterUtils.and(path)); } finder.setFilter(filter); if (limit > 0) { finder.setFilter(new CommitLimitFilter(limit).setStop(true)); } if (Strings.isNotBlank(objectId)) { finder.findFrom(objectId); } else { if (Strings.isNotBlank(branch)) { ObjectId branchObjectId = getBranchObjectId(git); if (branchObjectId != null) { finder = finder.findFrom(branchObjectId); } else { finder = finder.findInBranches(); } } else { finder.find(); } } List<RevCommit> commits = filter.getCommits(); for (RevCommit entry : commits) { CommitInfo commitInfo = createCommitInfo(entry); results.add(commitInfo); } return results; }
From source file:io.fabric8.forge.rest.git.RepositoryResource.java
License:Apache License
protected <T> T gitOperation(final GitContext context, final GitOperation<T> operation) throws Exception { return lockManager.withLock(gitFolder, new Callable<T>() { @Override/*from ww w . jav a 2 s. co m*/ public T call() throws Exception { projectFileSystem.cloneRepoIfNotExist(userDetails, basedir, cloneUrl); FileRepositoryBuilder builder = new FileRepositoryBuilder(); Repository repository = builder.setGitDir(gitFolder).readEnvironment() // scan environment GIT_* variables .findGitDir() // scan up the file system tree .build(); Git git = new Git(repository); if (Strings.isNullOrBlank(origin)) { throw new IOException("Could not find remote git URL for folder " + gitFolder.getPath()); } CredentialsProvider credentials = userDetails.createCredentialsProvider(); createPersonIdent(); disableSslCertificateChecks(); LOG.info("Stashing local changes to the repo"); boolean hasHead = true; try { git.log().all().call(); hasHead = git.getRepository().getAllRefs().containsKey("HEAD"); } catch (NoHeadException e) { hasHead = false; } if (hasHead) { // lets stash any local changes just in case.. try { git.stashCreate().setPerson(personIdent).setWorkingDirectoryMessage("Stash before a write") .setRef("HEAD").call(); } catch (Throwable e) { LOG.error("Failed to stash changes: " + e, e); Throwable cause = e.getCause(); if (cause != null && cause != e) { LOG.error("Cause: " + cause, cause); } } } checkoutBranch(git, context); if (context.isRequirePull()) { doPull(git, context); } T result = operation.call(git, context); if (Strings.isNullOrBlank(message)) { message = ""; } if (context.isRequireCommit() && hasGitChanges(git)) { doAddCommitAndPushFiles(git, userDetails, personIdent, branch, origin, message, isPushOnCommit()); } return result; } }); }
From source file:io.fabric8.forge.rest.git.RepositoryResource.java
License:Apache License
public String currentBranch(Git git) { try {// w w w .ja v a 2s . co m return git.getRepository().getBranch(); } catch (IOException e) { LOG.warn("Failed to get the current branch due: " + e.getMessage() + ". This exception is ignored.", e); return null; } }
From source file:io.fabric8.forge.rest.git.RepositoryResource.java
License:Apache License
protected String doGetContent(Git git, String objectId, String pathOrBlobPath) { objectId = defaultObjectId(git, objectId); Repository r = git.getRepository(); String blobPath = trimLeadingSlash(pathOrBlobPath); return BlobUtils.getContent(r, objectId, blobPath); }
From source file:io.fabric8.forge.rest.git.RepositoryResource.java
License:Apache License
protected String defaultObjectId(Git git, String objectId) { if (objectId == null || objectId.trim().length() == 0) { RevCommit commit = CommitUtils.getHead(git.getRepository()); objectId = commit.getName();//from ww w. j a v a2s. c om } return objectId; }
From source file:io.fabric8.forge.rest.git.RepositoryResource.java
License:Apache License
protected void configureBranch(Git git, String branch) { // lets update the merge config if (Strings.isNotBlank(branch)) { StoredConfig config = git.getRepository().getConfig(); if (Strings.isNullOrBlank(config.getString("branch", branch, "remote")) || Strings.isNullOrBlank(config.getString("branch", branch, "merge"))) { config.setString("branch", branch, "remote", getRemote()); config.setString("branch", branch, "merge", "refs/heads/" + branch); try { config.save();//from w w w. ja v a2 s. co m } catch (IOException e) { LOG.error("Failed to save the git configuration to " + basedir + " with branch " + branch + " on remote repo: " + remoteRepository + " due: " + e.getMessage() + ". This exception is ignored.", e); } } } }