issue.go
func newIssuePathFromAbsPath(root, path string) (IssuePath, error) {
	resolvedRoot, err := filepath.EvalSymlinks(root)
	if err != nil {
		return newIssuePath(root, path), err
	}

	resolvedPath, err := filepath.EvalSymlinks(path)
	if err != nil {
		return newIssuePath(root, path), err
	}

	if !filepath.IsAbs(path) {
		return newIssuePath(resolvedRoot, resolvedPath), nil
	}

	relPath, err := filepath.Rel(resolvedRoot, resolvedPath)
	return newIssuePath(resolvedRoot, relPath), err
}
func newIssuePathFromAbsPath(root, path string) (IssuePath, error) {
	resolvedRoot, err := filepath.EvalSymlinks(root)
	if err != nil {
		return newIssuePath(root, path), err
	}

	resolvedPath, err := filepath.EvalSymlinks(path)
	if err != nil {
		return newIssuePath(root, path), err
	}

	if !filepath.IsAbs(path) {
		return newIssuePath(resolvedRoot, resolvedPath), nil
	}

	relPath, err := filepath.Rel(resolvedRoot, resolvedPath)
	return newIssuePath(resolvedRoot, relPath), err
}
// newIssuePathFromAbsPath returns a new issuePath from a path that may be
// an absolute path. root must be an absolute path.