0

我正在尝试使用librarygit检查repo 中特定文件的状态。go-git

这是我试图运行的代码:

    repo, err := git.PlainOpen(fullPathToRepo)
    if err != nil {
        return false, fmt.Errorf("ERROR: Unable to open repository %s\n%s", fullPathToRepo, err)
    }

    workTree, err := repo.Worktree()
    if err != nil {
        return false, fmt.Errorf("ERROR: Unable to open worktree for repository %s\n%s", fullPathToRepo, err)
    }
    workTreeStatus, err := workTree.Status()
    if err != nil {
        return false, fmt.Errorf("ERROR: Unable to retrieve worktree status for repository %s\n%s", fullPathToRepo, err)
    }
    fmt.Printf("%q\n", workTreeStatus.File("releases/filename").Worktree)
    fmt.Printf("%q\n", workTreeStatus.File("/Users/panteliskaramolegkos/myrepo/filename/releases/faros.yaml").Worktree)
    return workTreeStatus.IsClean(), nil

即我正在尝试同时使用完整路径以及我要检查的文件的相关(到回购)路径。

在这两种情况下,打印出来的内容如下:

`?`
`?`

然而,根据文档,这对应于一个Untracked文件。

特定文件已正确提交并签入。

为什么我得到错误的状态码?

4

1 回答 1

0

解决方法:

var fileStatusMapping = map[git.StatusCode]string{
        git.Unmodified:         "",
        git.Untracked:          "Untracked",
        git.Modified:           "Modified",
        git.Added:              "Added",
        git.Deleted:            "Deleted",
        git.Renamed:            "Renamed",
        git.Copied:             "Copied",
        git.UpdatedButUnmerged: "Updated",
}

func (r *Repo) FileStatus(filename string) (string, string, error) {
        w, err := r.worktree()
        if err != nil {
                return "", "", err
        }
        s, err := w.Status()
        if err != nil {
                return "", "", err
        }
        if s != nil {
                var untracked bool
                if s.IsUntracked(filename) {
                        untracked = true
                }
                fileStatus := s.File(filename)
                if !untracked && fileStatus.Staging == git.Untracked &&
                        fileStatus.Worktree == git.Untracked {
                        fileStatus.Staging = git.Unmodified
                        fileStatus.Worktree = git.Unmodified
                }
                return fileStatusMapping[fileStatus.Staging], fileStatusMapping[fileStatus.Worktree], nil
        }
        return "", "", nil
}

注意:之前故意s.IsUntracked()调用s.File()

于 2021-04-19T06:31:07.450 回答