Beispiel #1
0
func resolveGitDirFromCurrentDir() (string, string, error) {

	// Get root of the git working dir
	gitDir, err := git.GitDir()
	if err != nil {
		return "", "", err
	}

	// Allow this to fail, will do so if GIT_DIR isn't set but GIT_WORK_TREE is rel
	// Dealt with by parent
	rootDir, _ := git.RootDir()

	return rootDir, gitDir, nil
}
// lockPaths relativizes the given filepath such that it is relative to the root
// path of the repository it is contained within, taking into account the
// working directory of the caller.
//
// If the root directory, working directory, or file cannot be
// determined/opened, an error will be returned. If the file in question is
// actually a directory, an error will be returned. Otherwise, the cleaned path
// will be returned.
//
// For example:
//     - Working directory: /code/foo/bar/
//     - Repository root: /code/foo/
//     - File to lock: ./baz
//     - Resolved path bar/baz
func lockPath(file string) (string, error) {
	repo, err := git.RootDir()
	if err != nil {
		return "", err
	}

	wd, err := os.Getwd()
	if err != nil {
		return "", err
	}

	abs := filepath.Join(wd, file)
	path := strings.TrimPrefix(abs, repo)

	if stat, err := os.Stat(abs); err != nil {
		return "", err
	} else {
		if stat.IsDir() {
			return "", fmt.Errorf("lfs: cannot lock directory: %s", file)
		}

		return path[1:], nil
	}
}