목차

Gitblit

설치시 주의점

Gitblit GO

Hook

protect-refs hook

기본 API

import com.gitblit.GitBlit
import com.gitblit.Keys
import com.gitblit.models.RepositoryModel
import com.gitblit.models.TeamModel
import com.gitblit.models.UserModel
import com.gitblit.utils.JGitUtils
import java.text.SimpleDateFormat
import org.eclipse.jgit.lib.Repository
import org.eclipse.jgit.lib.Config
import org.eclipse.jgit.revwalk.RevCommit
import org.eclipse.jgit.transport.ReceiveCommand
import org.eclipse.jgit.transport.ReceiveCommand.Result
import org.slf4j.Logger

커밋/수정 커밋 메시지 및 파일 정보 확보

Exporting files on post-receive hook. 대한 답변 참조

Repository r = gitblit.getRepository(repository.name)
 
for (ReceiveCommand command : commands) {
    def updateType = command.type
    def updatedRef = command.refName
 
    logger.info("## ${command.type} - ${command.refName}")
 
    def commits = JGitUtils.getRevLog(r, command.oldId.name, command.newId.name).reverse()
 
    switch (command.type) {
        case ReceiveCommand.Type.CREATE:
        case ReceiveCommand.Type.UPDATE:
        case ReceiveCommand.Type.UPDATE_NONFASTFORWARD:
            for (def commit in commits) {
                // commit : org.eclipse.jgit.revwalk.RevCommit
                logger.info("## commit.fullMessage : ${commit.fullMessage}") // 커밋 로그 메시지
 
                def files = JGitUtils.getFilesInCommit(r, commit)
 
                files.each { file ->
                    // 커밋/수정된 파일 정보 file : com.gitblit.models.PathModel
                    logger.info("## Commit File ${file.name} - ${file.path}")
                }
            }
    }
}

Commit Reject

boolean success = true
 
for (ReceiveCommand comment : commands) {
    if (...) {
        command.setResult(Result.REJECTED_OTHER_REASON, "${repository.name} 리포지토리에 커밋 실패");
        success = false
        break
    }
 
}
 
....
 
// 스크립트 마지막에서 결과리턴
return success

Repository Mailing List 정보 확보

메일 발송

작업 대상 Reference 확인