Enable user-configured commit message templates (#1359)

This commit is contained in:
Chris Swithinbank 2018-05-23 22:57:56 +02:00 committed by Shawn Erquhart
parent 5ff1195e54
commit 8ab5ca560c
3 changed files with 69 additions and 9 deletions

View File

@ -103,7 +103,7 @@ export function persistMedia(file, opts = {}) {
const assetProxy = await createAssetProxy(fileName, file, false, privateUpload);
dispatch(addAsset(assetProxy));
if (!integration) {
const asset = await backend.persistMedia(assetProxy);
const asset = await backend.persistMedia(state.config, assetProxy);
return dispatch(mediaPersisted(asset));
}
return dispatch(mediaPersisted(assetProxy.asset, { privateUpload }));
@ -144,7 +144,7 @@ export function deleteMedia(file, opts = {}) {
});
}
dispatch(mediaDeleting());
return backend.deleteMedia(file.path)
return backend.deleteMedia(state.config, file.path)
.then(() => {
return dispatch(mediaDeleted(file));
})

View File

@ -1,4 +1,5 @@
import { attempt, isError } from 'lodash';
import { Map } from 'immutable';
import { resolveFormat } from "Formats/formats";
import { selectIntegration } from 'Reducers/integrations';
import {
@ -93,6 +94,32 @@ const slugFormatter = (template = "{{slug}}", entryData, slugConfig) => {
return sanitizeSlug(slug, slugConfig);
};
const commitMessageTemplates = Map({
create: 'Create {{collection}} “{{slug}}”',
update: 'Update {{collection}} “{{slug}}”',
delete: 'Delete {{collection}} “{{slug}}”',
uploadMedia: 'Upload “{{path}}”',
deleteMedia: 'Delete “{{path}}”'
});
const commitMessageFormatter = (type, config, { slug, path, collection }) => {
const templates = commitMessageTemplates.merge(config.getIn(['backend', 'commit_messages'], Map()));
const messageTemplate = templates.get(type);
return messageTemplate.replace(/\{\{([^\}]+)\}\}/g, (_, variable) => {
switch (variable) {
case 'slug':
return slug;
case 'path':
return path;
case 'collection':
return collection.get('label');
default:
console.warn(`Ignoring unknown variable “${ variable }” in commit message template.`);
return '';
}
});
}
class Backend {
constructor(implementation, backendName, authStore = null) {
this.implementation = implementation;
@ -304,8 +331,7 @@ in the ${collection.get('name')} collection.\
};
}
const commitMessage = `${ (newEntry ? "Create " : "Update ") +
collection.get("label") } ${ entryObj.slug }`;
const commitMessage = commitMessageFormatter(newEntry ? 'create' : 'update', config, { collection, slug: entryObj.slug, path: entryObj.path });
const mode = config.get("publish_mode");
@ -322,9 +348,9 @@ in the ${collection.get('name')} collection.\
.then(() => entryObj.slug);
}
persistMedia(file) {
persistMedia(config, file) {
const options = {
commitMessage: `Upload ${file.path}`,
commitMessage: commitMessageFormatter('uploadMedia', config, { path: file.path }),
};
return this.implementation.persistMedia(file, options);
}
@ -336,12 +362,12 @@ in the ${collection.get('name')} collection.\
throw (new Error("Not allowed to delete entries in this collection"));
}
const commitMessage = `Delete ${ collection.get('label') }${ slug }`;
const commitMessage = commitMessageFormatter('delete', config, { collection, slug, path });
return this.implementation.deleteFile(path, commitMessage);
}
deleteMedia(path) {
const commitMessage = `Delete ${path}`;
deleteMedia(config, path) {
const commitMessage = commitMessageFormatter('deleteMedia', config, { path });
return this.implementation.deleteFile(path, commitMessage);
}

View File

@ -91,3 +91,37 @@ To enable this feature, you can set the following option in your `config.yml`:
backend:
squash_merges: true
```
## Commit Message Templates
You can customize the templates used by Netlify CMS to generate commit messages by setting the `commit_messages` option under `backend` in your `config.yml`.
Template tags wrapped in curly braces will be expanded to include information about the file changed by the commit. For example, `{{path}}` will include the full path to the file changed.
Setting up your `config.yml` to recreate the default values would look like this:
```yaml
backend:
commit_messages:
create: Create {{collection}} “{{slug}}”
update: Update {{collection}} “{{slug}}”
delete: Delete {{collection}} “{{slug}}”
uploadMedia: Upload “{{path}}”
deleteMedia: Delete “{{path}}”
```
Netlify CMS generates the following commit types:
Commit type | When is it triggered? | Available template tags
--------------|------------------------------|-----------------------------
`create` | A new entry is created | `slug`, `path`, `collection`
`update` | An existing entry is changed | `slug`, `path`, `collection`
`delete` | An exising entry is deleted | `slug`, `path`, `collection`
`uploadMedia` | A media file is uploaded | `path`
`deleteMedia` | A media file is deleted | `path`
Template tags produce the following output:
- `{{slug}}`: the url-safe filename of the entry changed
- `{{collection}}`: the name of the collection containing the entry changed
- `{{path}}`: the full path to the file changed