code: func Map(repository, revision string) (*GitRepo, error) {
  	m := make(GitMap)
  
  	// First get the top level repo path
  	absRepoPath, err := filepath.Abs(repository)
  
  	if err != nil {
  		return nil, err
  	}
  
  	out, err := git("-C", repository, "rev-parse", "--show-cdup")
  
  	if err != nil {
  		return nil, err
  	}
  
  	cdUp := strings.TrimSpace(string(out))
  	topLevelPath := filepath.ToSlash(filepath.Join(absRepoPath, cdUp))
  
  	gitLogArgs := strings.Fields(fmt.Sprintf(
  		`--name-only --no-merges --format=format:%%x1e%%H%%x1f%%h%%x1f%%s%%x1f%%aN%%x1f%%aE%%x1f%%ai %s`,
  		revision,
  	))
  
  	gitLogArgs = append([]string{"-C", repository, "log"}, gitLogArgs...)
  
  	out, err = git(gitLogArgs...)
  
  	if err != nil {
  		return nil, err
  	}
  
  	entriesStr := string(out)
  	entriesStr = strings.Trim(entriesStr, "\n\x1e'")
  	entries := strings.Split(entriesStr, "\x1e")
  
  	for _, e := range entries {
  		lines := strings.Split(e, "\n")
  		gitInfo, err := toGitInfo(lines[0])
  
  		if err != nil {
  			return nil, err
  		}
  
  		for _, filename := range lines[1:] {
  			filename := strings.TrimSpace(filename)
  			if filename == "" {
  				continue
  			}
  			if _, ok := m[filename]; !ok {
  				m[filename] = gitInfo
  			}
  		}
  	}
  
  	return &GitRepo{Files: m, TopLevelAbsPath: topLevelPath}, nil
  }
docs: // Map creates a GitRepo with a file map from the given repository path and revision.
  // Use blank or HEAD as revision for the currently active revision.