From ff0c66acf26e6e8333302cdd996b6615aec37fd3 Mon Sep 17 00:00:00 2001 From: Daniel Dourvaris Date: Mon, 26 Aug 2019 21:49:06 +0200 Subject: [PATCH] diffs: handle paths with quotes in diffs. --- rhodecode/lib/vcs/backends/git/diff.py | 4 ++-- rhodecode/lib/vcs/backends/hg/diff.py | 6 +++--- rhodecode/lib/vcs/backends/svn/diff.py | 5 ++--- rhodecode/tests/fixtures/git_diff_js_chars.diff | 7 +++++++ rhodecode/tests/lib/test_diffs.py | 8 ++++++++ 5 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 rhodecode/tests/fixtures/git_diff_js_chars.diff diff --git a/rhodecode/lib/vcs/backends/git/diff.py b/rhodecode/lib/vcs/backends/git/diff.py index c00e3f6a..fa6ba042 100644 --- a/rhodecode/lib/vcs/backends/git/diff.py +++ b/rhodecode/lib/vcs/backends/git/diff.py @@ -44,6 +44,6 @@ class GitDiff(base.Diff): (?:^index[ ](?P[0-9A-Fa-f]+) \.\.(?P[0-9A-Fa-f]+)[ ]?(?P.+)?(?:\n|$))? (?:^(?PGIT[ ]binary[ ]patch)(?:\n|$))? - (?:^---[ ](a/(?P.+)|/dev/null)(?:\n|$))? - (?:^\+\+\+[ ](b/(?P.+)|/dev/null)(?:\n|$))? + (?:^---[ ]("?a/(?P.+)|/dev/null)(?:\n|$))? + (?:^\+\+\+[ ]("?b/(?P.+)|/dev/null)(?:\n|$))? """, re.VERBOSE | re.MULTILINE) diff --git a/rhodecode/lib/vcs/backends/hg/diff.py b/rhodecode/lib/vcs/backends/hg/diff.py index d14d1ded..f7c9c1fe 100644 --- a/rhodecode/lib/vcs/backends/hg/diff.py +++ b/rhodecode/lib/vcs/backends/hg/diff.py @@ -19,7 +19,7 @@ # and proprietary license terms, please see https://rhodecode.com/licenses/ """ -GIT diff module +HG diff module """ import re @@ -44,6 +44,6 @@ class MercurialDiff(base.Diff): (?:^index[ ](?P[0-9A-Fa-f]+) \.\.(?P[0-9A-Fa-f]+)[ ]?(?P.+)?(?:\n|$))? (?:^(?PGIT[ ]binary[ ]patch)(?:\n|$))? - (?:^---[ ](a/(?P.+)|/dev/null)(?:\n|$))? - (?:^\+\+\+[ ](b/(?P.+)|/dev/null)(?:\n|$))? + (?:^---[ ]("?a/(?P.+)|/dev/null)(?:\n|$))? + (?:^\+\+\+[ ]("?b/(?P.+)|/dev/null)(?:\n|$))? """, re.VERBOSE | re.MULTILINE) diff --git a/rhodecode/lib/vcs/backends/svn/diff.py b/rhodecode/lib/vcs/backends/svn/diff.py index 84ac806b..41ca0725 100644 --- a/rhodecode/lib/vcs/backends/svn/diff.py +++ b/rhodecode/lib/vcs/backends/svn/diff.py @@ -18,7 +18,6 @@ # RhodeCode Enterprise Edition, including its added features, Support services, # and proprietary license terms, please see https://rhodecode.com/licenses/ - """ SVN diff module """ @@ -47,6 +46,6 @@ class SubversionDiff(base.Diff): (?:^index[ ](?P[0-9A-Fa-f]+) \.\.(?P[0-9A-Fa-f]+)[ ]?(?P.+)?(?:\n|$))? (?:^(?PGIT[ ]binary[ ]patch)(?:\n|$))? - (?:^---[ ](a/(?P.+)|/dev/null)\t\(revision[ ]\d+\)(?:\n|$))? - (?:^\+\+\+[ ](b/(?P.+)|/dev/null)\t\(revision[ ]\d+\)(?:\n|$))? + (?:^---[ ]("?a/(?P.+)|/dev/null)\t\(revision[ ]\d+\)(?:\n|$))? + (?:^\+\+\+[ ]("?b/(?P.+)|/dev/null)\t\(revision[ ]\d+\)(?:\n|$))? """, re.VERBOSE | re.MULTILINE) diff --git a/rhodecode/tests/fixtures/git_diff_js_chars.diff b/rhodecode/tests/fixtures/git_diff_js_chars.diff new file mode 100644 index 00000000..c04e878c --- /dev/null +++ b/rhodecode/tests/fixtures/git_diff_js_chars.diff @@ -0,0 +1,7 @@ +diff --git "a/\">/\">.txt" "b/\">/\">.txt" +index e69de29..8eb97de 100644 +--- "a/\">/\">.txt" ++++ "b/\">/\">.txt" +@@ -0,0 +1 @@ ++Ehlo eglo +\ No newline at end of file diff --git a/rhodecode/tests/lib/test_diffs.py b/rhodecode/tests/lib/test_diffs.py index 4b8fe11b..ac4081d1 100644 --- a/rhodecode/tests/lib/test_diffs.py +++ b/rhodecode/tests/lib/test_diffs.py @@ -342,6 +342,14 @@ DIFF_FIXTURES = [ 'binary': True, 'ops': {CHMOD_FILENODE: 'modified file chmod 100644 => 100755'}}) ]), + ('git', + 'git_diff_js_chars.diff', + [('\\">/\\">.txt', 'M', + {'added': 1, + 'deleted': 0, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}) + ]), ('git', 'git_diff_rename_file.diff', [('file.xls', 'M',