Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
348 changes: 162 additions & 186 deletions plugin/src/main/java/git4idea/GitFileRevision.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,198 +27,174 @@
import consulo.versionControlSystem.util.VcsFileUtil;
import consulo.virtualFileSystem.VirtualFile;
import git4idea.util.GitFileUtils;

import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;

import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;

public class GitFileRevision extends VcsFileRevisionEx implements Comparable<VcsFileRevision>, VcsFileRevisionDvcsSpecific
{

@Nonnull
private final Project myProject;
@Nonnull
private final FilePath myPath;
@Nonnull
private final GitRevisionNumber myRevision;
@Nullable
private final Couple<Couple<String>> myAuthorAndCommitter;
@Nullable
private final String myMessage;
@Nullable
private final String myBranch;
@Nullable
private final Date myAuthorTime;
@Nonnull
private final Collection<String> myParents;
@Nullable
private final VirtualFile myRoot;

public GitFileRevision(@Nonnull Project project, @Nonnull FilePath path, @Nonnull GitRevisionNumber revision)
{
this(project, null, path, revision, null, null, null, null, Collections.<String>emptyList());
}

public GitFileRevision(@Nonnull Project project,
@Nullable VirtualFile root,
@Nonnull FilePath path,
@Nonnull GitRevisionNumber revision,
@Nullable Couple<Couple<String>> authorAndCommitter,
@Nullable String message,
@Nullable String branch,
@Nullable final Date authorTime,
@Nonnull Collection<String> parents)
{
myProject = project;
myRoot = root;
myPath = path;
myRevision = revision;
myAuthorAndCommitter = authorAndCommitter;
myMessage = message;
myBranch = branch;
myAuthorTime = authorTime;
myParents = parents;
}

@Override
@Nonnull
public FilePath getPath()
{
return myPath;
}

@Nullable
@Override
public RepositoryLocation getChangedRepositoryPath()
{
return null;
}

@Override
@Nonnull
public VcsRevisionNumber getRevisionNumber()
{
return myRevision;
}

@Override
public Date getRevisionDate()
{
return myRevision.getTimestamp();
}

@Nullable
@Override
public Date getDateForRevisionsOrdering()
{
return myAuthorTime;
}

@Override
@Nullable
public String getAuthor()
{
if(myAuthorAndCommitter != null)
{
return myAuthorAndCommitter.getFirst().getFirst();
}
return null;
}

@Nullable
@Override
public String getAuthorEmail()
{
if(myAuthorAndCommitter != null)
{
return myAuthorAndCommitter.getFirst().getSecond();
}
return null;
}

@Nullable
@Override
public String getCommitterName()
{
if(myAuthorAndCommitter != null)
{
return myAuthorAndCommitter.getSecond() == null ? null : myAuthorAndCommitter.getSecond().getFirst();
}
return null;
}

@Nullable
@Override
public String getCommitterEmail()
{
if(myAuthorAndCommitter != null)
{
return myAuthorAndCommitter.getSecond() == null ? null : myAuthorAndCommitter.getSecond().getSecond();
}
return null;
}

@Override
@Nullable
public String getCommitMessage()
{
return myMessage;
}

@Override
@Nullable
public String getBranchName()
{
return myBranch;
}

@Override
public synchronized byte[] loadContent() throws IOException, VcsException
{
VirtualFile root = getRoot();
return GitFileUtils.getFileContent(myProject, root, myRevision.getRev(), VcsFileUtil.relativePath(root, myPath));
}

private VirtualFile getRoot() throws VcsException
{
return myRoot != null ? myRoot : GitUtil.getGitRoot(myPath);
}

@Override
public synchronized byte[] getContent() throws IOException, VcsException
{
return loadContent();
}

@Override
public int compareTo(VcsFileRevision rev)
{
if(rev instanceof GitFileRevision)
{
return myRevision.compareTo(((GitFileRevision) rev).myRevision);
}
return getRevisionDate().compareTo(rev.getRevisionDate());
}

@Override
public String toString()
{
return myPath.getName() + ":" + myRevision.getShortRev();
}

@Nonnull
public Collection<String> getParents()
{
return myParents;
}

@Nonnull
public String getHash()
{
return myRevision.getRev();
}
public class GitFileRevision extends VcsFileRevisionEx implements Comparable<VcsFileRevision>, VcsFileRevisionDvcsSpecific {

@Nonnull
private final Project myProject;
@Nonnull
private final FilePath myPath;
@Nonnull
private final GitRevisionNumber myRevision;
@Nullable
private final Couple<Couple<String>> myAuthorAndCommitter;
@Nullable
private final String myMessage;
@Nullable
private final String myBranch;
@Nullable
private final Date myAuthorTime;
@Nonnull
private final Collection<String> myParents;
@Nullable
private final VirtualFile myRoot;

public GitFileRevision(@Nonnull Project project, @Nonnull FilePath path, @Nonnull GitRevisionNumber revision) {
this(project, null, path, revision, null, null, null, null, Collections.<String>emptyList());
}

public GitFileRevision(
@Nonnull Project project,
@Nullable VirtualFile root,
@Nonnull FilePath path,
@Nonnull GitRevisionNumber revision,
@Nullable Couple<Couple<String>> authorAndCommitter,
@Nullable String message,
@Nullable String branch,
@Nullable Date authorTime,
@Nonnull Collection<String> parents
) {
myProject = project;
myRoot = root;
myPath = path;
myRevision = revision;
myAuthorAndCommitter = authorAndCommitter;
myMessage = message;
myBranch = branch;
myAuthorTime = authorTime;
myParents = parents;
}

@Override
@Nonnull
public FilePath getPath() {
return myPath;
}

@Nullable
@Override
public RepositoryLocation getChangedRepositoryPath() {
return null;
}

@Override
@Nonnull
public VcsRevisionNumber getRevisionNumber() {
return myRevision;
}

@Override
public Date getRevisionDate() {
return myRevision.getTimestamp();
}

@Nullable
@Override
public Date getDateForRevisionsOrdering() {
return myAuthorTime;
}

@Override
@Nullable
public String getAuthor() {
if (myAuthorAndCommitter != null) {
return myAuthorAndCommitter.getFirst().getFirst();
}
return null;
}

@Nullable
@Override
public String getAuthorEmail() {
if (myAuthorAndCommitter != null) {
return myAuthorAndCommitter.getFirst().getSecond();
}
return null;
}

@Nullable
@Override
public String getCommitterName() {
if (myAuthorAndCommitter != null) {
return myAuthorAndCommitter.getSecond() == null ? null : myAuthorAndCommitter.getSecond().getFirst();
}
return null;
}

@Nullable
@Override
public String getCommitterEmail() {
if (myAuthorAndCommitter != null) {
return myAuthorAndCommitter.getSecond() == null ? null : myAuthorAndCommitter.getSecond().getSecond();
}
return null;
}

@Override
@Nullable
public String getCommitMessage() {
return myMessage;
}

@Override
@Nullable
public String getBranchName() {
return myBranch;
}

@Override
public synchronized byte[] loadContent() throws IOException, VcsException {
VirtualFile root = getRoot();
return GitFileUtils.getFileContent(myProject, root, myRevision.getRev(), VcsFileUtil.relativePath(root, myPath));
}

private VirtualFile getRoot() throws VcsException {
return myRoot != null ? myRoot : GitUtil.getGitRoot(myPath);
}

@Override
public synchronized byte[] getContent() throws IOException, VcsException {
return loadContent();
}

@Override
public int compareTo(VcsFileRevision rev) {
if (rev instanceof GitFileRevision fileRevision) {
return myRevision.compareTo(fileRevision.myRevision);
}
return getRevisionDate().compareTo(rev.getRevisionDate());
}

@Override
public String toString() {
return myPath.getName() + ":" + myRevision.getShortRev();
}

@Nonnull
public Collection<String> getParents() {
return myParents;
}

@Nonnull
public String getHash() {
return myRevision.getRev();
}

}
Loading
Loading