/*******************************************************************************
* Copyright (C) 2010, Jens Baumgart <jens.baumgart@sap.com>
* Copyright (C) 2014, Obeo
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Jens Baumgart (SAP AG) - initial implementation
* Dariusz Luksza - expose public constructor
*******************************************************************************/
package org.eclipse.egit.core.internal.storage;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.egit.core.Activator;
import org.eclipse.egit.core.RepositoryUtil;
import org.eclipse.egit.core.internal.Utils;
import org.eclipse.egit.core.storage.GitBlobStorage;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
/**
* Blob Storage related to a RevCommit. Method <code>getFullPath</code> returns
* a path of format <repository name>/<file path> <commit id> This results in a
* useful tool tip on the editor title when viewing a revision and avoids the
* issue that editors get dirty because Eclipse seems to share the document of
* the workspace file if the remote file has the same full path.
*/
public class CommitBlobStorage extends GitBlobStorage {
private final RevCommit commit;
/**
*
* @param repository
* from with blob version should be taken
* @param fileName
* name of blob file
* @param blob
* blob id
* @param commit
* from with blob version should be taken
*/
public CommitBlobStorage(final Repository repository, final String fileName,
final ObjectId blob, RevCommit commit) {
super(repository, fileName, blob);
this.commit = commit;
}
@Override
public IPath getFullPath() {
final RepositoryUtil repositoryUtil = Activator.getDefault()
.getRepositoryUtil();
IPath repoPath = new Path(repositoryUtil.getRepositoryName(db));
String pathString = super.getFullPath().toPortableString() + " " //$NON-NLS-1$
+ Utils.getShortObjectId(commit.getId());
return repoPath.append(Path.fromPortableString(pathString));
}
@Override
public int hashCode() {
final int prime = 31;
return prime * super.hashCode()
+ ((commit == null) ? 0 : commit.hashCode());
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
CommitBlobStorage other = (CommitBlobStorage) obj;
if (commit == null) {
if (other.commit != null)
return false;
} else if (!commit.equals(other.commit))
return false;
return true;
}
}