fix(backends): fix commit message handling (#1568)
This commit is contained in:
parent
4782c472bf
commit
f7e7120db5
@ -1,4 +1,4 @@
|
|||||||
import { flow, has } from "lodash";
|
import { flow, get } from "lodash";
|
||||||
import {
|
import {
|
||||||
localForage,
|
localForage,
|
||||||
unsentRequest,
|
unsentRequest,
|
||||||
@ -118,10 +118,19 @@ export default class API {
|
|||||||
return this.processFiles(entries);
|
return this.processFiles(entries);
|
||||||
};
|
};
|
||||||
|
|
||||||
uploadBlob = async item => {
|
uploadBlob = async (item, { commitMessage, branch = this.branch } = {}) => {
|
||||||
const contentBase64 = await (has(item, 'toBase64') ? item.toBase64() : Promise.resolve(item.raw));
|
const contentBlob = get(item, 'fileObj', new Blob([item.raw]));
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append(item.path, contentBase64);
|
// Third param is filename header, in case path is `message`, `branch`, etc.
|
||||||
|
formData.append(item.path, contentBlob, basename(item.path));
|
||||||
|
formData.append('branch', branch);
|
||||||
|
if (commitMessage) {
|
||||||
|
formData.append("message", commitMessage);
|
||||||
|
}
|
||||||
|
if (this.commitAuthor) {
|
||||||
|
const { name, email } = this.commitAuthor;
|
||||||
|
formData.append("author", `${name} <${email}>`);
|
||||||
|
}
|
||||||
|
|
||||||
return flow([
|
return flow([
|
||||||
unsentRequest.withMethod("POST"),
|
unsentRequest.withMethod("POST"),
|
||||||
@ -131,17 +140,21 @@ export default class API {
|
|||||||
])(`${ this.repoURL }/src`);
|
])(`${ this.repoURL }/src`);
|
||||||
};
|
};
|
||||||
|
|
||||||
persistFiles = (files, { commitMessage, newEntry }) => Promise.all(
|
persistFiles = (files, { commitMessage }) => Promise.all(
|
||||||
files.filter(({ uploaded }) => !uploaded).map(this.uploadBlob)
|
files.filter(({ uploaded }) => !uploaded).map(file => this.uploadBlob(file, { commitMessage }))
|
||||||
);
|
);
|
||||||
|
|
||||||
deleteFile = (path, message, options={}) => {
|
deleteFile = (path, message, { branch = this.branch } = {}) => {
|
||||||
const branch = options.branch || this.branch;
|
|
||||||
const body = new FormData();
|
const body = new FormData();
|
||||||
body.append('files', path);
|
body.append('files', path);
|
||||||
if (message && message !== "") {
|
body.append('branch', branch);
|
||||||
|
if (message) {
|
||||||
body.append("message", message);
|
body.append("message", message);
|
||||||
}
|
}
|
||||||
|
if (this.commitAuthor) {
|
||||||
|
const { name, email } = this.commitAuthor;
|
||||||
|
body.append("author", `${name} <${email}>`);
|
||||||
|
}
|
||||||
return flow([
|
return flow([
|
||||||
unsentRequest.withMethod("POST"),
|
unsentRequest.withMethod("POST"),
|
||||||
unsentRequest.withBody(body),
|
unsentRequest.withBody(body),
|
||||||
|
@ -316,6 +316,12 @@ export default class API {
|
|||||||
.then(resp => {
|
.then(resp => {
|
||||||
const { sha } = resp.tree.find(file => file.path === filename);
|
const { sha } = resp.tree.find(file => file.path === filename);
|
||||||
const opts = { method: 'DELETE', params: { sha, message, branch } };
|
const opts = { method: 'DELETE', params: { sha, message, branch } };
|
||||||
|
if (this.commitAuthor) {
|
||||||
|
opts.params.author = {
|
||||||
|
...this.commitAuthor,
|
||||||
|
date: new Date().toISOString(),
|
||||||
|
};
|
||||||
|
}
|
||||||
return this.request(fileURL, opts);
|
return this.request(fileURL, opts);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -189,18 +189,23 @@ export default class API {
|
|||||||
const file_path = item.path.replace(/^\//, "");
|
const file_path = item.path.replace(/^\//, "");
|
||||||
const action = (updateFile ? "update" : "create");
|
const action = (updateFile ? "update" : "create");
|
||||||
const encoding = "base64";
|
const encoding = "base64";
|
||||||
const { name: author_name, email: author_email } = pick(author || {}, ["name", "email"]);
|
|
||||||
const body = JSON.stringify({
|
const commitParams = {
|
||||||
branch,
|
branch,
|
||||||
commit_message: commitMessage,
|
commit_message: commitMessage,
|
||||||
actions: [{ action, file_path, content, encoding }],
|
actions: [{ action, file_path, content, encoding }],
|
||||||
});
|
};
|
||||||
|
if (author) {
|
||||||
|
const { name, email } = author;
|
||||||
|
commitParams.author_name = name;
|
||||||
|
commitParams.author_email = email;
|
||||||
|
}
|
||||||
|
|
||||||
await this.request({
|
await this.request({
|
||||||
url: `${ this.repoURL }/repository/commits`,
|
url: `${ this.repoURL }/repository/commits`,
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: { "Content-Type": "application/json" },
|
headers: { "Content-Type": "application/json" },
|
||||||
body,
|
body: JSON.stringify(commitParams),
|
||||||
});
|
});
|
||||||
|
|
||||||
return { ...item, uploaded: true };
|
return { ...item, uploaded: true };
|
||||||
@ -211,9 +216,16 @@ export default class API {
|
|||||||
|
|
||||||
deleteFile = (path, commit_message, options = {}) => {
|
deleteFile = (path, commit_message, options = {}) => {
|
||||||
const branch = options.branch || this.branch;
|
const branch = options.branch || this.branch;
|
||||||
|
const commitParams = { commit_message, branch };
|
||||||
|
if (this.commitAuthor) {
|
||||||
|
const { name, email } = this.commitAuthor;
|
||||||
|
commitParams.author_name = name;
|
||||||
|
commitParams.author_email = email;
|
||||||
|
}
|
||||||
return flow([
|
return flow([
|
||||||
unsentRequest.withMethod("DELETE"),
|
unsentRequest.withMethod("DELETE"),
|
||||||
unsentRequest.withParams({ commit_message, branch }),
|
// TODO: only send author params if they are defined.
|
||||||
|
unsentRequest.withParams(commitParams),
|
||||||
this.request,
|
this.request,
|
||||||
])(`${ this.repoURL }/repository/files/${ encodeURIComponent(path) }`);
|
])(`${ this.repoURL }/repository/files/${ encodeURIComponent(path) }`);
|
||||||
};
|
};
|
||||||
|
@ -133,7 +133,7 @@ export default class TestRepo {
|
|||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
persistEntry({ path, raw, slug }, mediaFiles = [], options = {}) {
|
persistEntry({ path, raw, slug }, mediaFiles, options = {}) {
|
||||||
if (options.useWorkflow) {
|
if (options.useWorkflow) {
|
||||||
const unpubStore = window.repoFilesUnpublished;
|
const unpubStore = window.repoFilesUnpublished;
|
||||||
const existingEntryIndex = unpubStore.findIndex(e => e.file.path === path);
|
const existingEntryIndex = unpubStore.findIndex(e => e.file.path === path);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user