@@ -2,8 +2,11 @@ package gitbucket.plugin.pages
22
33import gitbucket .core .controller .ControllerBase
44import gitbucket .core .service .{ AccountService , RepositoryService }
5+ import gitbucket .core .util .Implicits ._
56import gitbucket .core .util .SyntaxSugars ._
67import gitbucket .core .util .{ Directory , JGitUtil , ReferrerAuthenticator }
8+ import gitbucket .plugin .model .PageSourceType
9+ import gitbucket .plugin .service .PagesService
710import org .eclipse .jgit .api .Git
811import org .eclipse .jgit .lib .ObjectId
912import org .eclipse .jgit .revwalk .RevCommit
@@ -14,37 +17,65 @@ import scala.language.implicitConversions
1417class PagesController
1518 extends PagesControllerBase
1619 with AccountService
20+ with PagesService
1721 with RepositoryService
1822 with ReferrerAuthenticator
1923
2024trait PagesControllerBase extends ControllerBase {
21- self : AccountService with RepositoryService with ReferrerAuthenticator =>
25+ self : AccountService with RepositoryService with PagesService with ReferrerAuthenticator =>
2226
2327 val PAGES_BRANCHES = List (" gb-pages" , " gh-pages" )
2428
2529 get(" /:owner/:repository/pages/*" )(referrersOnly { repository =>
2630 val path = params(" splat" )
2731 using(Git .open(Directory .getRepositoryDir(repository.owner, repository.name))) { git =>
28- val objectId = resolveBranch(git, PAGES_BRANCHES )
29- .map(JGitUtil .getRevCommitFromId(git, _))
30- .flatMap { revCommit =>
31- getPathIndexObjectId(git, path, revCommit)
32+
33+ def resolvePath (objectId : Option [(String , ObjectId )], path : String ) = {
34+ objectId match {
35+ case Some ((path0, objId)) =>
36+ // redirect [owner/repo/pages/path] -> [owner/repo/pages/path/]
37+ if (shouldRedirect(path, path0)) {
38+ redirect(s " / ${repository.owner}/ ${repository.name}/pages/ $path/ " )
39+ } else {
40+ JGitUtil .getObjectLoaderFromId(git, objId) { loader =>
41+ contentType = Option (servletContext.getMimeType(path0)).getOrElse(" application/octet-stream" )
42+ response.setContentLength(loader.getSize.toInt)
43+ loader.copyTo(response.getOutputStream)
44+ }
45+ ()
46+ }
47+ case None =>
48+ NotFound ()
3249 }
50+ }
3351
34- objectId match {
35- case Some ((path0, objId)) =>
36- // redirect [owner/repo/pages/path] -> [owner/repo/pages/path/]
37- if (shouldRedirect(path, path0)) {
38- redirect(s " / ${repository.owner}/ ${repository.name}/pages/ $path/ " )
39- } else {
40- JGitUtil .getObjectLoaderFromId(git, objId) { loader =>
41- contentType = Option (servletContext.getMimeType(path0)).getOrElse(" application/octet-stream" )
42- response.setContentLength(loader.getSize.toInt)
43- loader.copyTo(response.getOutputStream)
52+ val source = getPageOptions(repository.owner, repository.name) match {
53+ case Some (p) => p.source
54+ case None => PageSourceType .GH_PAGES
55+ }
56+ source match {
57+ case PageSourceType .GH_PAGES =>
58+ val objectId = resolveBranch(git, PAGES_BRANCHES )
59+ .map(JGitUtil .getRevCommitFromId(git, _))
60+ .flatMap { revCommit =>
61+ getPathIndexObjectId(git, path, revCommit)
62+ }
63+ resolvePath(objectId, path)
64+ case PageSourceType .MASTER =>
65+ val objectId = Option (git.getRepository.resolve(" master" ))
66+ .map(JGitUtil .getRevCommitFromId(git, _))
67+ .flatMap { revCommit =>
68+ getPathIndexObjectId(git, path, revCommit)
69+ }
70+ resolvePath(objectId, path)
71+ case PageSourceType .MASTER_DOCS =>
72+ val objectId = Option (git.getRepository.resolve(" master" ))
73+ .map(JGitUtil .getRevCommitFromId(git, _))
74+ .flatMap { revCommit =>
75+ getPathIndexObjectId(git, s " docs/ $path" , revCommit)
4476 }
45- ()
46- }
47- case None =>
77+ resolvePath(objectId, path)
78+ case PageSourceType .NONE =>
4879 NotFound ()
4980 }
5081 }
0 commit comments