view mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/diff/DiffTree.java @ 701:ec3a72046099

more code for diffs. Handle commit not reported case
author eugene.petrenko@jetbrains.com
date Tue, 07 Jan 2014 12:51:27 +0100
parents
children
line wrap: on
line source
package jetbrains.buildServer.buildTriggers.vcs.mercurial.command.diff;

import jetbrains.buildServer.vcs.VcsException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.*;

/**
 * Created 03.01.14 16:12
 *
 * @author Eugene Petrenko (eugene.petrenko@jetbrains.com)
 */
public class DiffTree {
  private final Map<String, DiffFileTree> myFileToDiffs = new HashMap<String, DiffFileTree>();

  private DiffFileTree getOrCreateTree(@NotNull final String file) {
    DiffFileTree tree = myFileToDiffs.get(file);
    if (tree != null) return tree;

    tree = createDiffFileTree(file);
    myFileToDiffs.put(file, tree);
    return tree;
  }

  @NotNull
  protected DiffFileTree createDiffFileTree(@NotNull final String file) {
    return new DiffFileTree();
  }

  @NotNull
  public DiffProcessor processor() {
    return new DiffProcessor() {
      public void append(@NotNull String revision, @Nullable String baseRevision, @NotNull String file, @NotNull String line) {
        getOrCreateTree(file).processor().append(revision, baseRevision, file, line);
      }

      public void unchanged(@NotNull String revision, @Nullable String baseRevision, @NotNull String file, @NotNull String line) {
        getOrCreateTree(file).processor().unchanged(revision, baseRevision, file, line);
      }

      public void remove(@NotNull String revision, @Nullable String baseRevision, @NotNull String file, @NotNull String line) {
        getOrCreateTree(file).processor().remove(revision, baseRevision, file, line);
      }
    };
  }

  public void processDiffs(@NotNull final ContentProcessor processor) throws VcsException {
    for (Map.Entry<String, DiffFileTree> e : myFileToDiffs.entrySet()) {
      final String file = e.getKey();
      e.getValue().resolve(new FileContentProcessor() {
        public void processContent(@NotNull final String commit, @NotNull final Collection<String> lines) {
          processor.processContent(commit, file, lines);
        }
      });
    }
  }
}