All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hawkular.build.license.GitPathResolver Maven / Gradle / Ivy

/*
 * Copyright 2014-2015 Red Hat, Inc. and/or its affiliates
 * and other contributors as indicated by the @author tags.
 *
 * 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 org.hawkular.build.license;

import java.io.File;

/**
 * A utility to transform native {@link File} paths to the form expected by jGit - i.e. relative to git working tree
 * root directory and delimited by {@code '/'}.
 *
 * @author Peter Palaga
 */
public class GitPathResolver {

    /** The path separator expected by jGit. */
    private static final char CANONICAL_PATH_SEPARATOR = '/';

    /** The file path separator used by the current platform, usually {@value File#separatorChar}. */
    private final char nativePathSeparator;

    /** The native path to the root directory of the current git repository working tree. */
    private final String repositoryRootDir;

    public GitPathResolver(String repositoryRootDir) {
        this(repositoryRootDir, File.separatorChar);
    }

    /**
     * Default visibility for testing purposes.
     *
     * @param repositoryRootDir
     * @param nativePathSeparator
     */
    GitPathResolver(String repositoryRootDir, char nativePathSeparator) {
        super();
        this.repositoryRootDir = repositoryRootDir.charAt(repositoryRootDir.length() - 1) == nativePathSeparator ? repositoryRootDir
                : repositoryRootDir + nativePathSeparator;
        this.nativePathSeparator = nativePathSeparator;
    }

    /**
     * With default visibility to be testable.
     *
     * @param absoluteNativePath
     * @return
     */
    String relativize(String absoluteNativePath) {
        if (!absoluteNativePath.startsWith(repositoryRootDir)) {
            throw new RuntimeException("Cannot relativize path '" + absoluteNativePath + "' to directory '"
                    + repositoryRootDir + "'");
        }
        String result = absoluteNativePath.substring(repositoryRootDir.length());
        if (nativePathSeparator != CANONICAL_PATH_SEPARATOR) {
            result = result.replace(nativePathSeparator, CANONICAL_PATH_SEPARATOR);
        }
        return result;
    }

    /**
     * Return a string representing the supplied {@code path} path relative to git working tree root directory and
     * delimited by {@code '/'}.
     *
     * @param path the path to relativize
     * @return the relativized path
     */
    public String relativize(File path) {
        return relativize(path.getAbsolutePath());
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy