Skip to content

Commit 269d781

Browse files
edgardmessiasJohnstonCode
authored andcommitted
fix: Allow pick commit on multi-line messages (#601)
1 parent 55b4092 commit 269d781

File tree

1 file changed

+53
-5
lines changed

1 file changed

+53
-5
lines changed

src/messages.ts

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import * as path from "path";
22
import { commands, Uri, ViewColumn, WebviewPanel, window } from "vscode";
3+
import { Model } from "./model";
34

45
export function noChangesToCommit() {
56
return window.showInformationMessage("There are no changes to commit.");
@@ -77,12 +78,15 @@ async function showCommitInput(message?: string, filePaths?: string[]) {
7778
${beforeForm}
7879
<form>
7980
<fieldset>
81+
<div class="float-right">
82+
<a href="#" id="pickCommitMessage">Pick a previous commit message</a>
83+
</div>
8084
<label for="message">Commit message</label>
81-
<textarea id="message" rows="5" placeholder="Message (press Ctrl+Enter to commit)"></textarea>
82-
<button id="commit" class="button-primary">Commit</button>
83-
<div class="float-right">
84-
<button id="cancel" class="button button-outline">Cancel</button>
85-
</div>
85+
<textarea id="message" rows="3" placeholder="Message (press Ctrl+Enter to commit)"></textarea>
86+
<button id="commit" class="button-primary">Commit</button>
87+
<div class="float-right">
88+
<button id="cancel" class="button button-outline">Cancel</button>
89+
</div>
8690
</fieldset>
8791
</form>
8892
</section>
@@ -92,6 +96,7 @@ async function showCommitInput(message?: string, filePaths?: string[]) {
9296
const txtMessage = document.getElementById("message");
9397
const btnCommit = document.getElementById("commit");
9498
const btnCancel = document.getElementById("cancel");
99+
const linkPickCommitMessage = document.getElementById("pickCommitMessage");
95100
96101
// load current message
97102
txtMessage.value = ${JSON.stringify(message)};
@@ -116,11 +121,34 @@ async function showCommitInput(message?: string, filePaths?: string[]) {
116121
}
117122
});
118123
124+
// Auto resize the height of message
125+
txtMessage.addEventListener("input", function(e) {
126+
txtMessage.style.height = "auto";
127+
txtMessage.style.height = (txtMessage.scrollHeight) + "px";
128+
});
129+
119130
window.addEventListener("load", function() {
120131
setTimeout(() => {
121132
txtMessage.focus();
122133
}, 1000);
123134
});
135+
136+
linkPickCommitMessage.addEventListener("click", function() {
137+
vscode.postMessage({
138+
command: "pickCommitMessage"
139+
});
140+
});
141+
142+
// Message from VSCode
143+
window.addEventListener("message", function(event) {
144+
const message = event.data;
145+
switch (message.command) {
146+
case "setMessage":
147+
txtMessage.value = message.message;
148+
txtMessage.dispatchEvent(new Event("input"));
149+
break;
150+
}
151+
});
124152
</script>
125153
</body>
126154
</html>`;
@@ -132,13 +160,33 @@ async function showCommitInput(message?: string, filePaths?: string[]) {
132160
resolve(undefined);
133161
});
134162

163+
const pickCommitMessage = async () => {
164+
let repository;
165+
166+
if (filePaths && filePaths[0]) {
167+
const model = (await commands.executeCommand("svn.getModel", "")) as Model;
168+
repository = await model.getRepositoryFromUri(Uri.file(filePaths[0]));
169+
}
170+
171+
const message = await commands.executeCommand("svn.pickCommitMessage", repository);
172+
if (message !== undefined) {
173+
panel.webview.postMessage({
174+
command: "setMessage",
175+
message
176+
});
177+
}
178+
};
179+
135180
// On button click
136181
panel.webview.onDidReceiveMessage(message => {
137182
switch (message.command) {
138183
case "commit":
139184
resolve(message.message);
140185
panel.dispose();
141186
break;
187+
case "pickCommitMessage":
188+
pickCommitMessage();
189+
break;
142190
default:
143191
resolve(undefined);
144192
panel.dispose();

0 commit comments

Comments
 (0)