From b79cf761cf351c41373b0fd32566f7773822d008 Mon Sep 17 00:00:00 2001 From: James Fairbairn Date: Wed, 16 Mar 2022 10:47:45 +1300 Subject: [PATCH] Fix bug when grepping lines that contain numbers surrounded by colons Signed-off-by: James Fairbairn --- lib/git/lib.rb | 2 +- tests/files/working/colon_numbers.txt | 1 + tests/files/working/dot_git/index | Bin 352 -> 526 bytes tests/files/working/dot_git/logs/HEAD | 1 + .../working/dot_git/logs/refs/heads/git_grep | 1 + .../46/abbf07e3c564c723c7c039a43ab3a39e5d02dd | 1 + .../55/cbfe9fdf29da8b9dac05cb3c515055fe52ac2d | Bin 0 -> 158 bytes .../e7/6778b73006b0dda0dd56e9257c5bf6b6dd3373 | Bin 0 -> 69 bytes .../files/working/dot_git/refs/heads/git_grep | 2 +- .../dot_git/refs/tags/grep_colon_numbers | 1 + tests/units/test_describe.rb | 4 +-- tests/units/test_lib.rb | 9 +++++-- tests/units/test_log.rb | 24 +++++++++--------- tests/units/test_status.rb | 4 ++- 14 files changed, 31 insertions(+), 19 deletions(-) create mode 100644 tests/files/working/colon_numbers.txt create mode 100644 tests/files/working/dot_git/objects/46/abbf07e3c564c723c7c039a43ab3a39e5d02dd create mode 100644 tests/files/working/dot_git/objects/55/cbfe9fdf29da8b9dac05cb3c515055fe52ac2d create mode 100644 tests/files/working/dot_git/objects/e7/6778b73006b0dda0dd56e9257c5bf6b6dd3373 create mode 100644 tests/files/working/dot_git/refs/tags/grep_colon_numbers diff --git a/lib/git/lib.rb b/lib/git/lib.rb index 2d6c129d..8f450c86 100644 --- a/lib/git/lib.rb +++ b/lib/git/lib.rb @@ -419,7 +419,7 @@ def grep(string, opts = {}) hsh = {} command_lines('grep', grep_opts).each do |line| - if m = /(.*)\:(\d+)\:(.*)/.match(line) + if m = /(.*?)\:(\d+)\:(.*)/.match(line) hsh[m[1]] ||= [] hsh[m[1]] << [m[2].to_i, m[3]] end diff --git a/tests/files/working/colon_numbers.txt b/tests/files/working/colon_numbers.txt new file mode 100644 index 00000000..e76778b7 --- /dev/null +++ b/tests/files/working/colon_numbers.txt @@ -0,0 +1 @@ +Grep regex doesn't like this:4342: because it is bad diff --git a/tests/files/working/dot_git/index b/tests/files/working/dot_git/index index ef22be73369fe2742f17b338c3e9017511ad4112..9896710a283289dc577f4196d6ec40026e0a2a25 100644 GIT binary patch delta 371 zcmaFB)W=fq;u+-3z`(!+#H>kr2Udyem|q6cMg0HT(-?tbjA1)YFfcSOVPIhV3REKk z#HP>FE4CZ3ZMeJOZrDrJn&@xa?iv>}2qx#}1E!P68`iP zMuW}s741VZZ=$}gN|IjbZOKckO<^=xS%9`8k}{Er4LT5Yx57Vz)d6X!I%O1f7oh4M zaI1sW0cof@6=Zdj6&Q7jLV{dff&K|&FjX+(3O)UA{(a3`-E-Hlp0)`L2>lndMz=UQ zzodl0NWp;1RpHR=j<~ryH{7?WUR_ZjS|`hJIJF`^C9{aZ5Gb8p$$KYmwZX@p)puEi hU;Mar;L_!{0kQHgT>V>P^Hv1 1378910110 -0400 commit (merge): Merge commit '4ce44a75510cbfe200b131fdbcc56a86f1b2dc08' into cherry faf8d899a0f123c3c5def10857920be1c930e8ed 5e392652a881999392c2757cf9b783c5d47b67f7 Scott Chacon 1378910135 -0400 checkout: moving from cherry to master 5e392652a881999392c2757cf9b783c5d47b67f7 5e53019b3238362144c2766f02a2c00d91fcc023 Scott Chacon 1378910138 -0400 checkout: moving from master to git_grep +5e53019b3238362144c2766f02a2c00d91fcc023 46abbf07e3c564c723c7c039a43ab3a39e5d02dd Scott Chacon 1647231179 +1300 commit: add example for grep with colon and numbers diff --git a/tests/files/working/dot_git/logs/refs/heads/git_grep b/tests/files/working/dot_git/logs/refs/heads/git_grep index 0123a146..22a6f143 100644 --- a/tests/files/working/dot_git/logs/refs/heads/git_grep +++ b/tests/files/working/dot_git/logs/refs/heads/git_grep @@ -3,3 +3,4 @@ a3db7143944dcfa006fefe7fb49c48793cb29ade 34a566d193dc4702f03149969a2aad1443231560 scott Chacon 1194632975 -0800 commit: modified to not show up 34a566d193dc4702f03149969a2aad1443231560 935badc874edd62a8629aaf103418092c73f0a56 scott Chacon 1194633382 -0800 commit: more search help 935badc874edd62a8629aaf103418092c73f0a56 5e53019b3238362144c2766f02a2c00d91fcc023 scott Chacon 1194720731 -0800 commit: diff test +5e53019b3238362144c2766f02a2c00d91fcc023 46abbf07e3c564c723c7c039a43ab3a39e5d02dd Scott Chacon 1647231179 +1300 commit: add example for grep with colon and numbers diff --git a/tests/files/working/dot_git/objects/46/abbf07e3c564c723c7c039a43ab3a39e5d02dd b/tests/files/working/dot_git/objects/46/abbf07e3c564c723c7c039a43ab3a39e5d02dd new file mode 100644 index 00000000..9675e231 --- /dev/null +++ b/tests/files/working/dot_git/objects/46/abbf07e3c564c723c7c039a43ab3a39e5d02dd @@ -0,0 +1 @@ +xQj0DSH+A('XVG0<I-ezS"YƜ2ėe#K9сuq/>&9lQMe𳯵ᶲ+_!| ӌ޹9»֚Aal 7=Àdz,/RL \ No newline at end of file diff --git a/tests/files/working/dot_git/objects/55/cbfe9fdf29da8b9dac05cb3c515055fe52ac2d b/tests/files/working/dot_git/objects/55/cbfe9fdf29da8b9dac05cb3c515055fe52ac2d new file mode 100644 index 0000000000000000000000000000000000000000..8ea983cf5d1e6d05d6a6776e1e921df6377f0eab GIT binary patch literal 158 zcmV;P0Ac@l0V^p=O;s>7v1BkbFfcPQQAp0u$vo{1$3jYDHph zK~5^zoZjQJo+oDQm(%r)oqjd#)246d9ymkHDNfEWDPeF`I5fK>Ztl(v_id_IR}_fW M$ub-U02SXuthmBTz5oCK literal 0 HcmV?d00001 diff --git a/tests/files/working/dot_git/objects/e7/6778b73006b0dda0dd56e9257c5bf6b6dd3373 b/tests/files/working/dot_git/objects/e7/6778b73006b0dda0dd56e9257c5bf6b6dd3373 new file mode 100644 index 0000000000000000000000000000000000000000..28df1dc013314799f6595566aad255a4c4327684 GIT binary patch literal 69 zcmV-L0J{Hp0ZYosPf{>7W^gY`El?;*O;4>*NXbtv&QmW@$jQu3RVc~GEVeQ+HZihN bNJ>pkEG true}), 'v2.8') + assert_equal(@git.describe(nil, {:tags => true}), 'grep_colon_numbers') end end diff --git a/tests/units/test_lib.rb b/tests/units/test_lib.rb index 8c8c420d..d589eac6 100644 --- a/tests/units/test_lib.rb +++ b/tests/units/test_lib.rb @@ -19,7 +19,7 @@ def test_fetch_unshallow git = Git.clone("file://#{@wdir}", "shallow", path: dir, depth: 1).lib assert_equal(1, git.log_commits.length) git.fetch("file://#{@wdir}", unshallow: true) - assert_equal(71, git.log_commits.length) + assert_equal(72, git.log_commits.length) end end @@ -282,10 +282,15 @@ def test_grep match = @lib.grep('search', :object => 'gitsearch1', :invert_match => true) assert_equal(6, match['gitsearch1:scott/text.txt'].size) assert_equal(2, match.size) + + match = @lib.grep('Grep', :object => 'grep_colon_numbers') + assert_equal("Grep regex doesn't like this:4342: because it is bad", match['grep_colon_numbers:colon_numbers.txt'].first[1]) + assert_equal(1, match.size) end def test_show - assert(/^commit 5e53019b3238362144c2766f02a2c00d91fcc023.+\+replace with new text - diff test$/m.match(@lib.show)) + puts @lib.show + assert_match(/^commit 46abbf07e3c564c723c7c039a43ab3a39e5d02dd.+\+Grep regex doesn't like this:4342: because it is bad\n$/m, @lib.show) assert(/^commit 935badc874edd62a8629aaf103418092c73f0a56.+\+nothing!$/m.match(@lib.show('gitsearch1'))) assert(/^hello.+nothing!$/m.match(@lib.show('gitsearch1', 'scott/text.txt'))) assert(@lib.show('gitsearch1', 'scott/text.txt') == "hello\nthis is\na file\nthat is\nput here\nto search one\nto search two\nnothing!\n") diff --git a/tests/units/test_log.rb b/tests/units/test_log.rb index 81c6e300..4a947842 100644 --- a/tests/units/test_log.rb +++ b/tests/units/test_log.rb @@ -12,13 +12,13 @@ def setup def test_get_fisrt_and_last_entries log = @git.log assert(log.first.is_a?(Git::Object::Commit)) - assert_equal('5e53019b3238362144c2766f02a2c00d91fcc023', log.first.objectish) + assert_equal('46abbf07e3c564c723c7c039a43ab3a39e5d02dd', log.first.objectish) assert(log.last.is_a?(Git::Object::Commit)) - assert_equal('f1410f8735f6f73d3599eb9b5cdd2fb70373335c', log.last.objectish) + assert_equal('b03003311ad3fa368b475df58390353868e13c91', log.last.objectish) end - - def test_get_log_entries + + def test_get_log_entries assert_equal(30, @git.log.size) assert_equal(50, @git.log(50).size) assert_equal(10, @git.log(10).size) @@ -35,15 +35,15 @@ def test_log_skip assert_equal(three2.sha, three3.sha) assert_equal(three1.sha, three2.sha) end - + def test_get_log_since l = @git.log.since("2 seconds ago") assert_equal(0, l.size) - + l = @git.log.since("#{Date.today.year - 2006} years ago") assert_equal(30, l.size) end - + def test_get_log_grep l = @git.log.grep("search") assert_equal(2, l.size) @@ -55,11 +55,11 @@ def test_get_log_author l = @git.log(5).author("lazySusan") assert_equal(0, l.size) end - - def test_get_log_since_file + + def test_get_log_since_file l = @git.log.path('example.txt') assert_equal(30, l.size) - + l = @git.log.between('v2.5', 'test').path('example.txt') assert_equal(1, l.size) end @@ -72,7 +72,7 @@ def test_get_log_path log = @git.log.path(['example.txt','scott/text.txt']) assert_equal(30, log.size) end - + def test_log_file_noexist assert_raise Git::GitExecuteError do @git.log.object('no-exist.txt').size @@ -96,5 +96,5 @@ def test_log_cherry l = @git.log.between( 'master', 'cherry').cherry assert_equal( 1, l.size ) end - + end diff --git a/tests/units/test_status.rb b/tests/units/test_status.rb index 2a2e7836..964a59ae 100644 --- a/tests/units/test_status.rb +++ b/tests/units/test_status.rb @@ -12,7 +12,9 @@ def setup def test_status_pretty in_temp_dir do |path| git = Git.clone(@wdir, 'test_dot_files_status') - string = "ex_dir/ex.txt\n\tsha(r) \n\tsha(i) e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 " \ + string = "colon_numbers.txt\n\tsha(r) \n\tsha(i) " \ + "e76778b73006b0dda0dd56e9257c5bf6b6dd3373 100644\n\ttype \n\tstage 0\n\tuntrac \n" \ + "ex_dir/ex.txt\n\tsha(r) \n\tsha(i) e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 " \ "100644\n\ttype \n\tstage 0\n\tuntrac \nexample.txt\n\tsha(r) \n\tsha(i) " \ "8dc79ae7616abf1e2d4d5d97d566f2b2f6cee043 100644\n\ttype \n\tstage 0\n\tuntrac " \ "\nscott/newfile\n\tsha(r) \n\tsha(i) 5d4606820736043f9eed2a6336661d6892c820a5 " \ pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy