Enable user-configured commit message templates (#1359)
This commit is contained in:
parent
5ff1195e54
commit
8ab5ca560c
@ -103,7 +103,7 @@ export function persistMedia(file, opts = {}) {
|
|||||||
const assetProxy = await createAssetProxy(fileName, file, false, privateUpload);
|
const assetProxy = await createAssetProxy(fileName, file, false, privateUpload);
|
||||||
dispatch(addAsset(assetProxy));
|
dispatch(addAsset(assetProxy));
|
||||||
if (!integration) {
|
if (!integration) {
|
||||||
const asset = await backend.persistMedia(assetProxy);
|
const asset = await backend.persistMedia(state.config, assetProxy);
|
||||||
return dispatch(mediaPersisted(asset));
|
return dispatch(mediaPersisted(asset));
|
||||||
}
|
}
|
||||||
return dispatch(mediaPersisted(assetProxy.asset, { privateUpload }));
|
return dispatch(mediaPersisted(assetProxy.asset, { privateUpload }));
|
||||||
@ -144,7 +144,7 @@ export function deleteMedia(file, opts = {}) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
dispatch(mediaDeleting());
|
dispatch(mediaDeleting());
|
||||||
return backend.deleteMedia(file.path)
|
return backend.deleteMedia(state.config, file.path)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
return dispatch(mediaDeleted(file));
|
return dispatch(mediaDeleted(file));
|
||||||
})
|
})
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { attempt, isError } from 'lodash';
|
import { attempt, isError } from 'lodash';
|
||||||
|
import { Map } from 'immutable';
|
||||||
import { resolveFormat } from "Formats/formats";
|
import { resolveFormat } from "Formats/formats";
|
||||||
import { selectIntegration } from 'Reducers/integrations';
|
import { selectIntegration } from 'Reducers/integrations';
|
||||||
import {
|
import {
|
||||||
@ -93,6 +94,32 @@ const slugFormatter = (template = "{{slug}}", entryData, slugConfig) => {
|
|||||||
return sanitizeSlug(slug, 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 {
|
class Backend {
|
||||||
constructor(implementation, backendName, authStore = null) {
|
constructor(implementation, backendName, authStore = null) {
|
||||||
this.implementation = implementation;
|
this.implementation = implementation;
|
||||||
@ -304,8 +331,7 @@ in the ${collection.get('name')} collection.\
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const commitMessage = `${ (newEntry ? "Create " : "Update ") +
|
const commitMessage = commitMessageFormatter(newEntry ? 'create' : 'update', config, { collection, slug: entryObj.slug, path: entryObj.path });
|
||||||
collection.get("label") } “${ entryObj.slug }”`;
|
|
||||||
|
|
||||||
const mode = config.get("publish_mode");
|
const mode = config.get("publish_mode");
|
||||||
|
|
||||||
@ -322,9 +348,9 @@ in the ${collection.get('name')} collection.\
|
|||||||
.then(() => entryObj.slug);
|
.then(() => entryObj.slug);
|
||||||
}
|
}
|
||||||
|
|
||||||
persistMedia(file) {
|
persistMedia(config, file) {
|
||||||
const options = {
|
const options = {
|
||||||
commitMessage: `Upload ${file.path}`,
|
commitMessage: commitMessageFormatter('uploadMedia', config, { path: file.path }),
|
||||||
};
|
};
|
||||||
return this.implementation.persistMedia(file, options);
|
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"));
|
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);
|
return this.implementation.deleteFile(path, commitMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteMedia(path) {
|
deleteMedia(config, path) {
|
||||||
const commitMessage = `Delete ${path}`;
|
const commitMessage = commitMessageFormatter('deleteMedia', config, { path });
|
||||||
return this.implementation.deleteFile(path, commitMessage);
|
return this.implementation.deleteFile(path, commitMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,3 +91,37 @@ To enable this feature, you can set the following option in your `config.yml`:
|
|||||||
backend:
|
backend:
|
||||||
squash_merges: true
|
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user