Skip to content

Commit

Permalink
#3238 Merge from 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
ashishjain0512 committed Aug 30, 2022
2 parents e542339 + d7e0888 commit d2aaf6a
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 2 deletions.
4 changes: 2 additions & 2 deletions cypress/integration/rendering/gitGraph.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ describe('Git Graph diagram', () => {
{}
);
});
it('7: should render a simple gitgraph with three branches and merge commit', () => {
it('7: should render a simple gitgraph with three branches and tagged merge commit', () => {
imgSnapshotTest(
`gitGraph
commit id: "1"
Expand All @@ -93,7 +93,7 @@ describe('Git Graph diagram', () => {
checkout nice_feature
commit id: "7"
checkout main
merge nice_feature
merge nice_feature id: "12345" tag: "my merge commit"
checkout very_nice_feature
commit id: "8"
checkout main
Expand Down
2 changes: 2 additions & 0 deletions docs/gitgraph.md
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,8 @@ After this we made use of the `checkout` keyword to set the current branch as `m
After this we merge the `develop` branch onto the current branch `main`, resulting in a merge commit.
Since the current branch at this point is still `main`, the last two commits are registered against that.

Additionally, you may add a tag to the merge commit, or override the default id: `merge branch id:"1234" tag:"v1.0.0"`

### Cherry Pick commit from another branch
Similar to how 'git' allows you to cherry-pick a commit from **another branch** onto the **current** branch, Mermaid also supports this functionality. You can also cherry-pick a commit from another branch using the `cherry-pick` keyword.

Expand Down
2 changes: 2 additions & 0 deletions src/diagrams/git/gitGraphAst.js
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,8 @@ export const branch = function (name, order) {

export const merge = function (otherBranch, custom_id, override_type, custom_tag) {
otherBranch = common.sanitizeText(otherBranch, configApi.getConfig());
custom_id = common.sanitizeText(custom_id, configApi.getConfig());

const currentCommit = commits[branches[curBranch]];
const otherCommit = commits[branches[otherBranch]];
if (curBranch === otherBranch) {
Expand Down
70 changes: 70 additions & 0 deletions src/diagrams/git/gitGraphParserV2.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,76 @@ describe('when parsing a gitGraph', function () {
]);
});

it('should handle merge ids', function () {
const str = `gitGraph:
commit
branch testBranch
checkout testBranch
commit
checkout main
%% Merge Tag and ID
merge testBranch tag: "merge-tag" id: "2-222"
branch testBranch2
checkout testBranch2
commit
checkout main
%% Merge ID and Tag (reverse order)
merge testBranch2 id: "4-444" tag: "merge-tag2"
branch testBranch3
checkout testBranch3
commit
checkout main
%% just Merge ID
merge testBranch3 id: "6-666"
`;

parser.parse(str);
const commits = parser.yy.getCommits();
expect(Object.keys(commits).length).toBe(7);
expect(parser.yy.getCurrentBranch()).toBe('main');
expect(parser.yy.getDirection()).toBe('LR');

// The order of these commits is in alphabetical order of IDs
const [
mainCommit,
testBranchCommit,
testBranchMerge,
testBranch2Commit,
testBranch2Merge,
testBranch3Commit,
testBranch3Merge,
] = Object.values(commits);

console.log(Object.keys(commits));

expect(mainCommit.branch).toBe('main');
expect(mainCommit.parents).toStrictEqual([]);

expect(testBranchCommit.branch).toBe('testBranch');
expect(testBranchCommit.parents).toStrictEqual([mainCommit.id]);

expect(testBranchMerge.branch).toBe('main');
expect(testBranchMerge.parents).toStrictEqual([mainCommit.id, testBranchCommit.id]);
expect(testBranchMerge.tag).toBe('merge-tag');
expect(testBranchMerge.id).toBe('2-222');

expect(testBranch2Merge.branch).toBe('main');
expect(testBranch2Merge.parents).toStrictEqual([testBranchMerge.id, testBranch2Commit.id]);
expect(testBranch2Merge.tag).toBe('merge-tag2');
expect(testBranch2Merge.id).toBe('4-444');

expect(testBranch3Merge.branch).toBe('main');
expect(testBranch3Merge.parents).toStrictEqual([testBranch2Merge.id, testBranch3Commit.id]);
expect(testBranch3Merge.id).toBe('6-666');

expect(parser.yy.getBranchesAsObjArray()).toStrictEqual([
{ name: 'main' },
{ name: 'testBranch' },
{ name: 'testBranch2' },
{ name: 'testBranch3' },
]);
});

it('should throw error when try to branch existing branch: main', function () {
const str = `gitGraph
commit
Expand Down

0 comments on commit d2aaf6a

Please sign in to comment.