From f64fbd9b74998f3ac8353d2a8344e2e6f0ce1936 Mon Sep 17 00:00:00 2001 From: Bruno Sofiato Date: Wed, 6 Nov 2024 17:51:20 -0300 Subject: [PATCH] Updated tokenizer to better matching when search for code snippets (#32261) This PR improves the accuracy of Gitea's code search. Currently, Gitea does not consider statements such as `onsole.log("hello")` as hits when the user searches for `log`. The culprit is how both ES and Bleve are tokenizing the file contents (in both cases, `console.log` is a whole token). In ES' case, we changed the tokenizer to [simple_pattern_split](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-simplepatternsplit-tokenizer.html#:~:text=The%20simple_pattern_split%20tokenizer%20uses%20a,the%20tokenization%20is%20generally%20faster.). In such a case, tokens are words formed by digits and letters. In Bleve's case, it employs a [letter](https://blevesearch.com/docs/Tokenizers/) tokenizer. Resolves #32220 --------- Signed-off-by: Bruno Sofiato --- modules/indexer/code/bleve/bleve.go | 5 +- .../code/elasticsearch/elasticsearch.go | 13 ++++- modules/indexer/code/indexer_test.go | 49 ++++++++++++++++++ modules/indexer/internal/bleve/util.go | 9 ++-- modules/indexer/internal/bleve/util_test.go | 8 +++ .../org42/search-by-path.git/description | 5 +- .../org42/search-by-path.git/info/refs | 2 +- .../objects/info/commit-graph | Bin 1772 -> 0 bytes .../search-by-path.git/objects/info/packs | 2 +- ...29256bc27cb2ec73898507df710be7a3cf5.bitmap | Bin 674 -> 0 bytes ...3dc29256bc27cb2ec73898507df710be7a3cf5.idx | Bin 2080 -> 0 bytes ...3dc29256bc27cb2ec73898507df710be7a3cf5.rev | Bin 196 -> 0 bytes ...76cf6e2b46bc816936ab69306fb10aea571.bitmap | Bin 0 -> 678 bytes ...bef76cf6e2b46bc816936ab69306fb10aea571.idx | Bin 0 -> 2108 bytes ...f76cf6e2b46bc816936ab69306fb10aea571.pack} | Bin 6714 -> 6545 bytes ...bef76cf6e2b46bc816936ab69306fb10aea571.rev | Bin 0 -> 200 bytes .../org42/search-by-path.git/packed-refs | 2 +- 17 files changed, 83 insertions(+), 12 deletions(-) delete mode 100644 tests/gitea-repositories-meta/org42/search-by-path.git/objects/info/commit-graph delete mode 100644 tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-393dc29256bc27cb2ec73898507df710be7a3cf5.bitmap delete mode 100644 tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-393dc29256bc27cb2ec73898507df710be7a3cf5.idx delete mode 100644 tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-393dc29256bc27cb2ec73898507df710be7a3cf5.rev create mode 100644 tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.bitmap create mode 100644 tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.idx rename tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/{pack-393dc29256bc27cb2ec73898507df710be7a3cf5.pack => pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.pack} (74%) create mode 100644 tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.rev diff --git a/modules/indexer/code/bleve/bleve.go b/modules/indexer/code/bleve/bleve.go index 90e5e62bcb..772317fa59 100644 --- a/modules/indexer/code/bleve/bleve.go +++ b/modules/indexer/code/bleve/bleve.go @@ -31,6 +31,7 @@ import ( "github.com/blevesearch/bleve/v2/analysis/token/camelcase" "github.com/blevesearch/bleve/v2/analysis/token/lowercase" "github.com/blevesearch/bleve/v2/analysis/token/unicodenorm" + "github.com/blevesearch/bleve/v2/analysis/tokenizer/letter" "github.com/blevesearch/bleve/v2/analysis/tokenizer/unicode" "github.com/blevesearch/bleve/v2/mapping" "github.com/blevesearch/bleve/v2/search/query" @@ -69,7 +70,7 @@ const ( filenameIndexerAnalyzer = "filenameIndexerAnalyzer" filenameIndexerTokenizer = "filenameIndexerTokenizer" repoIndexerDocType = "repoIndexerDocType" - repoIndexerLatestVersion = 7 + repoIndexerLatestVersion = 8 ) // generateBleveIndexMapping generates a bleve index mapping for the repo indexer @@ -105,7 +106,7 @@ func generateBleveIndexMapping() (mapping.IndexMapping, error) { } else if err := mapping.AddCustomAnalyzer(repoIndexerAnalyzer, map[string]any{ "type": analyzer_custom.Name, "char_filters": []string{}, - "tokenizer": unicode.Name, + "tokenizer": letter.Name, "token_filters": []string{unicodeNormalizeName, camelcase.Name, lowercase.Name}, }); err != nil { return nil, err diff --git a/modules/indexer/code/elasticsearch/elasticsearch.go b/modules/indexer/code/elasticsearch/elasticsearch.go index 669a1bafcc..1c4dd39eff 100644 --- a/modules/indexer/code/elasticsearch/elasticsearch.go +++ b/modules/indexer/code/elasticsearch/elasticsearch.go @@ -30,7 +30,7 @@ import ( ) const ( - esRepoIndexerLatestVersion = 2 + esRepoIndexerLatestVersion = 3 // multi-match-types, currently only 2 types are used // Reference: https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-multi-match-query.html#multi-match-types esMultiMatchTypeBestFields = "best_fields" @@ -60,6 +60,10 @@ const ( "settings": { "analysis": { "analyzer": { + "content_analyzer": { + "tokenizer": "content_tokenizer", + "filter" : ["lowercase"] + }, "filename_path_analyzer": { "tokenizer": "path_tokenizer" }, @@ -68,6 +72,10 @@ const ( } }, "tokenizer": { + "content_tokenizer": { + "type": "simple_pattern_split", + "pattern": "[^a-zA-Z0-9]" + }, "path_tokenizer": { "type": "path_hierarchy", "delimiter": "/" @@ -104,7 +112,8 @@ const ( "content": { "type": "text", "term_vector": "with_positions_offsets", - "index": true + "index": true, + "analyzer": "content_analyzer" }, "commit_id": { "type": "keyword", diff --git a/modules/indexer/code/indexer_test.go b/modules/indexer/code/indexer_test.go index 5b33528dcd..020ccc72f8 100644 --- a/modules/indexer/code/indexer_test.go +++ b/modules/indexer/code/indexer_test.go @@ -181,6 +181,55 @@ func testIndexer(name string, t *testing.T, indexer internal.Indexer) { }, }, }, + // Search for matches on the contents of files regardless of case. + { + RepoIDs: nil, + Keyword: "dESCRIPTION", + Langs: 1, + Results: []codeSearchResult{ + { + Filename: "README.md", + Content: "# repo1\n\nDescription for repo1", + }, + }, + }, + // Search for an exact match on the filename within the repo '62' (case insenstive). + // This scenario yields a single result (the file avocado.md on the repo '62') + { + RepoIDs: []int64{62}, + Keyword: "AVOCADO.MD", + Langs: 1, + Results: []codeSearchResult{ + { + Filename: "avocado.md", + Content: "# repo1\n\npineaple pie of cucumber juice", + }, + }, + }, + // Search for matches on the contents of files when the criteria is a expression. + { + RepoIDs: []int64{62}, + Keyword: "console.log", + Langs: 1, + Results: []codeSearchResult{ + { + Filename: "example-file.js", + Content: "console.log(\"Hello, World!\")", + }, + }, + }, + // Search for matches on the contents of files when the criteria is part of a expression. + { + RepoIDs: []int64{62}, + Keyword: "log", + Langs: 1, + Results: []codeSearchResult{ + { + Filename: "example-file.js", + Content: "console.log(\"Hello, World!\")", + }, + }, + }, } for _, kw := range keywords { diff --git a/modules/indexer/internal/bleve/util.go b/modules/indexer/internal/bleve/util.go index b426b39bc2..a0c3dc4ad4 100644 --- a/modules/indexer/internal/bleve/util.go +++ b/modules/indexer/internal/bleve/util.go @@ -6,12 +6,13 @@ package bleve import ( "errors" "os" + "unicode" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/util" "github.com/blevesearch/bleve/v2" - "github.com/blevesearch/bleve/v2/analysis/tokenizer/unicode" + unicode_tokenizer "github.com/blevesearch/bleve/v2/analysis/tokenizer/unicode" "github.com/blevesearch/bleve/v2/index/upsidedown" "github.com/ethantkoenig/rupture" ) @@ -57,7 +58,7 @@ func openIndexer(path string, latestVersion int) (bleve.Index, int, error) { // may be different on two string and they still be considered equivalent. // Given a phrasse, its shortest word determines its fuzziness. If a phrase uses CJK (eg: `갃갃갃` `啊啊啊`), the fuzziness is zero. func GuessFuzzinessByKeyword(s string) int { - tokenizer := unicode.NewUnicodeTokenizer() + tokenizer := unicode_tokenizer.NewUnicodeTokenizer() tokens := tokenizer.Tokenize([]byte(s)) if len(tokens) > 0 { @@ -77,8 +78,10 @@ func guessFuzzinessByKeyword(s string) int { // according to https://github.com/blevesearch/bleve/issues/1563, the supported max fuzziness is 2 // magic number 4 was chosen to determine the levenshtein distance per each character of a keyword // BUT, when using CJK (eg: `갃갃갃` `啊啊啊`), it mismatches a lot. + // Likewise, queries whose terms contains characters that are *not* letters should not use fuzziness + for _, r := range s { - if r >= 128 { + if r >= 128 || !unicode.IsLetter(r) { return 0 } } diff --git a/modules/indexer/internal/bleve/util_test.go b/modules/indexer/internal/bleve/util_test.go index ae0b12c08d..8f7844464e 100644 --- a/modules/indexer/internal/bleve/util_test.go +++ b/modules/indexer/internal/bleve/util_test.go @@ -35,6 +35,14 @@ func TestBleveGuessFuzzinessByKeyword(t *testing.T) { Input: "갃갃갃", Fuzziness: 0, }, + { + Input: "repo1", + Fuzziness: 0, + }, + { + Input: "avocado.md", + Fuzziness: 0, + }, } for _, scenario := range scenarios { diff --git a/tests/gitea-repositories-meta/org42/search-by-path.git/description b/tests/gitea-repositories-meta/org42/search-by-path.git/description index 382e2d7f10..ffc40a9c48 100644 --- a/tests/gitea-repositories-meta/org42/search-by-path.git/description +++ b/tests/gitea-repositories-meta/org42/search-by-path.git/description @@ -4,5 +4,6 @@ This repository will be used to test code search. The snippet below shows its di ├── avocado.md ├── cucumber.md ├── ham.md -└── potato - └── ham.md +├── potato +| └── ham.md +└── example-file.js \ No newline at end of file diff --git a/tests/gitea-repositories-meta/org42/search-by-path.git/info/refs b/tests/gitea-repositories-meta/org42/search-by-path.git/info/refs index 6b948c96a8..4adf83dda3 100644 --- a/tests/gitea-repositories-meta/org42/search-by-path.git/info/refs +++ b/tests/gitea-repositories-meta/org42/search-by-path.git/info/refs @@ -3,7 +3,7 @@ 65f1bf27bc3bf70f64657658635e66094edbcb4d refs/heads/develop 65f1bf27bc3bf70f64657658635e66094edbcb4d refs/heads/feature/1 78fb907e3a3309eae4fe8fef030874cebbf1cd5e refs/heads/home-md-img-check -3731fe53b763859aaf83e703ee731f6b9447ff1e refs/heads/master +9f894b61946fd2f7b8b9d8e370e4d62f915522f5 refs/heads/master 62fb502a7172d4453f0322a2cc85bddffa57f07a refs/heads/pr-to-update 4649299398e4d39a5c09eb4f534df6f1e1eb87cc refs/heads/sub-home-md-img-check 3fa2f829675543ecfc16b2891aebe8bf0608a8f4 refs/notes/commits diff --git a/tests/gitea-repositories-meta/org42/search-by-path.git/objects/info/commit-graph b/tests/gitea-repositories-meta/org42/search-by-path.git/objects/info/commit-graph deleted file mode 100644 index b38715bb92b034596ebd83954969d4ac88da755e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1772 zcmZ>E5Aa}QWMT04ba7*V02hBx7as_d#l_jhF$BV9Rd9E4G=i|%)<9?w$#w%o4r9#7 zz`%eHGchnQ;KIxd3=GJag@J*A8km)VfdPiu7#J8}n4N)v0fspk7#OI9IT;ujXou2Lww(($HXe#s`hMYNY@)B~(rvAi)^2uPvi11iq~8Hrg+*6f?U|JpooU^B z|5x~js??AB)%RF`=TAv3i%5=38=BDRKKBCYnc9Q`o9+icQcFy&ZY7Gi!`>92IXg{ z8jd*OwaaUKKZ=Ivu^wmmG(B+Mg#2qZb7p|b6Lz>7g;J@zktI6(X+;y|wNp+nEtERI zI{7WA+-8QV;fZ@G5RkQasYRIJ(bt`AC#OlxFe3Tn znP(DxeNmZP_p5Cnc@PGvjX3wN{_`*XnB&v`_%JQpvG3$PZ-t^ix9=mnIfY?{E=S-t z+4(&SUOqDue<;a5qwhtx%ray(sSmBCr%cilntH54t@fd$b#=?yE{+`apCCJ+cJah1 e%sNg=9Wz6d<4(0^6qCP_@baE0)hR-<`M&^r6bO9) diff --git a/tests/gitea-repositories-meta/org42/search-by-path.git/objects/info/packs b/tests/gitea-repositories-meta/org42/search-by-path.git/objects/info/packs index b2af8c8378..9774923d2e 100644 --- a/tests/gitea-repositories-meta/org42/search-by-path.git/objects/info/packs +++ b/tests/gitea-repositories-meta/org42/search-by-path.git/objects/info/packs @@ -1,2 +1,2 @@ -P pack-393dc29256bc27cb2ec73898507df710be7a3cf5.pack +P pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.pack diff --git a/tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-393dc29256bc27cb2ec73898507df710be7a3cf5.bitmap b/tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-393dc29256bc27cb2ec73898507df710be7a3cf5.bitmap deleted file mode 100644 index 1fdef225e830cf65fa66e30e13f64bcc31b5feb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 674 zcmZ?r4Dn@PWME}rVBog2Jv1q7kNRo7;}$alYQGEYtFrkD5@%pwV1i->2w?vYp&7)X z;vjj5Q2h@G&A_07CddE30VV~e8Nnoi0J(vI!2wMd1ABu6Or;1|F@_2W2Njt8oY++u zI2_>t%P=qqf@ush3>;cGz%mRB>|h#0g##ml09b~Bffr1pt6-dv#HIk2VPN0`)95O= z1VUIrVjxLS$YJ`HM<9X~7D^BogVck32f`qI90CE5fMQ@^-~tI?hS-DzHn0Q(0|P&p zfo=wafCCFy!Wc|4FeE_S3*|8|w1haW0dbnAcS961FfcSvF9QkT#4UNN3P6&xEZ$3k zXb=YJ0pZH*6%13d85mj;b~#k)Wv&CsA>$T*28JmP3=HL#m(ngSlyJzK@xl7QiUWb- HbA1H>7)Utq diff --git a/tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-393dc29256bc27cb2ec73898507df710be7a3cf5.idx b/tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-393dc29256bc27cb2ec73898507df710be7a3cf5.idx deleted file mode 100644 index 0d930e7499f5e9e6cdd27e678b90c1796deccba5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2080 zcmexg;-AdGz`(@7z`#fVgVYd%nHd-ukTDAb0|PZND+2=qshEv{fdLn0XJBC9U|?Y2 z#DTdO7#NT-Hvo0=LP| z?^*EjnVI-QN%k3iFS=!x2{p2=D^8nrXvt}(Qc;T!$6`Vrb%`Y#SzIny;`p=oRIr}Y zv}KYMiu->#yOrWM zLQEvQ_8xgyrnh9iEa#jqYx_k%G}A+!-~18V)G77)#eO!96<-`|%Z{;}4x6mp=Et_6 zy7fxhBo8JxPtD0Qo?M<4!};1j*!SDVhp*euc$t=%-BjIrvP44uqt;AUi@Qe`WqNxA zt_{4ORXbnxWTi=D<*V1xCi7!hd98DGHyN&$PkF5Jaof%X8ygSBD}BFkGd9szb?LU& zNozN|F4=ngZ_@7ot-_)!uJ+7Ii_Wy}z5grxLsja>{px$Hzw@W0mPI7TrE&V*KJA;e zc&SC0;L+EeZ6~Km%`sVNvuo||ir*9Jtc*EdJ^9!Fo|&WM-0qKO<7#|AiiYU19%uM8 zJ#gNH{A)IIX0SA0=U?Ne_957&Hhb0j@D{F}hm6loILJ6%M0K{x@5Vw|7qK<`5^1%+ zCfvDDyP*8y^Ro#?TXp3t*J;N~ZkjSlPiX3~3bopYlGfENYr8md)PK&1XJ)*;^!aA* z7io=iE=FCx@s;D{-{X?= zVr4faL=+XKOE|6PX3q0}=6v!>bnV@}`@?7dtY)5@@}A*~dX(Miz$*nhCk{jzu>|X7 zRq&a_m3%V(SiE+N*3dM>-e+m5P>T@>*}mLH*p0pr|+NYvi$SB z-tDc|_eS^p&fs_BGvD^N=DUxEAL~SkJ5}8a)&IRHxSL@ta4wDaU!<{>^xeo39sabU ziSpVhr%-EZ+`gg=5D(Zmo1xaDey8|tmk8E?Fo>RDU|=p|V34R}U|X{bJC1_lOY1_lOs1_lO21_lNJ1_lN(1_lNp1_lNN1_lNe1_lNh1_lOU z1_lNt1_lN;1_lNu1_lOh1_lNW1_lOM1_%&kU|^79U|^77U|^86v^_K_Y>)bBz2g=$ i0&2et?5nc*dh|!!x8~EI(w;A7j@eM4=lgf{Z*Ksi{u!wN diff --git a/tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.bitmap b/tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.bitmap new file mode 100644 index 0000000000000000000000000000000000000000..39c02c29877a8809da1e67f7cb474efab663d5cc GIT binary patch literal 678 zcmZ?r4Dn@PWME}rVBlW9?|aU-M_aN_h)vGgHks|Wz`CV{AaMo;1|}$GfB^RY5Sl?8 zDh`r|2-W|9&mknh{JQ2#{F}3=U|z82B3`U@C>diZN6eIHJn*(aXTVhFwJiBUCQ~1H>$JGnf^U*c8Be85nrMG`b2Ag%DPd z7)VkKL}2(-vd65_Z9#Au%04N=6vz|cIs3?zgTx8$uV07=fWcrOW}VR%yGT}zN& z5C(}=X0KqFlFh)-lCaC6QZI8INDPKs{23UgI505OynVI7VabVK9dC~tE}CFG)Aw0u FF#u11Km7mz literal 0 HcmV?d00001 diff --git a/tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.idx b/tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.idx new file mode 100644 index 0000000000000000000000000000000000000000..38d0e6b72265f254a87cf9777741ddcead7f60da GIT binary patch literal 2108 zcmexg;-AdGz`(@7z`#fVgVYd%nHd-ukTDAb0|PZND+2=qH8C3l0|Pq)0|N&R%*nvO zfQ-2q7#O&zfO!}g7+{!}fq?;r`4|`&V3?nQfdL&0FfcHXg9RBF7?80L0|NstEX=^b zKq?kxU|>MTVhjun$XJ|#fdLnmU|?W?VMzuC24pP7z`!6)1eRf7U;trR1_lOVu^a;f z1F=}1fq{V(tiZs)0KV!kcLb7?yz5Tj6K7?jydq9 zWi^x1_FWu-+hphWEO`0MO#GoF`;5L9-7?FB8d=vBr_DOF?c>AO?Pt79OU!PnZarBdA^%ZprmMx>ql+@VJp$JT-p{I?uX?i5 zB(n0=>u8htF|54Sxw@MSSIeh7R{6MX=YoxmhvJpKU$_~Y=&QPPTkE8?n_ZV|J^nZ8 zcYs!5(G^#FW~D`ETKC@n75&~{5 z)1>B@thCv+_IJha33XP+oUfkz>wnM8QF3ng$Fp%Yz8^(H^jMEGe3~9OZ$kbxn>jOB zny>S(@l*Q{Y*U-PYJGSM*Um%6XD1wFoGzj|Tjh6Sp{$G88h(ki+FujyT&P`8e)0L) z1f#9G@|Ekf<0UsunWQH)^;m^k?L$fH>Xx-#969PgXT&oz-d_5Av-gX%#yJpZ0^ZA=*hmrW`^Ava-X zR}I&uXcnzJ&D<5QXDtsu@G40z`NH4)!@&zn{~ni|7c0A=jcw-ZjJszU{(VhVY-CVdT!=C|7Xr8uSD10-Mc@0_RnhOxhd}%zNkmpoesQGpmX9tlo3m? zURDL4NnFV%Vx|xa`jNy-uC-YQ7$R4Y!Uz%MKB^zBjt(cLu*3pZT`GHQ#+S z{8%SS+^OnbsQ&Lo!QBjFfpclR|00d8r0+(S=HzEHw?>bRdzVKE zbw>IcYUuk`e(*eF_Q&+|FaDV0)BpG|E!?s1dTO2JllTV(yN zfAhm{H*eW=OM#c!Vm%*QBmd=}m*0N9YPqiaLetrs)gmvCEUej8^00MpavJN#IgQ6T zm-ni$%y)=fli#*vjlqlCcdWKpx;UF3@6{`@eS4!h3zQ-7X$G~ literal 0 HcmV?d00001 diff --git a/tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-393dc29256bc27cb2ec73898507df710be7a3cf5.pack b/tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.pack similarity index 74% rename from tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-393dc29256bc27cb2ec73898507df710be7a3cf5.pack rename to tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.pack index f1aac1e7404fefb82da46056729b80b065bd9e71..06c0a899f36642775323aa7c293c0341ba0b96da 100644 GIT binary patch delta 336 zcmdmGGSRp`z|q;8fq{XEfq_AFHdn=*)-#S=hYSQ9F4p=PiU+8jG&$KIvRy9umXG0u zD9@k|Kg4VrZu7tYzKTnDSwmyw@(D%rj2|uXE{Q8id!1Q0GeyANt?%C*Z5iLyt+SuR zY&EUE-kC?P+!OK4{&pf{Ri<0&qwrAYC zLQIM`w=wPzU|P*R*+IxRJxE)qn7b&b^s-TL(AP~}l47=XyZ8KvSo-7HmdvlOZI){1 z`baV_^fDGIc5JgXdlxIGdPVYO_KJn?qkkU!+;dYtSeRKMK;wkIr_Rar8@ugmzMao{ zwo~)H68A~13r12J$dqa vAjf(AQ=Wk#msl7k%X21eUMX73BC>qn_ndE!wq&0Wo1C?6GTU!~bxR8YZLONG delta 504 zcmbPeyvw9Mz|q;8fq{XEfq_9~hFry*+zEH{Ryl~YzJIRy?B9~NJobDlZ#^BKorsvZ zjVo-gbczeh629h*wZEFaeOi;Eo?U-3?q+0^C#SJ?X{X91k!iD~JZ^BzRG#!M=JqC* zn={vyY?@+WCNTG&Iak@*5DB|3o#0KmA2;vm__cY`_uI?d%jg;)qRd63$kHf7@4_z4vvYm#ow1viTH;Y4GM)MK`HfN2Qa6|% z`uns0zF$r9%PU)ox0yC9tGDuV-t{ZU+IMezyQq|2Q*U7GS>M_Dh6`(@UhkFXPs#a| zZ+PsgTEdLuSJ*!MI`(DF;f^^cb~!2uS?s%_zdHQO`F#dv<#)FWK7BL8XL{s@Unc@y za_+S3JNs~x#;G9f_IoUiPo}+SlS+%6t+kG SwBB)x83DE51@=|hd<6h3a`8?8 diff --git a/tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.rev b/tests/gitea-repositories-meta/org42/search-by-path.git/objects/pack/pack-a7bef76cf6e2b46bc816936ab69306fb10aea571.rev new file mode 100644 index 0000000000000000000000000000000000000000..b06ecca825a3caffbe0dd488445f64b677b583ce GIT binary patch literal 200 zcmWIYbctYKU|@t|aRvqkVFm^U4h9AW0R{#JHU1_lNp z1_lNR1_lOY1_lOJ1_lNu1_lN$1_lOp1_lOs1_%&gU|^78U|^7BU|^71zVCa^w?|vD nPl!#<+BTW(x4^okg`6v=?YsQ?68DrDuXHzVn8oCDShN-Z_Y@ig literal 0 HcmV?d00001 diff --git a/tests/gitea-repositories-meta/org42/search-by-path.git/packed-refs b/tests/gitea-repositories-meta/org42/search-by-path.git/packed-refs index 70e69af1e1..2334e3da48 100644 --- a/tests/gitea-repositories-meta/org42/search-by-path.git/packed-refs +++ b/tests/gitea-repositories-meta/org42/search-by-path.git/packed-refs @@ -4,7 +4,7 @@ 65f1bf27bc3bf70f64657658635e66094edbcb4d refs/heads/develop 65f1bf27bc3bf70f64657658635e66094edbcb4d refs/heads/feature/1 78fb907e3a3309eae4fe8fef030874cebbf1cd5e refs/heads/home-md-img-check -3731fe53b763859aaf83e703ee731f6b9447ff1e refs/heads/master +9f894b61946fd2f7b8b9d8e370e4d62f915522f5 refs/heads/master 62fb502a7172d4453f0322a2cc85bddffa57f07a refs/heads/pr-to-update 4649299398e4d39a5c09eb4f534df6f1e1eb87cc refs/heads/sub-home-md-img-check 3fa2f829675543ecfc16b2891aebe8bf0608a8f4 refs/notes/commits