mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-03 20:34:20 +01:00 
			
		
		
		
	Merge pull request #3479 from elliot-nelson/enelson/git-cherry-pick-tag
feat(git): cherry-pick keyword supports tag attribute
This commit is contained in:
		@@ -258,9 +258,11 @@ export const merge = function (otherBranch, custom_id, override_type, custom_tag
 | 
			
		||||
  log.debug('in mergeBranch');
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const cherryPick = function (sourceId, targetId) {
 | 
			
		||||
export const cherryPick = function (sourceId, targetId, tag) {
 | 
			
		||||
  log.debug('Entering cherryPick:', sourceId, targetId, tag);
 | 
			
		||||
  sourceId = common.sanitizeText(sourceId, configApi.getConfig());
 | 
			
		||||
  targetId = common.sanitizeText(targetId, configApi.getConfig());
 | 
			
		||||
  tag = common.sanitizeText(tag, configApi.getConfig());
 | 
			
		||||
 | 
			
		||||
  if (!sourceId || typeof commits[sourceId] === 'undefined') {
 | 
			
		||||
    let error = new Error(
 | 
			
		||||
@@ -328,13 +330,13 @@ export const cherryPick = function (sourceId, targetId) {
 | 
			
		||||
      parents: [head == null ? null : head.id, sourceCommit.id],
 | 
			
		||||
      branch: curBranch,
 | 
			
		||||
      type: commitType.CHERRY_PICK,
 | 
			
		||||
      tag: 'cherry-pick:' + sourceCommit.id,
 | 
			
		||||
      tag: tag ?? 'cherry-pick:' + sourceCommit.id,
 | 
			
		||||
    };
 | 
			
		||||
    head = commit;
 | 
			
		||||
    commits[commit.id] = commit;
 | 
			
		||||
    branches[curBranch] = commit.id;
 | 
			
		||||
    log.debug(branches);
 | 
			
		||||
    log.debug('in cheeryPick');
 | 
			
		||||
    log.debug('in cherryPick');
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
export const checkout = function (branch) {
 | 
			
		||||
 
 | 
			
		||||
@@ -627,6 +627,38 @@ describe('when parsing a gitGraph', function () {
 | 
			
		||||
    expect(commits[cherryPickCommitID].branch).toBe('main');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should support cherry-picking commits with custom tag', function () {
 | 
			
		||||
    const str = `gitGraph
 | 
			
		||||
    commit id: "ZERO"
 | 
			
		||||
    branch develop
 | 
			
		||||
    commit id:"A"
 | 
			
		||||
    checkout main
 | 
			
		||||
    cherry-pick id:"A" tag:"MyTag"
 | 
			
		||||
    `;
 | 
			
		||||
 | 
			
		||||
    parser.parse(str);
 | 
			
		||||
    const commits = parser.yy.getCommits();
 | 
			
		||||
    const cherryPickCommitID = Object.keys(commits)[2];
 | 
			
		||||
    expect(commits[cherryPickCommitID].tag).toBe('MyTag');
 | 
			
		||||
    expect(commits[cherryPickCommitID].branch).toBe('main');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should support cherry-picking commits with no tag', function () {
 | 
			
		||||
    const str = `gitGraph
 | 
			
		||||
    commit id: "ZERO"
 | 
			
		||||
    branch develop
 | 
			
		||||
    commit id:"A"
 | 
			
		||||
    checkout main
 | 
			
		||||
    cherry-pick id:"A" tag:""
 | 
			
		||||
    `;
 | 
			
		||||
 | 
			
		||||
    parser.parse(str);
 | 
			
		||||
    const commits = parser.yy.getCommits();
 | 
			
		||||
    const cherryPickCommitID = Object.keys(commits)[2];
 | 
			
		||||
    expect(commits[cherryPickCommitID].tag).toBe('');
 | 
			
		||||
    expect(commits[cherryPickCommitID].branch).toBe('main');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should throw error when try to branch existing branch: main', function () {
 | 
			
		||||
    const str = `gitGraph
 | 
			
		||||
    commit
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,7 @@ checkout(?=\s|$)                        return 'CHECKOUT';
 | 
			
		||||
"options"\r?\n                          this.begin("options"); //
 | 
			
		||||
<options>[ \r\n\t]+"end"                this.popState();       // not used anymore in the renderer, fixed for backward compatibility
 | 
			
		||||
<options>[\s\S]+(?=[ \r\n\t]+"end")     return 'OPT';          //
 | 
			
		||||
["]["]                                  return 'EMPTYSTR';
 | 
			
		||||
["]                                     this.begin("string");
 | 
			
		||||
<string>["]                             this.popState();
 | 
			
		||||
<string>[^"]*                           return 'STR';
 | 
			
		||||
@@ -117,7 +118,11 @@ branchStatement
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
cherryPickStatement
 | 
			
		||||
    : CHERRY_PICK COMMIT_ID STR {yy.cherryPick($3)}
 | 
			
		||||
    : CHERRY_PICK COMMIT_ID STR {yy.cherryPick($3, '', undefined)}
 | 
			
		||||
    | CHERRY_PICK COMMIT_ID STR COMMIT_TAG STR {yy.cherryPick($3, '', $5)}
 | 
			
		||||
    | 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_TAG EMPTYSTR COMMIT_ID STR {yy.cherryPick($3, '', '')}
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
mergeStatement
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user