@@ -4,6 +4,7 @@ import java.io.File
44import jp .sf .amateras .scalatra .forms ._
55import model .{GistUser , Gist , Account }
66import service .{AccountService , GistService }
7+ import util .Directory ._
78import util .{UsersAuthenticator , GistEditorAuthenticator , JGitUtil , StringUtil }
89import util .ControlUtil ._
910import org .eclipse .jgit .api .Git
@@ -104,31 +105,27 @@ trait GistControllerBase extends ControllerBase {
104105 val userName = params(" userName" )
105106 val repoName = params(" repoName" )
106107
107- if (isEditable(userName)){
108- val loginAccount = context.loginAccount.get
109- val files = getFileParameters(true )
110- // TODO Save isPrivate and description
111- // val isPrivate = params("private")
112- val description = params(" description" )
113- val gitdir = new File (GistRepoDir , userName + " /" + repoName)
114-
115- // Commit files
116- using(Git .open(gitdir)){ git =>
117- val commitId = commitFiles(git, loginAccount, " Update" , files)
118-
119- // update refs
120- val refUpdate = git.getRepository.updateRef(Constants .HEAD )
121- refUpdate.setNewObjectId(commitId)
122- refUpdate.setForceUpdate(false )
123- refUpdate.setRefLogIdent(new org.eclipse.jgit.lib.PersonIdent (loginAccount.fullName, loginAccount.mailAddress))
124- // refUpdate.setRefLogMessage("merged", true)
125- refUpdate.update()
126- }
127-
128- redirect(s " ${context.path}/gist/ ${loginAccount.userName}/ ${repoName}" )
129- } else {
130- // TODO Permission Error
108+ val loginAccount = context.loginAccount.get
109+ val files = getFileParameters(true )
110+ // TODO Save isPrivate and description
111+ // val isPrivate = params("private")
112+ val description = params(" description" )
113+ val gitdir = new File (GistRepoDir , userName + " /" + repoName)
114+
115+ // Commit files
116+ using(Git .open(gitdir)){ git =>
117+ val commitId = commitFiles(git, loginAccount, " Update" , files)
118+
119+ // update refs
120+ val refUpdate = git.getRepository.updateRef(Constants .HEAD )
121+ refUpdate.setNewObjectId(commitId)
122+ refUpdate.setForceUpdate(false )
123+ refUpdate.setRefLogIdent(new org.eclipse.jgit.lib.PersonIdent (loginAccount.fullName, loginAccount.mailAddress))
124+ // refUpdate.setRefLogMessage("merged", true)
125+ refUpdate.update()
131126 }
127+
128+ redirect(s " ${context.path}/gist/ ${loginAccount.userName}/ ${repoName}" )
132129 })
133130
134131 get(" /gist/:userName/:repoName/delete" )(editorOnly {
@@ -176,6 +173,28 @@ trait GistControllerBase extends ControllerBase {
176173 _gist(params(" userName" ), Some (params(" repoName" )))
177174 }
178175
176+ get(" /gist/:userName/:repoName/revisions" ){
177+ val userName = params(" userName" )
178+ val repoName = params(" repoName" )
179+ val gitdir = new File (GistRepoDir , userName + " /" + repoName)
180+
181+ using(Git .open(gitdir)){ git =>
182+ JGitUtil .getCommitLog(git, " master" ) match {
183+ case Right ((revisions, hasNext)) => {
184+ val commits = revisions.map { revision =>
185+ defining(JGitUtil .getRevCommitFromId(git, git.getRepository.resolve(revision.id))){ revCommit =>
186+ JGitUtil .getDiffs(git, revision.id) match { case (diffs, oldCommitId) =>
187+ (revision, diffs)
188+ }
189+ }
190+ }
191+ gist.html.revisions(" revision" , getGist(userName, repoName).get, isEditable(userName), commits)
192+ }
193+ case Left (_) => NotFound
194+ }
195+ }
196+ }
197+
179198 get(" /gist/:userName" ){
180199 _gist(params(" userName" ))
181200 }
@@ -228,7 +247,7 @@ trait GistControllerBase extends ControllerBase {
228247 file.name -> StringUtil .convertFromByteArray(JGitUtil .getContentFromId(git, file.id, true ).get)
229248 }
230249
231- _root_.gist.html.detail(" code" , gist, files, isEditable(userName))(context)
250+ _root_.gist.html.detail(" code" , gist, files, isEditable(userName))
232251 } else {
233252 // TODO Permission Error
234253 }
0 commit comments