現在、node.js モジュールを作成しています。私はvar exec = require('child_process').exec;
node.js APIから使用しています。しかし、exec を使用して 2 つの git コマンドを連続して実行する必要があります。常に次のエラー メッセージが表示されます。
exec エラー: エラー: コマンドが失敗しました: 致命的: '~/Git/project/.git/index.lock' を作成できません: ファイルが存在します。
他の git プロセスが現在実行されていない場合、これはおそらく、以前にこのリポジトリで git プロセスがクラッシュしたことを意味します。他の git プロセスが実行されていないことを確認し、ファイルを手動で削除して続行します。
最初のコマンドが完了したら、seconed コマンドを実行する必要があります - キーワード: sync これまではexecSyncで試しましたが、Windows システムでは実行されません。
現在、私はasyncblockモジュールを使用していますが、上記のエラーも表示されます。
これは、updateList の両方の値が true の場合に発生し、一方が false の場合はすべて期待どおりに機能します。
var loadPackageJson = function(updateList){
if(updateList.foo === true){
update('foo/package.json');
}
if (updateList.bar === true){
update('bar/package.json');
}
};
var update = function(path){
var packageJson = JSON.parse(fs.readFileSync(path,'utf8'));
incrementVersion(packageJson);
asyncblock(function(flow){
exec('git log -1 HEAD', flow.add('commit'));
var result = flow.wait('commit');
var commit=result.split('\n');
console.info(commit[0]);
setValueInPackageJson('commit', commit[0], packageJson);
writeUpdatedPackageJson(path, packageJson);
flow.wait();
exec('git add ' + path, flow.add('add'));
flow.wait('add'); //error is thrown here
console.info('added ' + path + ' successful to commit');
});
};
両方の git コマンドを同期的に実行するにはどうすればよいですか?
/edit SO で次の Threadを知っていますが、この問題を修正しないように助けてくれます。このスレッドで asyncblock のヒントを見つけました。
/edit2 コンソールの出力は次のようになります。
Version: 0.6.14
Version: 0.0.901
commit a3ed4fd8545b736aa9feea1bea52c5e0aa6a07ac
foo/package.json successfully updated
commit a3ed4fd8545b736aa9feea1bea52c5e0aa6a07ac
bar/package.json successfully updated
私の目には、ノードが関数の処理を並列化したように見えloadPackageJson
ます。
BR & ありがとう、マイベックス