package com.atlassian.stash.internal.scm.git;

import com.atlassian.bitbucket.content.Path;

/**
 * Status of an uncommitted file within the working directory and the Git index.
 *
 * @since 2.0
 */
public interface GitStatus {

    /**
     * Status of the file in the Git index.
     *
     * @return status of the file in the index
     */
    GitFileStatus getIndexStatus();

    /**
     * Status of the file within the working directory.
     *
     * @return status of the file in the working directory
     */
    GitFileStatus getWorkTreeStatus();

    /**
     * Path of the file relative to the root of the working directory.
     *
     * @return path of the file
     */
    Path getPath();

    /**
     * Source path of the file if it is a copy or a move, relative to the root of the working directory.
     *
     * @return source path of the file, or {@code null} if the file was not copied or moved
     */
    Path getSrcPath();

}
