사용자 도구

사이트 도구


git:gitblit

문서의 이전 판입니다!


Gitblit

설치시 주의점

  • Tomcat 6.0.10 이상 버전에서는 /,\가 이스케이프되어 URL이 제대로 인식 안되는 문제가 발생한다.
    • CATALINA_OPTS=-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true 설정을 하고 톰캣을 실행한다.

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
 
commands.each { ReceiveCommand command ->
    if (...) {
        command.setResult(Result.REJECTED_OTHER_REASON, "${repository.name} 리포지토리에 커밋 실패");
        success = false
        break
    }
}
 
....
 
// 스크립트 마지막에서 결과리턴
return success

Repository Mailing List 정보 확보

  • 각 리포지토리의 설정에 보면 메일링 리스트 부분이 있다.
  • 여기에 이메일 주소를 공백으로 구분하여 넣으면, Groovy Script에서 List<String>으로 읽어오는것이 가능하다.
  • 이 값은 data/git/[Repository]/config 파일의 [gitblit] 섹션에 문자열로 저장된다.
  • 리포지토리에 설정된 mailingList
    Repository r = gitblit.getRepository(repository.name)
    Config config = r.getConfig()
    def mailinglist = config.getStringList('gitblit', null, 'mailingList') // 'gitblit'은 섹션명, null 은 서브 섹션, 'mailingList'는 설정 키
     
    logger.info("## mailing list ${mailinglist}")
  • data/gitblit.propertiesmail.mailingLists에 지정한 Gitblit 전역 mailingLists 값
    import com.gitblit.Keys
     
    List globalMailingLists = gitblit.getStrings(Keys.mail.mailingLists)
git/gitblit.1369732047.txt.gz · 마지막으로 수정됨: 2013/05/28 18:07 저자 kwon37xi