Example usage for org.eclipse.jgit.diff DiffFormatter setProgressMonitor

List of usage examples for org.eclipse.jgit.diff DiffFormatter setProgressMonitor

Introduction

In this page you can find the example usage for org.eclipse.jgit.diff DiffFormatter setProgressMonitor.

Prototype

public void setProgressMonitor(ProgressMonitor pm) 

Source Link

Document

Set the progress monitor for long running rename detection.

Usage

From source file:org.eclipse.egit.core.op.CreatePatchOperation.java

License:Open Source License

public void execute(IProgressMonitor monitor) throws CoreException {
    EclipseGitProgressTransformer gitMonitor;
    if (monitor == null)
        gitMonitor = new EclipseGitProgressTransformer(new NullProgressMonitor());
    else//from  w w w . j  a v a 2  s. c o m
        gitMonitor = new EclipseGitProgressTransformer(monitor);

    final StringBuilder sb = new StringBuilder();
    final DiffFormatter diffFmt = new DiffFormatter(new ByteArrayOutputStream() {

        @Override
        public synchronized void write(byte[] b, int off, int len) {
            super.write(b, off, len);
            if (currentEncoding == null)
                sb.append(toString());
            else
                try {
                    sb.append(toString(currentEncoding));
                } catch (UnsupportedEncodingException e) {
                    sb.append(toString());
                }
            reset();
        }
    }) {
        private IProject project;

        @Override
        public void format(DiffEntry ent) throws IOException, CorruptObjectException, MissingObjectException {
            // for "workspace patches" add project header each time project changes
            if (DiffHeaderFormat.WORKSPACE == headerFormat) {
                IProject p = getProject(ent);
                if (!p.equals(project)) {
                    project = p;
                    getOutputStream().write(encodeASCII("#P " + project.getName() + "\n")); //$NON-NLS-1$ //$NON-NLS-2$
                }
            }
            super.format(ent);
        }
    };

    diffFmt.setProgressMonitor(gitMonitor);
    diffFmt.setContext(contextLines);

    if (headerFormat != null && headerFormat != DiffHeaderFormat.NONE)
        writeGitPatchHeader(sb);

    diffFmt.setRepository(repository);
    diffFmt.setPathFilter(pathFilter);

    try {
        if (commit != null) {
            RevCommit[] parents = commit.getParents();
            if (parents.length > 1)
                throw new IllegalStateException(CoreText.CreatePatchOperation_cannotCreatePatchForMergeCommit);
            if (parents.length == 0)
                throw new IllegalStateException(CoreText.CreatePatchOperation_cannotCreatePatchForFirstCommit);

            List<DiffEntry> diffs = diffFmt.scan(parents[0].getId(), commit.getId());
            for (DiffEntry ent : diffs) {
                String path;
                if (ChangeType.DELETE.equals(ent.getChangeType()))
                    path = ent.getOldPath();
                else
                    path = ent.getNewPath();
                currentEncoding = CompareCoreUtils.getResourceEncoding(repository, path);
                diffFmt.format(ent);
            }
        } else
            diffFmt.format(new DirCacheIterator(repository.readDirCache()), new FileTreeIterator(repository));
    } catch (IOException e) {
        Activator.logError(CoreText.CreatePatchOperation_patchFileCouldNotBeWritten, e);
    }

    if (DiffHeaderFormat.WORKSPACE == headerFormat)
        updateWorkspacePatchPrefixes(sb, diffFmt);

    // trim newline
    if (sb.charAt(sb.length() - 1) == '\n')
        sb.setLength(sb.length() - 1);

    patchContent = sb.toString();
}

From source file:org.eclipse.orion.server.gerritfs.DiffCommand.java

License:Eclipse Distribution License

/**
 * Executes the {@code Diff} command with all the options and parameters collected by the setter methods (e.g. {@link #setCached(boolean)} of this class.
 * Each instance of this class should only be used for one invocation of the command. Don't call this method twice on an instance.
 *
 * @return a DiffEntry for each path which is different
 *///from   ww w. j a va2s . c  o  m
@Override
public List<DiffEntry> call() throws GitAPIException {
    final DiffFormatter diffFmt;
    if (out != null && !showNameAndStatusOnly)
        diffFmt = new DiffFormatter(new BufferedOutputStream(out));
    else
        diffFmt = new DiffFormatter(NullOutputStream.INSTANCE);
    if (ignoreWS)
        diffFmt.setDiffComparator(RawTextComparator.WS_IGNORE_ALL);
    diffFmt.setRepository(repo);
    diffFmt.setProgressMonitor(monitor);
    try {
        if (cached) {
            if (oldTree == null) {
                ObjectId head = repo.resolve(HEAD + "^{tree}"); //$NON-NLS-1$
                if (head == null)
                    throw new NoHeadException(JGitText.get().cannotReadTree);
                CanonicalTreeParser p = new CanonicalTreeParser();
                ObjectReader reader = repo.newObjectReader();
                try {
                    p.reset(reader, head);
                } finally {
                    reader.release();
                }
                oldTree = p;
            }
            newTree = new DirCacheIterator(repo.readDirCache());
        } else {
            if (oldTree == null)
                oldTree = new DirCacheIterator(repo.readDirCache());
            if (newTree == null)
                newTree = new FileTreeIterator(repo);
        }

        diffFmt.setPathFilter(pathFilter);

        List<DiffEntry> result = diffFmt.scan(oldTree, newTree);
        if (showNameAndStatusOnly)
            return result;
        else {
            if (contextLines >= 0)
                diffFmt.setContext(contextLines);
            if (destinationPrefix != null)
                diffFmt.setNewPrefix(destinationPrefix);
            if (sourcePrefix != null)
                diffFmt.setOldPrefix(sourcePrefix);
            diffFmt.format(result);
            diffFmt.flush();
            return result;
        }
    } catch (IOException e) {
        throw new JGitInternalException(e.getMessage(), e);
    } finally {
        diffFmt.release();
    }
}

From source file:org.uberfire.java.nio.fs.jgit.util.commands.CustomDiffCommand.java

License:Apache License

/**
 * Executes the {@code Diff} command with all the options and parameters
 * collected by the setter methods (e.g. {@link #setCached(boolean)} of this
 * class. Each instance of this class should only be used for one invocation
 * of the command. Don't call this method twice on an instance.
 * @return a DiffEntry for each path which is different
 *///from w ww. j av  a  2s  . com
public List<DiffEntry> call() throws GitAPIException {
    final DiffFormatter diffFmt;
    if (out != null && !showNameAndStatusOnly) {
        diffFmt = new DiffFormatter(new BufferedOutputStream(out));
    } else {
        diffFmt = new DiffFormatter(NullOutputStream.INSTANCE);
    }
    diffFmt.setRepository(repo);
    diffFmt.setProgressMonitor(monitor);
    diffFmt.setDetectRenames(true);
    try {
        if (cached) {
            if (oldTree == null) {
                ObjectId head = git.getTreeFromRef(HEAD);
                if (head == null) {
                    throw new NoHeadException(JGitText.get().cannotReadTree);
                }
                CanonicalTreeParser p = new CanonicalTreeParser();
                ObjectReader reader = repo.newObjectReader();
                try {
                    p.reset(reader, head);
                } finally {
                    reader.close();
                }
                oldTree = p;
            }
            newTree = new DirCacheIterator(repo.readDirCache());
        } else {
            if (oldTree == null) {
                oldTree = new DirCacheIterator(repo.readDirCache());
            }
            if (newTree == null) {
                newTree = new FileTreeIterator(repo);
            }
        }

        diffFmt.setPathFilter(pathFilter);

        List<DiffEntry> result = diffFmt.scan(oldTree, newTree);
        if (showNameAndStatusOnly) {
            return result;
        } else {
            if (contextLines >= 0) {
                diffFmt.setContext(contextLines);
            }
            if (destinationPrefix != null) {
                diffFmt.setNewPrefix(destinationPrefix);
            }
            if (sourcePrefix != null) {
                diffFmt.setOldPrefix(sourcePrefix);
            }
            diffFmt.format(result);
            diffFmt.flush();
            return result;
        }
    } catch (IOException e) {
        throw new JGitInternalException(e.getMessage(), e);
    } finally {
        diffFmt.close();
    }
}