Closed psmuler closed 1 year ago
1分ごとにコミットするには、setInterval
関数を使用して定期的にコミット処理を実行するように設定します。また、編集の追跡を行い、変更があった場合にのみコミットを実行するようにします。以下のようにコードを修正してください。
まず、renderer.js の先頭に以下の変数と関数を追加します。
// マークダウンの編集を追跡するための変数
let isMarkdownEdited = false;
// マークダウンエディタの変更を検知するイベントリスナーを設定
markdownEditor.addEventListener('input', () => {
isMarkdownEdited = true;
});
// コミット処理を行う関数
function commitChanges() {
if (isMarkdownEdited) {
const folderPath = folderPathSpan.textContent;
// ファイルをコミット
exec(`git -C "${folderPath}" add . && git -C "${folderPath}" commit -m "Auto-commit: Markdown changes"`, (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
return;
}
if (stderr) {
console.error(`Stderr: ${stderr}`);
return;
}
console.log(`Auto-commit successful: ${stdout}`);
isMarkdownEdited = false;
});
}
}
そして、1分ごとに commitChanges
関数を実行するように設定します。renderer.js の末尾に以下のコードを追加します。
// 1分ごとにコミット処理を実行
setInterval(commitChanges, 60 * 1000);
これで、マークダウンエディタの編集を追跡し、1分ごとに変更があった場合に現在のブランチにコミットするようになります。
good. マークダウンの編集を追跡して、1分ごとに一度現在のブランチにコミットするようにしましょう。また、saveボタンが押された時にもcommitを実行するようにしましょう
1分ごとにマークダウンファイルの変更をコミットするには、setInterval
を使用して定期的にコミット処理を実行する関数を呼び出すことができます。また、saveボタンが押された時にも同じコミット処理を実行します。以下のコードを renderer.js
に追加してください。
// コミット処理を実行する関数
function commitChanges() {
const folderPath = folderPathSpan.textContent;
const currentBranch = branchSelect.options[branchSelect.selectedIndex].value;
// 保存
fs.writeFileSync(`${folderPath}/${currentFileName}`, textEditor.value);
// コミットメッセージ
const commitMessage = `Auto-commit on ${new Date().toLocaleString()}`;
// コミット
exec(`git -C "${folderPath}" add . && git -C "${folderPath}" commit -m "${commitMessage}"`, (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
return;
}
if (stderr) {
console.error(`Stderr: ${stderr}`);
return;
}
console.log(`Commit successful: ${stdout}`);
});
}
// 1分ごとにコミット
setInterval(commitChanges, 60000);
// saveボタンが押された時にコミット
saveButton.addEventListener('click', () => {
commitChanges();
});
このコードでは、commitChanges
関数がコミット処理を実行します。1分ごとにこの関数が実行されるように setInterval
を設定し、また、saveボタンが押された時にもこの関数が実行されるようにイベントリスナを設定しています。ファイルの保存とコミットが成功した場合、コンソールにメッセージが表示されます。
注意: この方法では、1分ごとにマークダウンファイルが変更されているかどうかをチェックせず、強制的にコミットが実行されます。これにより、実際には変更がない場合でもコミットが作成されることがあります。変更がある場合にのみコミットを実行するには、git status
コマンドを使って変更を検出する処理を追加する必要があります。
git statusを用いて変更を検出する処理を加えましょう
git status
を用いて変更を検出する処理を追加するには、以下のようにcommitChanges
関数を修正してください。
// コミット処理を実行する関数
async function commitChanges() {
const folderPath = folderPathSpan.textContent;
const currentBranch = branchSelect.options[branchSelect.selectedIndex].value;
// 保存
fs.writeFileSync(`${folderPath}/${currentFileName}`, textEditor.value);
// git status を実行して変更を検出
const gitStatus = await new Promise((resolve, reject) => {
exec(`git -C "${folderPath}" status --porcelain`, (error, stdout, stderr) => {
if (error) {
reject(`Error: ${error.message}`);
return;
}
if (stderr) {
reject(`Stderr: ${stderr}`);
return;
}
resolve(stdout);
});
});
// 変更がある場合のみコミット
if (gitStatus.trim() !== '') {
const commitMessage = `Auto-commit on ${new Date().toLocaleString()}`;
exec(
`git -C "${folderPath}" add . && git -C "${folderPath}" commit -m "${commitMessage}"`,
(error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
return;
}
if (stderr) {
console.error(`Stderr: ${stderr}`);
return;
}
console.log(`Commit successful: ${stdout}`);
}
);
} else {
console.log('No changes detected');
}
}
この修正により、commitChanges
関数は、git status --porcelain
コマンドを使用して変更を検出します。--porcelain
オプションは、機械可読な出力を提供するために使用されます。変更が検出された場合のみ、コミットが実行されます。変更がない場合は、コンソールにメッセージが表示されます。
注意:commitChanges
関数をasync
関数に変更し、gitStatus
の取得をawait
を使用して待機するようにしています。これにより、変更の検出とコミット処理が同期的に実行されるようになります。
ありがとうございます。 自動保存機能として、ウィンドウを閉じる時には現在のブランチに自動的にコミットが送られるようにしましょう
ウィンドウを閉じる時に現在のブランチに自動的にコミットする機能を実装するには、window
オブジェクトのbeforeunload
イベントリスナーを追加しましょう。beforeunload
イベントは、ウィンドウが閉じられる前に発生します。このイベントリスナー内で、現在のブランチにコミットする処理を実行します。
renderer.js に以下のコードを追加してください:
async function commitChanges(message) {
const folderPath = folderPathSpan.textContent;
const currentFileContent = textEditor.value;
// ファイルに変更を保存
fs.writeFileSync(`${folderPath}/${currentFileName}`, currentFileContent);
// git add
await new Promise((resolve, reject) => {
exec(`git -C "${folderPath}" add "${currentFileName}"`, (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
reject(error);
return;
}
if (stderr) {
console.error(`Stderr: ${stderr}`);
}
resolve();
});
});
// git commit
await new Promise((resolve, reject) => {
exec(`git -C "${folderPath}" commit -m "${message}"`, (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
reject(error);
return;
}
if (stderr) {
console.error(`Stderr: ${stderr}`);
}
resolve();
});
});
}
// ウィンドウが閉じられる前に現在のブランチにコミットする処理を実行
window.addEventListener('beforeunload', async (event) => {
event.preventDefault();
await commitChanges('Automatic commit before closing the window');
});
このコードでは、まずcommitChanges
という非同期関数を定義して、与えられたメッセージで現在のブランチにコミットを作成します。そして、beforeunload
イベントリスナーを追加し、ウィンドウが閉じられる前にcommitChanges
関数を実行して自動的にコミットします。
good. マークダウンの編集を追跡して、1分ごとに一度現在のブランチにコミットするようにしましょう。