src/com/gitblit/GitServlet.java | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/utils/JGitUtils.java | ●●●●● patch | view | raw | blame | history |
src/com/gitblit/GitServlet.java
@@ -23,6 +23,7 @@ import java.text.MessageFormat; import java.util.Collection; import java.util.Enumeration; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -32,7 +33,9 @@ import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Part; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.http.server.resolver.DefaultReceivePackFactory; import org.eclipse.jgit.http.server.resolver.DefaultUploadPackFactory; import org.eclipse.jgit.lib.PersonIdent; @@ -82,6 +85,11 @@ private File groovyDir; @Override public void destroy() { super.destroy(); } @Override public void init(ServletConfig config) throws ServletException { groovyDir = GitBlit.getGroovyScriptsFolder(); try { @@ -100,8 +108,9 @@ @Override public ReceivePack create(HttpServletRequest req, Repository db) throws ServiceNotEnabledException, ServiceNotAuthorizedException { // determine repository name from request org.eclipse.jgit.http.server.glue.WrappedRequest wrreq = (org.eclipse.jgit.http.server.glue.WrappedRequest) req; String repositoryName = req.getPathInfo().substring(1); repositoryName = GitFilter.getRepositoryName(repositoryName); @@ -163,6 +172,7 @@ return up; } }); super.init(new GitblitServletConfig(config)); } @@ -296,7 +306,33 @@ UserModel user = getUserModel(rp); RepositoryModel repository = GitBlit.self().getRepositoryModel(repositoryName); if (repository.useIncrementalRevisionNumbers) { List<ReceiveCommand> allCommands = rp.getAllCommands(); String cmds = ""; for (ReceiveCommand receiveCommand : allCommands) { cmds += receiveCommand.getType() + "_" + receiveCommand.getResult() + "_" + receiveCommand.getMessage() + ", "; if (receiveCommand.getType().equals( ReceiveCommand.Type.UPDATE) && receiveCommand.getResult().equals( ReceiveCommand.Result.OK)) { String objectId = receiveCommand.getNewId().toString() .replace("AnyObjectId[", "").replace("]", ""); System.err.println("SHB id " + objectId); System.err.println("SHB id " + objectId.getBytes().length); // if type=update and update was ok, autotag boolean result = JGitUtils .createIncrementalRevisionTag( rp.getRepository(), objectId); System.err.println("SHB res " + result); } } System.err.println("SHB cmds: " + cmds); } // log ref changes for (ReceiveCommand cmd : commands) { if (Result.OK.equals(cmd.getResult())) { src/com/gitblit/utils/JGitUtils.java
@@ -25,6 +25,7 @@ import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -33,6 +34,7 @@ import org.eclipse.jgit.api.CloneCommand; import org.eclipse.jgit.api.FetchCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.TagCommand; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.diff.DiffEntry.ChangeType; @@ -80,6 +82,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.gitblit.GitBlit; import com.gitblit.Keys; import com.gitblit.models.GitNote; import com.gitblit.models.PathModel; import com.gitblit.models.PathModel.PathChangeModel; @@ -94,6 +98,7 @@ */ public class JGitUtils { private static final String REVISION_TAG_PREFIX = "rev_"; static final Logger LOGGER = LoggerFactory.getLogger(JGitUtils.class); /** @@ -1687,8 +1692,73 @@ } return list; } /** * this method creates an incremental revision number as a tag according to * the amount of already existing tags, which start with a defined prefix {@link REVISION_TAG_PREFIX} * * @param repository * @param objectId * @return true if operation was successful, otherwise false */ public static boolean createIncrementalRevisionTag(Repository repository, String objectId) { boolean result = false; Iterator<Entry<String, Ref>> iterator = repository.getTags().entrySet().iterator(); long revisionNumber = 1; while (iterator.hasNext()) { Entry<String, Ref> entry = iterator.next(); if (entry.getKey().startsWith(REVISION_TAG_PREFIX)) { revisionNumber++; } } result = createTag(repository,REVISION_TAG_PREFIX+revisionNumber,objectId); return result; } /** * creates a tag in a repository referring to the current head * * @param repository * @param tag, the string label * @return boolean, true if operation was successful, otherwise false */ public static boolean createTag(Repository repository, String tag) { return createTag(repository, tag, null); } /** * creates a tag in a repository * * @param repository * @param tag, the string label * @param objectId, the ref the tag points towards * @return boolean, true if operation was successful, otherwise false */ public static boolean createTag(Repository repository, String tag, String objectId) { try { PersonIdent author = new PersonIdent("GitblitAutoTagPush", "gitblit@localhost"); LOGGER.debug("createTag in repo: "+repository.getDirectory().getAbsolutePath()); Git gitClient = Git.open(repository.getDirectory()); TagCommand tagCommand = gitClient.tag(); tagCommand.setTagger(author); tagCommand.setMessage("autotag"); if (objectId != null) { RevObject revObj = getCommit(repository, objectId); tagCommand.setObjectId(revObj); } tagCommand.setName(tag); Ref call = tagCommand.call(); return call != null ? true : false; } catch (Exception e) { e.printStackTrace(); } return false; } /** * Create an orphaned branch in a repository. * * @param repository