From 59c69600e8f14912cd5a39e9fbce4e90c4eb44b8 Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Thu, 15 Sep 2022 01:05:11 +0100 Subject: [PATCH] fix(git): support single character branch names In gitGraph, add support branch names that only have a single character. The branch regex is checking for a starting character, and an ending character, so it currently needs at least two characters. I've wrapped everything except the first character in a `()?` to fix this. There are some really complicated regexes that do match what valid git branches are (see https://stackoverflow.com/a/12093994), but I'm reluctant to add them in, since it will be a pain to test all the different edgecases. Hopefully https://github.com/mermaid-js/mermaid/pull/3432 might be used in the future to make a better gitgraph parser! --- src/diagrams/git/gitGraphParserV2.spec.js | 7 +++++-- src/diagrams/git/parser/gitGraph.jison | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/diagrams/git/gitGraphParserV2.spec.js b/src/diagrams/git/gitGraphParserV2.spec.js index fcf965d71..b6c9c2459 100644 --- a/src/diagrams/git/gitGraphParserV2.spec.js +++ b/src/diagrams/git/gitGraphParserV2.spec.js @@ -372,14 +372,16 @@ describe('when parsing a gitGraph', function () { branch cherry-pick03 branch branch/example-branch branch merge/test_merge + %% single character branch name + branch A `; parser.parse(str); const commits = parser.yy.getCommits(); expect(Object.keys(commits).length).toBe(1); - expect(parser.yy.getCurrentBranch()).toBe('merge/test_merge'); + expect(parser.yy.getCurrentBranch()).toBe('A'); expect(parser.yy.getDirection()).toBe('LR'); - expect(Object.keys(parser.yy.getBranches()).length).toBe(6); + expect(Object.keys(parser.yy.getBranches()).length).toBe(7); expect(Object.keys(parser.yy.getBranches())).toEqual( expect.arrayContaining([ 'branch01', @@ -387,6 +389,7 @@ describe('when parsing a gitGraph', function () { 'cherry-pick03', 'branch/example-branch', 'merge/test_merge', + 'A', ]) ); }); diff --git a/src/diagrams/git/parser/gitGraph.jison b/src/diagrams/git/parser/gitGraph.jison index 15909a314..f35dbcde3 100644 --- a/src/diagrams/git/parser/gitGraph.jison +++ b/src/diagrams/git/parser/gitGraph.jison @@ -61,7 +61,7 @@ checkout(?=\s|$) return 'CHECKOUT'; ["] this.popState(); [^"]* return 'STR'; [0-9]+(?=\s|$) return 'NUM'; -\w[-\./\w]*[-\w] return 'ID'; // only a subset of https://git-scm.com/docs/git-check-ref-format +\w([-\./\w]*[-\w])? return 'ID'; // only a subset of https://git-scm.com/docs/git-check-ref-format <> return 'EOF'; \s+ /* skip all whitespace */ // lowest priority so we can use lookaheads in earlier regex