Package org.tmatesoft.hg.core

Source Code of org.tmatesoft.hg.core.HgStatus

/*
* 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.core;

import java.io.File;
import java.util.Date;

import org.tmatesoft.hg.internal.ChangelogHelper;
import org.tmatesoft.hg.repo.HgChangelog.RawChangeset;
import org.tmatesoft.hg.repo.HgRuntimeException;
import org.tmatesoft.hg.util.Path;

/**
* Repository file status and extra handy information.
*
* @author Artem Tikhomirov
* @author TMate Software Ltd.
*/
public class HgStatus {

  public enum Kind {
    Modified, Added, Removed, Missing, Unknown, Clean, Ignored
    // I'd refrain from changing order of these constants, just in case someone (erroneously, of course ;), uses .ordinal()
  };

  private final HgStatus.Kind kind;
  private final Path path;
  private final Path origin;
  private final ChangelogHelper logHelper;
   
  HgStatus(HgStatus.Kind kind, Path path, ChangelogHelper changelogHelper) {
    this(kind, path, null, changelogHelper);
  }

  HgStatus(HgStatus.Kind kind, Path path, Path copyOrigin, ChangelogHelper changelogHelper) {
    this.kind = kind;
    this.path  = path;
    origin = copyOrigin;
    logHelper = changelogHelper;
  }

  public HgStatus.Kind getKind() {
    return kind;
  }

  public Path getPath() {
    return path;
  }

  public Path getOriginalPath() {
    return origin;
  }

  public boolean isCopy() {
    return origin != null;
  }

  /**
   * @return <code>null</code> if author for the change can't be deduced (e.g. for clean files it's senseless)
   * @throws HgRuntimeException subclass thereof to indicate issues with the library. <em>Runtime exception</em>
   */
  public String getModificationAuthor() throws HgRuntimeException {
    RawChangeset cset = logHelper.findLatestChangeWith(path);
    if (cset == null) {
      if (kind == Kind.Modified || kind == Kind.Added || kind == Kind.Removed /*&& RightBoundary is TIP*/) {
        // perhaps, also for Kind.Missing?
        return logHelper.getNextCommitUsername();
      }
    } else {
      return cset.user();
    }
    return null;
  }

  /**
   * @return date when the file was last modified, never <code>null</code>. Either date of changeset the file was modified at
   * or timestamp of local file, if present
   * @throws HgRuntimeException subclass thereof to indicate issues with the library. <em>Runtime exception</em>
   */
  public Date getModificationDate() throws HgRuntimeException {
    RawChangeset cset = logHelper.findLatestChangeWith(path);
    if (cset == null) {
      File localFile = new File(logHelper.getRepo().getWorkingDir(), path.toString());
      if (localFile.canRead()) {
        return new Date(localFile.lastModified());
      }
      // TODO post-1.1 find out what to do in this case, perhaps, throw an exception?
      // perhaps check dirstate and for timestamp
      return new Date(); // what's correct?
    } else {
      return cset.date();
    }
  }
}
TOP

Related Classes of org.tmatesoft.hg.core.HgStatus

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.