1

私はNodeJsでこの関数を構築しました。

var Git = require('nodegit');
var fse = require('fs-extra');
var path = require('path');
var fs = require('fs');
var repoPath = 'D:\\sample'

function gitCommitHistory(repoPath, callbackGitCommitHistory) {
try {
    var open = Git.Repository.open;
    var commitList = [];
    open(repoPath)
      .then(function(repo) {              
        return repo.getMasterCommit();
      })
      .then(function(firstCommitOnMaster) {
        var history = firstCommitOnMaster.history();            
        history.on("commit", function(commit) {
            if (commit === 'undefined') {
                callbackGitCommitHistory(null, commitList);
            }
          var author = commit.author();
          commitList.push({commitAuthor:author.name(),commitAuthorEmail:author.email(), 
              commitMessage:commit.message(), commitSha:commit.sha(), commitDate:commit.date()});
        });
        history.on("error", function(err){
            console.log(err)
        })
        history.on("end", function(){               
            callbackGitCommitHistory(null, commitList);
        });
        history.start();
      });   
} catch (error) {
    callbackGitCommitHistory(error);
}

};

モジュール「Nodegit」を使用してこの関数を構築しました。プロミスをコールバック ハンドラとして使用しています。

関数では、ユーザーがリポジトリで行ったすべてのコミットを取得し、呼び出し元の Web サービスへの応答として送信しています。

少なくとも 1 つのコミットがある場合、関数は正常に機能します (つまり、repo.getMasterCommit はコミット履歴を返します)。しかし、コミットがゼロの新しいリポジトリに repoPath を指定すると、その関数から何も返されないため、呼び出し元の Web サービスに応答を送信できません。この状況に対処する方法を教えてください!!!!!!!!

4

1 に答える 1

1

GitHub リポジトリの関連する問題。

これは次のリリース (0.5) で修正される必要があり、現在661を介してマスターで修正されています。Ahmad Assaf は正しいですが、head コミットがないため、promise チェーンを拒否していました。

于 2015-08-10T17:06:17.410 に答える