List of usage examples for org.eclipse.jgit.lib ObjectId equals
@SuppressWarnings({ "NonOverridingEquals", "AmbiguousMethodReference" }) public final boolean equals(AnyObjectId other)
From source file:net.riezebos.thoth.content.impl.GitContentManager.java
License:Apache License
@Override protected synchronized String cloneOrPull() throws ContentManagerException { StringBuilder log = new StringBuilder(); try {//from ww w . j a v a 2 s .com Configuration config = getConfiguration(); RepositoryDefinition repositoryDefinition = getContextDefinition().getRepositoryDefinition(); String repositoryUrl = repositoryDefinition.getLocation(); String workspaceLocation = config.getWorkspaceLocation(); if (StringUtils.isBlank(workspaceLocation)) throw new IllegalArgumentException("No environment variable or system variable named " + Configuration.WORKSPACELOCATION + " was set"); File file = new File(workspaceLocation); if (!file.isDirectory()) { severe(log, "The library path " + workspaceLocation + " does not exist. Cannot initialize content manager"); } else { try { String contextFolder = getContextFolder(); File target = new File(contextFolder); CredentialsProvider credentialsProvider = getCredentialsProvider(); if (target.isDirectory()) { try (Git repos = getRepository()) { Repository repository = repos.getRepository(); ObjectId oldHead = repository.resolve(HEAD_TREE); PullResult pullResult = repos.pull().setCredentialsProvider(credentialsProvider).call(); ObjectId newHead = repository.resolve(HEAD_TREE); boolean changes = (oldHead == null && newHead != null)// || (oldHead != null && !oldHead.equals(newHead)); if (changes) notifyContextContentsChanged(); String message = pullResult.isSuccessful() ? ": Pull successful, " : ": Pull of failed, "; message += changes ? CHANGES_DETECTED_MSG : NO_CHANGES_DETECTED_MSG; info(log, getContextName() + message); setLatestRefresh(new Date()); } catch (Exception e) { severe(log, e); } } else { info(log, getContextName() + ": Cloning from " + repositoryUrl + " to " + contextFolder); target.mkdirs(); try (Git result = Git.cloneRepository()// .setURI(repositoryUrl)// .setBranch(getBranch())// .setCredentialsProvider(credentialsProvider)// .setDirectory(target).call()) { info(log, getContextName() + ": Cloned repository: " + result.getRepository().getDirectory()); setLatestRefresh(new Date()); notifyContextContentsChanged(); } catch (Exception e) { severe(log, e); } } } catch (Exception e) { severe(log, e); } } } catch (Exception e) { throw new ContentManagerException(e); } return log.toString().trim(); }
From source file:net.riezebos.thoth.content.impl.GitContentManager.java
License:Apache License
protected SourceDiff createSourceDiff(Repository repository, RevCommit revCommit, DiffEntry diff) throws MissingObjectException, IOException, UnsupportedEncodingException { SourceDiff result;/* www .java 2 s . co m*/ ObjectId oldId = diff.getOldId().toObjectId(); ObjectId newId = diff.getNewId().toObjectId(); String oldSource = getContents(repository, oldId); String newSource = getContents(repository, newId); if (oldId.equals(newId)) oldSource = ""; PersonIdent authorIdent = revCommit.getAuthorIdent(); String author = authorIdent == null ? "Unknown" : authorIdent.getName(); Date timeModified = new Date(((long) revCommit.getCommitTime()) * 1000); result = new SourceDiff(author, oldSource, newSource, timeModified); result.setCommitMessage(revCommit.getFullMessage()); return result; }
From source file:org.cicomponents.git.impl.LatestRevisionGitBranchMonitor.java
License:Mozilla Public License
@SneakyThrows protected void emitRevisionIfNecessary(RefsChangedEvent event) { synchronized (git) { ObjectId newHead = event.getRepository().findRef("refs/heads/" + branch).getObjectId(); if (!newHead.equals(head)) { log.info("Detected refs change for {}, branch {}, old: {}, new: {}", git, branch, head, newHead); WorkingDirectory workingDirectory = getWorkingDirectory(); String directory = workingDirectory.getDirectory() + "/git"; Git clone = Git.cloneRepository() .setURI("file://" + git.getRepository().getDirectory().getAbsolutePath()) .setDirectory(new File(directory)).call(); Ref checkedOutRef = clone.checkout().setName(newHead.getName()).call(); assert checkedOutRef == newHead; GitRevision resource = new LocalGitRevision(clone, newHead, workingDirectory); ResourceHolder<GitRevision> holder = new SimpleResourceHolder<>(resource); emit(holder);//from ww w .j a v a2 s .c o m head = newHead; persistentMap.put(head.getName(), head.getName()); } } }
From source file:org.craftercms.studio.impl.v1.repository.git.GitContentRepository.java
License:Open Source License
@Override public List<RepoOperationTO> getOperations(String site, String commitIdFrom, String commitIdTo) { List<RepoOperationTO> operations = new ArrayList<>(); synchronized (helper.getRepository(site, StringUtils.isEmpty(site) ? GitRepositories.GLOBAL : SANDBOX)) { try {//from w w w . j a v a 2s . c om // Get the sandbox repo, and then get a reference to the commitId we received and another for head Repository repo = helper.getRepository(site, SANDBOX); ObjectId objCommitIdFrom = repo.resolve(commitIdFrom); ObjectId objCommitIdTo = repo.resolve(commitIdTo); // If the commitIdFrom is the same as commitIdTo, there is nothing to calculate, otherwise, let's do it if (!objCommitIdFrom.equals(objCommitIdTo)) { // Compare HEAD with commitId we're given // Get list of commits between commitId and HEAD in chronological order try (Git git = new Git(repo)) { // Get the log of all the commits between commitId and head Iterable<RevCommit> commits = git.log().addRange(objCommitIdFrom, objCommitIdTo).call(); // Loop through through the commits and diff one from the next util head ObjectId prevCommitId = objCommitIdFrom; ObjectId nextCommitId = objCommitIdFrom; Iterator<RevCommit> iterator = commits.iterator(); while (iterator.hasNext()) { RevCommit commit = iterator.next(); nextCommitId = commit.getId(); RevTree prevTree = helper.getTreeForCommit(repo, prevCommitId.getName()); RevTree nextTree = helper.getTreeForCommit(repo, nextCommitId.getName()); try (ObjectReader reader = repo.newObjectReader()) { CanonicalTreeParser prevCommitTreeParser = new CanonicalTreeParser(); CanonicalTreeParser nextCommitTreeParser = new CanonicalTreeParser(); prevCommitTreeParser.reset(reader, prevTree.getId()); nextCommitTreeParser.reset(reader, nextTree.getId()); // Diff the two commit Ids List<DiffEntry> diffEntries = git.diff().setOldTree(prevCommitTreeParser) .setNewTree(nextCommitTreeParser).call(); // Now that we have a diff, let's itemize the file changes, pack them into a TO // and add them to the list of RepoOperations to return to the caller // also include date/time of commit by taking number of seconds and multiply by 1000 and // convert to java date before sending over operations.addAll( processDiffEntry(diffEntries, new Date(commit.getCommitTime() * 1000))); prevCommitId = nextCommitId; } } } catch (GitAPIException e) { logger.error("Error getting operations for site " + site + " from commit ID: " + commitIdFrom + " to commit ID: " + commitIdTo, e); } } } catch (IOException e) { logger.error("Error getting operations for site " + site + " from commit ID: " + commitIdFrom + " to commit ID: " + commitIdTo, e); } } return operations; }
From source file:org.eclipse.egit.core.synchronize.GitCommitsModelCache.java
License:Open Source License
/** * Scans given {@code repo} and build list of commits between two given * RevCommit objectId's. Each commit contains list of changed resources * * @param repo//w w w .j a v a 2 s. com * repository that should be scanned * @param srcId * RevCommit id that git history traverse will start from * @param dstId * RevCommit id that git history traverse will end * @param pathFilter * path filter definition or {@code null} when all paths should * be included * @return list of {@link Commit} object's between {@code srcId} and * {@code dstId} * @throws IOException */ public static List<Commit> build(Repository repo, ObjectId srcId, ObjectId dstId, TreeFilter pathFilter) throws IOException { if (dstId.equals(srcId)) return new ArrayList<Commit>(0); final RevWalk rw = new RevWalk(repo); final RevFlag localFlag = rw.newFlag("local"); //$NON-NLS-1$ final RevFlag remoteFlag = rw.newFlag("remote"); //$NON-NLS-1$ final RevFlagSet allFlags = new RevFlagSet(); allFlags.add(localFlag); allFlags.add(remoteFlag); rw.carry(allFlags); RevCommit srcCommit = rw.parseCommit(srcId); srcCommit.add(localFlag); rw.markStart(srcCommit); srcCommit = null; // free not needed resources RevCommit dstCommit = rw.parseCommit(dstId); dstCommit.add(remoteFlag); rw.markStart(dstCommit); dstCommit = null; // free not needed resources if (pathFilter != null) rw.setTreeFilter(pathFilter); List<Commit> result = new ArrayList<Commit>(); for (RevCommit revCommit : rw) { if (revCommit.hasAll(allFlags)) break; Commit commit = new Commit(); commit.shortMessage = revCommit.getShortMessage(); commit.commitId = AbbreviatedObjectId.fromObjectId(revCommit); commit.authorName = revCommit.getAuthorIdent().getName(); commit.committerName = revCommit.getCommitterIdent().getName(); commit.commitDate = revCommit.getAuthorIdent().getWhen(); RevCommit actualCommit, parentCommit; if (revCommit.has(localFlag)) { actualCommit = revCommit; parentCommit = getParentCommit(revCommit); commit.direction = RIGHT; } else if (revCommit.has(remoteFlag)) { actualCommit = getParentCommit(revCommit); parentCommit = revCommit; commit.direction = LEFT; } else throw new GitCommitsModelDirectionException(); commit.children = getChangedObjects(repo, actualCommit, parentCommit, pathFilter, commit.direction); if (commit.children != null) result.add(commit); } rw.dispose(); return result; }
From source file:org.eclipse.egit.core.synchronize.GitFolderResourceVariant.java
License:Open Source License
/** * @param progress/* w w w .j ava 2 s .co m*/ * @return members * @throws IOException */ public IResourceVariant[] getMembers(IProgressMonitor progress) throws IOException { if (members != null) try { return members; } finally { progress.done(); } Repository repo = getRepository(); TreeWalk tw = new TreeWalk(repo); tw.reset(); int nth = tw.addTree(getObjectId()); int iteratorNth = tw.addTree(new FileTreeIterator(repo)); tw.setFilter(new NotIgnoredFilter(iteratorNth)); IProgressMonitor monitor = SubMonitor.convert(progress); monitor.beginTask(NLS.bind(CoreText.GitFolderResourceVariant_fetchingMembers, this), tw.getTreeCount()); List<IResourceVariant> result = new ArrayList<IResourceVariant>(); try { while (tw.next()) { if (monitor.isCanceled()) throw new OperationCanceledException(); ObjectId newObjectId = tw.getObjectId(nth); String path = getPath() + "/" + new String(tw.getRawPath()); //$NON-NLS-1$ if (!newObjectId.equals(zeroId())) if (tw.isSubtree()) result.add(new GitFolderResourceVariant(repo, getRevCommit(), newObjectId, path)); else result.add(new GitBlobResourceVariant(repo, getRevCommit(), newObjectId, path)); monitor.worked(1); } members = result.toArray(new IResourceVariant[result.size()]); return members; } finally { monitor.done(); } }
From source file:org.eclipse.egit.core.synchronize.GitResourceVariantTree.java
License:Open Source License
private IResourceVariant fetchVariant(IResource resource, IProgressMonitor monitor) throws TeamException { GitSynchronizeData gsd = gsds.getData(resource.getProject()); if (gsd == null) return null; Repository repo = gsd.getRepository(); String path = getPath(resource, repo); RevCommit revCommit = getRevCommit(gsd); if (revCommit == null) return null; if (path.length() == 0) return handleRepositoryRoot(resource, repo, revCommit); try {//from ww w . j a v a 2 s .c om if (monitor.isCanceled()) throw new OperationCanceledException(); TreeWalk tw = initializeTreeWalk(repo, path); int nth = tw.addTree(revCommit.getTree()); if (resource.getType() == IResource.FILE) { tw.setRecursive(true); if (tw.next() && !tw.getObjectId(nth).equals(zeroId())) return new GitBlobResourceVariant(repo, revCommit, tw.getObjectId(nth), path); } else { while (tw.next() && !path.equals(tw.getPathString())) { if (monitor.isCanceled()) throw new OperationCanceledException(); if (tw.isSubtree()) tw.enterSubtree(); } ObjectId objectId = tw.getObjectId(nth); if (!objectId.equals(zeroId())) return new GitFolderResourceVariant(repo, revCommit, objectId, path); } } catch (IOException e) { throw new TeamException(NLS.bind(CoreText.GitResourceVariantTree_couldNotFindResourceVariant, resource), e); } return null; }
From source file:org.eclipse.egit.core.synchronize.GitSyncInfo.java
License:Open Source License
private int calculateKindImpl(Repository repo, TreeWalk tw, int srcNth, int dstNth) throws IOException { ObjectId srcId = tw.getObjectId(srcNth); ObjectId dstId = tw.getObjectId(dstNth); if (srcId.equals(zeroId())) return INCOMING | ADDITION; if (dstId.equals(zeroId())) return OUTGOING | ADDITION; if (!srcId.equals(dstId)) { RevWalk rw = new RevWalk(repo); RevFlag srcFlag = rw.newFlag("source"); //$NON-NLS-1$ RevFlag dstFlag = rw.newFlag("destination"); //$NON-NLS-1$ initializeRevWalk(rw, srcFlag, dstFlag); RevCommit commit = rw.next();//from w w w . j ava 2s.c o m if (commit.has(srcFlag)) return OUTGOING | CHANGE; else if (commit.has(dstFlag)) return INCOMING | CHANGE; else return CONFLICTING | CHANGE; } return IN_SYNC; }
From source file:org.eclipse.egit.ui.internal.decorators.GitDocument.java
License:Open Source License
void populate() throws IOException { if (GitTraceLocation.QUICKDIFF.isActive()) GitTraceLocation.getTrace().traceEntry(GitTraceLocation.QUICKDIFF.getLocation(), resource); TreeWalk tw = null;// ww w . jav a2 s.co m RevWalk rw = null; try { RepositoryMapping mapping = RepositoryMapping.getMapping(resource); if (mapping == null) { setResolved(null, null, null, ""); //$NON-NLS-1$ return; } final String gitPath = mapping.getRepoRelativePath(resource); final Repository repository = mapping.getRepository(); String baseline = GitQuickDiffProvider.baseline.get(repository); if (baseline == null) baseline = Constants.HEAD; ObjectId commitId = repository.resolve(baseline); if (commitId != null) { if (commitId.equals(lastCommit)) { if (GitTraceLocation.QUICKDIFF.isActive()) GitTraceLocation.getTrace().trace(GitTraceLocation.QUICKDIFF.getLocation(), "(GitDocument) already resolved"); //$NON-NLS-1$ return; } } else { String msg = NLS.bind(UIText.GitDocument_errorResolveQuickdiff, new Object[] { baseline, resource, repository }); Activator.logError(msg, new Throwable()); setResolved(null, null, null, ""); //$NON-NLS-1$ return; } rw = new RevWalk(repository); RevCommit baselineCommit; try { baselineCommit = rw.parseCommit(commitId); } catch (IOException err) { String msg = NLS.bind(UIText.GitDocument_errorLoadCommit, new Object[] { commitId, baseline, resource, repository }); Activator.logError(msg, err); setResolved(null, null, null, ""); //$NON-NLS-1$ return; } RevTree treeId = baselineCommit.getTree(); if (treeId.equals(lastTree)) { if (GitTraceLocation.QUICKDIFF.isActive()) GitTraceLocation.getTrace().trace(GitTraceLocation.QUICKDIFF.getLocation(), "(GitDocument) already resolved"); //$NON-NLS-1$ return; } tw = TreeWalk.forPath(repository, gitPath, treeId); ObjectId id = tw.getObjectId(0); if (id.equals(ObjectId.zeroId())) { setResolved(null, null, null, ""); //$NON-NLS-1$ String msg = NLS.bind(UIText.GitDocument_errorLoadTree, new Object[] { treeId, baseline, resource, repository }); Activator.logError(msg, new Throwable()); setResolved(null, null, null, ""); //$NON-NLS-1$ return; } if (!id.equals(lastBlob)) { if (GitTraceLocation.QUICKDIFF.isActive()) GitTraceLocation.getTrace().trace(GitTraceLocation.QUICKDIFF.getLocation(), "(GitDocument) compareTo: " + baseline); //$NON-NLS-1$ ObjectLoader loader = repository.open(id, Constants.OBJ_BLOB); byte[] bytes = loader.getBytes(); String charset; charset = CompareUtils.getResourceEncoding(resource); // Finally we could consider validating the content with respect // to the content. We don't do that here. String s = new String(bytes, charset); setResolved(commitId, treeId, id, s); if (GitTraceLocation.QUICKDIFF.isActive()) GitTraceLocation.getTrace().trace(GitTraceLocation.QUICKDIFF.getLocation(), "(GitDocument) has reference doc, size=" + s.length() + " bytes"); //$NON-NLS-1$ //$NON-NLS-2$ } else { if (GitTraceLocation.QUICKDIFF.isActive()) GitTraceLocation.getTrace().trace(GitTraceLocation.QUICKDIFF.getLocation(), "(GitDocument) already resolved"); //$NON-NLS-1$ } } finally { if (tw != null) tw.release(); if (rw != null) rw.release(); if (GitTraceLocation.QUICKDIFF.isActive()) GitTraceLocation.getTrace().traceExit(GitTraceLocation.QUICKDIFF.getLocation()); } }
From source file:org.eclipse.egit.ui.internal.dialogs.CommitCombo.java
License:Open Source License
/** * Selects the item with is associated with given <code>objectId</code> * * @param objectId/*from ww w . j a v a 2s. c om*/ */ public void setSelectedElement(ObjectId objectId) { if (objectId == null) { return; } for (int i = 0; i < commits.size(); i++) if (objectId.equals(commits.get(i).objectId)) { combo.select(i); break; } }