Package org.tmatesoft.hg.internal

Source Code of org.tmatesoft.hg.internal.ChangelogHelper

/*
* Copyright (c) 2011-2013 TMate Software Ltd
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* For information on how to redistribute this software under
* the terms of a license other than GNU General Public License
* contact TMate Software at support@hg4j.com
*/
package org.tmatesoft.hg.internal;

import org.tmatesoft.hg.repo.HgChangelog.RawChangeset;
import org.tmatesoft.hg.repo.HgDataFile;
import org.tmatesoft.hg.repo.HgInternals;
import org.tmatesoft.hg.repo.HgRepository;
import org.tmatesoft.hg.repo.HgRuntimeException;
import org.tmatesoft.hg.util.Path;

/**
*
* @author Artem Tikhomirov
* @author TMate Software Ltd.
*/
public class ChangelogHelper {
  private final int leftBoundary;
  private final HgRepository repo;
  private final IntMap<RawChangeset> cache = new IntMap<RawChangeset>(32);
  private String nextCommitAuthor;

  /**
   * @param hgRepo
   * @param leftBoundaryRevision walker never visits revisions with local numbers less than specified,
   * IOW only revisions [leftBoundaryRevision..TIP] are considered.
   */
  public ChangelogHelper(HgRepository hgRepo, int leftBoundaryRevision) {
    repo = hgRepo;
    leftBoundary = leftBoundaryRevision;
  }
 
  /**
   * @return the repo
   */
  public HgRepository getRepo() {
    return repo;
  }

  /**
   * Walks changelog in reverse order
   * @param file
   * @return changeset where specified file is mentioned among affected files, or <code>null</code> if none found up to leftBoundary
   */
  public RawChangeset findLatestChangeWith(Path file) throws HgRuntimeException {
    HgDataFile df = repo.getFileNode(file);
    if (!df.exists()) {
      return null;
    }
    int changelogRev = df.getChangesetRevisionIndex(HgRepository.TIP);
    if (changelogRev >= leftBoundary) {
      // the method is likely to be invoked for different files,
      // while changesets might be the same. Cache 'em not to read too much.
      RawChangeset cs = cache.get(changelogRev);
      if (cs == null) {
        cs = repo.getChangelog().range(changelogRev, changelogRev).get(0);
        cache.put(changelogRev, cs);
      }
      return cs;
    }
    return null;
  }

  public String getNextCommitUsername() {
    if (nextCommitAuthor == null) {
      nextCommitAuthor = new HgInternals(repo).getNextCommitUsername();
    }
    return nextCommitAuthor;
  }
}
TOP

Related Classes of org.tmatesoft.hg.internal.ChangelogHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.