使用Octokit通过提交哈希获取文件内容

时间:2018-07-09 16:09:36

标签: github npm octokit

我无法获取给定提交哈希的文件内容。无论我有什么哈希供参考,我都会从默认分支获取当前文件版本。

我唯一的猜测是,引用不能是普通哈希,但是documentation将“ ref”描述为“提交/分支/标记的名称”。并且没有提供有关格式化的进一步说明。

我使用Runkit here复制了该问题。并从下面的实际项目中提供了代码。

async getDifference(): Promise<void> {
    let oldFile = await this.gitHubApi.getContent(this.repo.owner.login, this.repo.name, `./${this.file}`, this.oldHash);
    let newFile = await this.gitHubApi.getContent(this.repo.owner.login, this.repo.name, `./${this.file}`, this.newHash);
    if(oldFile.data.content === newFile.data.content) {
        console.log('no differencce');
    } else {
       ...
    }
    return;
}


public getContent(owner: string, repo: string, path: string, ref?: string): Promise<any> {
    if(ref) {
        return this.octokit.repos.getContent({
            owner: owner,
            repo: repo,
            path: path,
            ref: ref
        });
    } else {
        return this.octokit.repos.getContent({
            owner: owner,
            repo: repo,
            path: path
        });
    }
}

1 个答案:

答案 0 :(得分:0)

这似乎是octokit / rest的错误,或者至少是意外行为,但是可以说您输入的是错误的。来自your example

path: './test.txt/'

Octokit不喜欢前导./,但是如果提供了斜杠,则会容忍它。但是,尾部的斜杠导致它忽略ref arg,即path: 'test.txt/'失败,并出现与您看到的相同的错误。 (而且可以说是错误的:斜杠表示一个文件夹,而这仅仅是一个文件-为什么要添加斜杠?)您真的想要

path: 'test.txt'

也许值得提出一个针对octokit / rest的问题,但是如果您删除开头的./并从路径中拖尾的/,它应该可以正常工作。

偶然地,根据您的评论

  

请注意,对象'sha'是相同的,并且都与提供的'ref'哈希不匹配。

这是预料之中的:提供的ref用于提交,这是提交元数据和根树的哈希,是根文件夹索引的哈希,并且包含对象SHA哈希。