/*
*
* * Copyright 2013-2014 Urs Wolfer
* *
* * Licensed under the Apache License, Version 2.0 (the "License");
* * you may not use this file except in compliance with the License.
* * You may obtain a copy of the License at
* *
* * http://www.apache.org/licenses/LICENSE-2.0
* *
* * Unless required by applicable law or agreed to in writing, software
* * distributed under the License is distributed on an "AS IS" BASIS,
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* * See the License for the specific language governing permissions and
* * limitations under the License.
*
*/
package com.urswolfer.intellij.plugin.gerrit.util;
import com.google.common.base.Optional;
import com.google.inject.Inject;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.urswolfer.intellij.plugin.gerrit.git.GerritGitUtil;
import git4idea.repo.GitRepository;
import java.io.File;
/**
* @author Thomas Forrer
*/
public class PathUtils {
@Inject
private GerritGitUtil gerritGitUtil;
public String getRelativePath(Project project, String absoluteFilePath, String gerritProjectName) {
Optional<GitRepository> gitRepositoryOptional = gerritGitUtil.getRepositoryForGerritProject(project, gerritProjectName);
if (!gitRepositoryOptional.isPresent()) return null;
GitRepository repository = gitRepositoryOptional.get();
VirtualFile root = repository.getRoot();
return FileUtil.getRelativePath(new File(root.getPath()), new File(absoluteFilePath));
}
/**
* @return a relative path for all files under the project root, or the absolute path for other files
*/
public String getRelativeOrAbsolutePath(Project project, String absoluteFilePath, String gerritProjectName) {
String relativePath = getRelativePath(project, absoluteFilePath, gerritProjectName);
if (relativePath.contains(File.separator + "..")) {
return absoluteFilePath;
}
return relativePath;
}
/**
* Gerrit handles paths always with a forward slash (/). Windows uses backslash (\), so we need to convert them.
*/
public static String ensureSlashSeparators(String path) {
return path.replace('\\', '/');
}
}