@@ -27,14 +27,15 @@ class PagesController
27
27
28
28
trait PagesControllerBase extends ControllerBase {
29
29
self : AccountService with RepositoryService with PagesService with ReferrerAuthenticator with OwnerAuthenticator =>
30
+ import PagesControllerBase ._
30
31
31
32
case class OptionsForm (source : PageSourceType )
32
33
33
34
val optionsForm = mapping(
34
35
" source" -> trim(label(" Pages Source" , text(required, pagesOption)))
35
36
)(
36
- (source) => OptionsForm (PageSourceType .valueOf(source))
37
- )
37
+ (source) => OptionsForm (PageSourceType .valueOf(source))
38
+ )
38
39
39
40
val PAGES_BRANCHES = List (" gb-pages" , " gh-pages" )
40
41
@@ -67,7 +68,7 @@ trait PagesControllerBase extends ControllerBase {
67
68
}
68
69
source match {
69
70
case PageSourceType .GH_PAGES =>
70
- val objectId = resolveBranch(git, PAGES_BRANCHES )
71
+ val objectId = PAGES_BRANCHES .collectFirst( resolveBranch(git, _) )
71
72
.map(JGitUtil .getRevCommitFromId(git, _))
72
73
.flatMap { revCommit =>
73
74
getPathIndexObjectId(git, path, revCommit)
@@ -111,16 +112,7 @@ trait PagesControllerBase extends ControllerBase {
111
112
redirect(s " / ${repository.owner}/ ${repository.name}/settings/pages " )
112
113
})
113
114
114
- @ tailrec
115
- final def resolveBranch (git : Git , names : List [String ]): Option [ObjectId ] = {
116
- names match {
117
- case name :: rest =>
118
- val objectId = Option (git.getRepository.resolve(name))
119
- if (objectId.isEmpty) resolveBranch(git, rest)
120
- else objectId
121
- case Nil => None
122
- }
123
- }
115
+ def resolveBranch (git : Git , name : String ) = Option (git.getRepository.resolve(name))
124
116
125
117
def shouldRedirect (path : String , path0 : String ) =
126
118
! isRoot(path) && path0 != path && path0.startsWith(path) && ! path.endsWith(" /" )
@@ -152,3 +144,19 @@ trait PagesControllerBase extends ControllerBase {
152
144
}
153
145
}
154
146
147
+
148
+ object PagesControllerBase {
149
+ implicit class listCollectFirst [A ](private val lst : List [A ]) extends AnyVal {
150
+ @ tailrec
151
+ final def collectFirst [B ](f : A => Option [B ]): Option [B ] = {
152
+ lst match {
153
+ case head :: tail =>
154
+ f(head) match {
155
+ case Some (x) => Some (x)
156
+ case None => tail.collectFirst(f)
157
+ }
158
+ case Nil => None
159
+ }
160
+ }
161
+ }
162
+ }
0 commit comments