/* * Copyright 2012 gitblit.com. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 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 com.gitblit.utils.StringUtils import java.text.SimpleDateFormat import org.eclipse.jgit.api.CloneCommand import org.eclipse.jgit.api.Git 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.eclipse.jgit.util.FileUtils import org.slf4j.Logger /** * Sample Gitblit Post-Receive Hook: localclone * * The Post-Receive hook is executed AFTER the pushed commits have been applied * to the Git repository. This is the appropriate point to trigger an * integration build or to send a notification. * * This script is only executed when pushing to *Gitblit*, not to other Git * tooling you may be using. * * If this script is specified in *groovy.postReceiveScripts* of gitblit.properties * or web.xml then it will be executed by any repository when it receives a * push. If you choose to share your script then you may have to consider * tailoring control-flow based on repository access restrictions. * * Scripts may also be specified per-repository in the repository settings page. * Shared scripts will be excluded from this list of available scripts. * * This script is dynamically reloaded and it is executed within it's own * exception handler so it will not crash another script nor crash Gitblit. * * If you want this hook script to fail and abort all subsequent scripts in the * chain, "return false" at the appropriate failure points. * * Bound Variables: * gitblit Gitblit Server com.gitblit.GitBlit * repository Gitblit Repository com.gitblit.models.RepositoryModel * user Gitblit User com.gitblit.models.UserModel * commands JGit commands Collection * url Base url for Gitblit String * logger Logs messages to Gitblit org.slf4j.Logger * clientLogger Logs messages to Git client com.gitblit.utils.ClientLogger * * Accessing Gitblit Custom Fields: * def myCustomField = repository.customFields.myCustomField * */ // Indicate we have started the script logger.info("localclone hook triggered by ${user.username} for ${repository.name}") def rootFolder = 'c:/test' def bare = false def cloneAllBranches = true def cloneBranch = 'refs/heads/master' def includeSubmodules = true def repoName = repository.name def destinationFolder = new File(rootFolder, StringUtils.stripDotGit(repoName)) def srcUrl = 'file://' + new File(GitBlit.getRepositoriesFolder(), repoName).absolutePath // delete any previous clone if (destinationFolder.exists()) { FileUtils.delete(destinationFolder, FileUtils.RECURSIVE) } // clone the repository logger.info("cloning ${srcUrl} to ${destinationFolder}") CloneCommand cmd = Git.cloneRepository(); cmd.setBare(bare) if (cloneAllBranches) cmd.setCloneAllBranches(true) else cmd.setBranch(cloneBranch) cmd.setCloneSubmodules(includeSubmodules) cmd.setURI(srcUrl) cmd.setDirectory(destinationFolder) Git git = cmd.call(); git.repository.close() // report clone operation success back to pushing Git client clientLogger.info("${repoName} cloned to ${destinationFolder}")