From c58edc7c7884a44436be7e215aed06a86e44dab8 Mon Sep 17 00:00:00 2001 From: Lunny Xiao <xiaolunwen@gmail.com> Date: Tue, 28 Jan 2020 17:44:08 +0800 Subject: [PATCH] Fix wiki raw view on sub path (#10002) * Fix wiki raw view on sub path * Add test for subpath wiki raw file * Fix bug --- .../42/3313fbd38093bb10d0c8387db9105409c6f196 | Bin 0 -> 830 bytes .../74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e | Bin 0 -> 53 bytes .../c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 | Bin 0 -> 189 bytes .../user2/repo1.wiki.git/refs/heads/master | 2 +- routers/repo/wiki.go | 28 ++++++++------------- routers/repo/wiki_test.go | 1 + 6 files changed, 12 insertions(+), 19 deletions(-) create mode 100644 integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 create mode 100644 integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e create mode 100644 integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 b/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 new file mode 100644 index 0000000000000000000000000000000000000000..bf4ae859f6d05b74726565e3269517d32a6fd1aa GIT binary patch literal 830 zcmV-E1Ht@w0iBb{4y#5GMYHBBdXExD8<6s%fX!qZ493{t9dtMIWCk;Q{c{p!msM(U zRXVDYN>_DZTi5vr7+Ms68GDQY<YP{R9A-Fa$4Oiw?BY0vEJh3s1&rgJARsQ@^F$Z* zxETQr6J`gwWWUEy<V2nqX^bSu!9*0Gge4(~V;Vz_h^8@XdvKYWW(7eWwcz*VtJT!Z zxcM`!qrCbJw)G!?*@-kQ@w7w(lK!^Dmws;?@&8&*yL8A?@atctsJdwbM|Xf{>b89M zZ|dKi00hWgb5mqlImj~7a#fw`m`x-|L9GbX(K2TtIq9tRfqbjU6+iiHD<9I*{g)G8 z=enUuDe>^SYAf&KIW=I`ltB|F6nu&btD;rwk`xzxChes)B41oA-cFvONDJyu1fZDX z^$9n44<3WDj;Vdq8H(OAwTP$pedOjnHrHGpHq(`3j(=WQv`KXlC>O1DwD&}S2Z<(2 zkjX;RTaL+c&tR0+`?y79c<NS>m2QST(~azM7+#vyZUUcmrM<kWO}QW`Bmn#1No=gG z#_-1W8Vqjt9Z%(Lsf+$&QlvsczB!gobv&vO{oGBW>P;fX%UcPy?l}^mnoh;;T<r|! z9$NCLmT)88Ztrtp?dexqY}cnvna%n@Z1^<wBQrf7ez>{8GMZQTy66N@^7*ZP<Yncc z7MVAd({8L@Ox>GxNq6oKw$6l8dwsB};kv2a!>es<t@kXw!qc-TBEW3&!m%xMZ{74q z<sY&nptRGet#O0KtNIGx53+iz(%ke-KVPzRKul6oZDM)ZdA_Lx81AY)B4&@=&v6v( zMyua}mE&Zf<Fr`H9>-nT7_NWd_p8DBR<@j-h#U-NRf1=s_XIeYx8p#C{rQ?#?>jXv zr&r#aN&tf)z(MYnw12TtW4hyn{j?3&{7{s0dF87p@26fNfN(6r&pI0;yXh&SE%ifb zg=EhAcA-;5jY?mgpFYi18+*2yk9@igPUm{NJ1S>kf4mbweb5%lyYIL14r|zCn2?T~ zAjfCzo5MFo({F(&P(rWzqL-DV`)Yp>;76xy2Jug3RQvc}i6J6{z%a#KG-e>LqZALs IPp$}Hf}a<q82|tP literal 0 HcmV?d00001 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e b/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e new file mode 100644 index 0000000000000000000000000000000000000000..bcb0e0075c7f18769b25eb9bb639e743e9565f51 GIT binary patch literal 53 zcmV-50LuS(0V^p=O;s>9V=y!@Ff%bx$SO!p*UKtMXDFN~{iQwaxP++0L3U0-#`(J$ LHvRzsDiRKo_5~D3 literal 0 HcmV?d00001 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 b/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 new file mode 100644 index 0000000000000000000000000000000000000000..6dcfc9667644d517a48b0b24e3c975afe97bb4cb GIT binary patch literal 189 zcmV;u07CzG0V^p=O;s>5Fk&z?FfcPQQSivmP1VayVR+T_r@efUH~XP%EAKClN_3cu z?N&pT1SF=X>V{{QWaxV40+}GyMzKeJyfpDk%lIT}wrp;^tlw3e#TcrC3lfu4Q*`|j zAvP5KNeVoZ(l^mZfMKqov;3mR-Ln)-41ho(6J%^LL&?<z*KK$1d|$P4df)a1GdJ{y rT#17knpKdRu9sDi&QLf}`b&G-aS2h0gY2AwjPrLhZ2SWN<k(OJ#+zD6 literal 0 HcmV?d00001 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master b/integrations/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master index 86de6490a2..1b1d96a1f0 100644 --- a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master +++ b/integrations/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master @@ -1 +1 @@ -0cf15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 +423313fbd38093bb10d0c8387db9105409c6f196 diff --git a/routers/repo/wiki.go b/routers/repo/wiki.go index b0bd8047b8..f18625a599 100644 --- a/routers/repo/wiki.go +++ b/routers/repo/wiki.go @@ -66,27 +66,20 @@ type PageMeta struct { // findEntryForFile finds the tree entry for a target filepath. func findEntryForFile(commit *git.Commit, target string) (*git.TreeEntry, error) { - entries, err := commit.ListEntries() - if err != nil { + entry, err := commit.GetTreeEntryByPath(target) + if err != nil && !git.IsErrNotExist(err) { return nil, err } - // The longest name should be checked first - for _, entry := range entries { - if entry.IsRegular() && entry.Name() == target { - return entry, nil - } + if entry != nil { + return entry, nil } + // Then the unescaped, shortest alternative var unescapedTarget string if unescapedTarget, err = url.QueryUnescape(target); err != nil { return nil, err } - for _, entry := range entries { - if entry.IsRegular() && entry.Name() == unescapedTarget { - return entry, nil - } - } - return nil, nil + return commit.GetTreeEntryByPath(unescapedTarget) } func findWikiRepoCommit(ctx *context.Context) (*git.Repository, *git.Commit, error) { @@ -123,10 +116,9 @@ func wikiContentsByEntry(ctx *context.Context, entry *git.TreeEntry) []byte { // wikiContentsByName returns the contents of a wiki page, along with a boolean // indicating whether the page exists. Writes to ctx if an error occurs. func wikiContentsByName(ctx *context.Context, commit *git.Commit, wikiName string) ([]byte, *git.TreeEntry, string, bool) { - var entry *git.TreeEntry - var err error pageFilename := wiki_service.NameToFilename(wikiName) - if entry, err = findEntryForFile(commit, pageFilename); err != nil { + entry, err := findEntryForFile(commit, pageFilename) + if err != nil && !git.IsErrNotExist(err) { ctx.ServerError("findEntryForFile", err) return nil, nil, "", false } else if entry == nil { @@ -518,7 +510,7 @@ func WikiRaw(ctx *context.Context) { if commit != nil { // Try to find a file with that name entry, err = findEntryForFile(commit, providedPath) - if err != nil { + if err != nil && !git.IsErrNotExist(err) { ctx.ServerError("findFile", err) return } @@ -531,7 +523,7 @@ func WikiRaw(ctx *context.Context) { wikiPath := wiki_service.NameToFilename(providedPath) entry, err = findEntryForFile(commit, wikiPath) - if err != nil { + if err != nil && !git.IsErrNotExist(err) { ctx.ServerError("findFile", err) return } diff --git a/routers/repo/wiki_test.go b/routers/repo/wiki_test.go index 843a8ddf2b..cc79c808f5 100644 --- a/routers/repo/wiki_test.go +++ b/routers/repo/wiki_test.go @@ -192,6 +192,7 @@ func TestDeleteWikiPagePost(t *testing.T) { func TestWikiRaw(t *testing.T) { for filepath, filetype := range map[string]string{ "jpeg.jpg": "image/jpeg", + "images/jpeg.jpg": "image/jpeg", "Page With Spaced Name": "text/plain; charset=utf-8", "Page-With-Spaced-Name": "text/plain; charset=utf-8", "Page With Spaced Name.md": "text/plain; charset=utf-8",