mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-19 15:30:03 +02:00
Parser and Logic For Parent Commit Added
This commit is contained in:
@@ -256,7 +256,7 @@ export const merge = function (otherBranch, custom_id, override_type, custom_tag
|
|||||||
log.debug('in mergeBranch');
|
log.debug('in mergeBranch');
|
||||||
};
|
};
|
||||||
|
|
||||||
export const cherryPick = function (sourceId, targetId, tag) {
|
export const cherryPick = function (sourceId, targetId, tag, parentCommit) {
|
||||||
log.debug('Entering cherryPick:', sourceId, targetId, tag);
|
log.debug('Entering cherryPick:', sourceId, targetId, tag);
|
||||||
sourceId = common.sanitizeText(sourceId, configApi.getConfig());
|
sourceId = common.sanitizeText(sourceId, configApi.getConfig());
|
||||||
targetId = common.sanitizeText(targetId, configApi.getConfig());
|
targetId = common.sanitizeText(targetId, configApi.getConfig());
|
||||||
@@ -275,21 +275,35 @@ export const cherryPick = function (sourceId, targetId, tag) {
|
|||||||
};
|
};
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
let sourceCommit = commits[sourceId];
|
let sourceCommit = commits[sourceId];
|
||||||
let sourceCommitBranch = sourceCommit.branch;
|
let sourceCommitBranch = sourceCommit.branch;
|
||||||
if (sourceCommit.type === commitType.MERGE) {
|
if (sourceCommit.type === commitType.MERGE) {
|
||||||
let error = new Error(
|
if (!parentCommit) {
|
||||||
'Incorrect usage of "cherryPick". Source commit should not be a merge commit'
|
let error = new Error(
|
||||||
);
|
'Incorrect usage of cherryPick: If the source commit is a merge commit, an immediate parent commit must be specified.'
|
||||||
error.hash = {
|
);
|
||||||
text: 'cherryPick ' + sourceId + ' ' + targetId,
|
error.hash = {
|
||||||
token: 'cherryPick ' + sourceId + ' ' + targetId,
|
text: 'cherryPick ' + sourceId + ' ' + targetId,
|
||||||
line: '1',
|
token: 'cherryPick ' + sourceId + ' ' + targetId,
|
||||||
loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
|
line: '1',
|
||||||
expected: ['cherry-pick abc'],
|
loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
|
||||||
};
|
expected: ['cherry-pick abc'],
|
||||||
throw error;
|
};
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
if (!(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommit))) {
|
||||||
|
let error = new Error(
|
||||||
|
'Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.'
|
||||||
|
);
|
||||||
|
error.hash = {
|
||||||
|
text: 'cherryPick ' + sourceId + ' ' + targetId,
|
||||||
|
token: 'cherryPick ' + sourceId + ' ' + targetId,
|
||||||
|
line: '1',
|
||||||
|
loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
|
||||||
|
expected: ['cherry-pick abc'],
|
||||||
|
};
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!targetId || commits[targetId] === undefined) {
|
if (!targetId || commits[targetId] === undefined) {
|
||||||
// cherry-pick source commit to current branch
|
// cherry-pick source commit to current branch
|
||||||
@@ -328,7 +342,11 @@ export const cherryPick = function (sourceId, targetId, tag) {
|
|||||||
parents: [head == null ? null : head.id, sourceCommit.id],
|
parents: [head == null ? null : head.id, sourceCommit.id],
|
||||||
branch: curBranch,
|
branch: curBranch,
|
||||||
type: commitType.CHERRY_PICK,
|
type: commitType.CHERRY_PICK,
|
||||||
tag: tag ?? 'cherry-pick:' + sourceCommit.id,
|
tag: tag
|
||||||
|
? `${tag}${sourceCommit.type === commitType.MERGE ? ` | parent: ${parentCommit}` : ''}`
|
||||||
|
: `cherry-pick: ${sourceCommit.id}${
|
||||||
|
sourceCommit.type === commitType.MERGE ? ` | parent: ${parentCommit}` : ''
|
||||||
|
}`,
|
||||||
};
|
};
|
||||||
head = commit;
|
head = commit;
|
||||||
commits[commit.id] = commit;
|
commits[commit.id] = commit;
|
||||||
|
@@ -39,6 +39,7 @@ branch(?=\s|$) return 'BRANCH';
|
|||||||
"order:" return 'ORDER';
|
"order:" return 'ORDER';
|
||||||
merge(?=\s|$) return 'MERGE';
|
merge(?=\s|$) return 'MERGE';
|
||||||
cherry\-pick(?=\s|$) return 'CHERRY_PICK';
|
cherry\-pick(?=\s|$) return 'CHERRY_PICK';
|
||||||
|
"parent:" return 'PARENT_COMMIT'
|
||||||
// "reset" return 'RESET';
|
// "reset" return 'RESET';
|
||||||
checkout(?=\s|$) return 'CHECKOUT';
|
checkout(?=\s|$) return 'CHECKOUT';
|
||||||
"LR" return 'DIR';
|
"LR" return 'DIR';
|
||||||
@@ -109,10 +110,15 @@ branchStatement
|
|||||||
|
|
||||||
cherryPickStatement
|
cherryPickStatement
|
||||||
: CHERRY_PICK COMMIT_ID STR {yy.cherryPick($3, '', undefined)}
|
: CHERRY_PICK COMMIT_ID STR {yy.cherryPick($3, '', undefined)}
|
||||||
|
| CHERRY_PICK COMMIT_ID STR PARENT_COMMIT STR {yy.cherryPick($3, '', undefined,$5)}
|
||||||
| CHERRY_PICK COMMIT_ID STR COMMIT_TAG STR {yy.cherryPick($3, '', $5)}
|
| CHERRY_PICK COMMIT_ID STR COMMIT_TAG STR {yy.cherryPick($3, '', $5)}
|
||||||
|
| CHERRY_PICK COMMIT_ID STR PARENT_COMMIT STR COMMIT_TAG STR {yy.cherryPick($3, '', $7,$5)}
|
||||||
|
| CHERRY_PICK COMMIT_ID STR COMMIT_TAG STR PARENT_COMMIT STR {yy.cherryPick($3, '', $5,$7)}
|
||||||
| CHERRY_PICK COMMIT_ID STR COMMIT_TAG EMPTYSTR {yy.cherryPick($3, '', '')}
|
| CHERRY_PICK COMMIT_ID STR COMMIT_TAG EMPTYSTR {yy.cherryPick($3, '', '')}
|
||||||
| CHERRY_PICK COMMIT_TAG STR COMMIT_ID STR {yy.cherryPick($5, '', $3)}
|
| CHERRY_PICK COMMIT_ID STR PARENT_COMMIT STR COMMIT_TAG EMPTYSTR {yy.cherryPick($3, '', '',$5)}
|
||||||
| CHERRY_PICK COMMIT_TAG EMPTYSTR COMMIT_ID STR {yy.cherryPick($3, '', '')}
|
| CHERRY_PICK COMMIT_ID STR COMMIT_TAG EMPTYSTR PARENT_COMMIT STR {yy.cherryPick($3, '', '',$7)}
|
||||||
|
| CHERRY_PICK COMMIT_TAG STR COMMIT_ID STR PARENT_COMMIT STR {yy.cherryPick($5, '', $3,$7)}
|
||||||
|
| CHERRY_PICK COMMIT_TAG EMPTYSTR COMMIT_ID STR PARENT_COMMIT STR{yy.cherryPick($5, '', '',$7)}
|
||||||
;
|
;
|
||||||
|
|
||||||
mergeStatement
|
mergeStatement
|
||||||
|
Reference in New Issue
Block a user