James Moger
2013-04-01 0f47b2f605ed4119a6042b72d3499b223f40ec90
src/main/java/com/gitblit/utils/JGitUtils.java
@@ -19,12 +19,14 @@
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
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 +35,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;
@@ -1689,6 +1692,70 @@
   }
   /**
    * this method creates an incremental revision number as a tag according to
    * the amount of already existing tags, which start with a defined prefix.
    *
    * @param repository
    * @param objectId
    * @param tagger
    * @param prefix
    * @param intPattern
    * @param message
    * @return true if operation was successful, otherwise false
    */
   public static boolean createIncrementalRevisionTag(Repository repository,
         String objectId, PersonIdent tagger, String prefix, String intPattern, String message) {
      boolean result = false;
      Iterator<Entry<String, Ref>> iterator = repository.getTags().entrySet().iterator();
      long lastRev = 0;
      while (iterator.hasNext()) {
         Entry<String, Ref> entry = iterator.next();
         if (entry.getKey().startsWith(prefix)) {
            try {
               long val = Long.parseLong(entry.getKey().substring(prefix.length()));
               if (val > lastRev) {
                  lastRev = val;
               }
            } catch (Exception e) {
               // this tag is NOT an incremental revision tag
            }
         }
      }
      DecimalFormat df = new DecimalFormat(intPattern);
      result = createTag(repository, objectId, tagger, prefix + df.format((lastRev + 1)), message);
      return result;
   }
   /**
    * creates a tag in a repository
    *
    * @param repository
    * @param objectId, the ref the tag points towards
    * @param tagger, the person tagging the object
    * @param tag, the string label
    * @param message, the string message
    * @return boolean, true if operation was successful, otherwise false
    */
   public static boolean createTag(Repository repository, String objectId, PersonIdent tagger, String tag, String message) {
      try {
         Git gitClient = Git.open(repository.getDirectory());
         TagCommand tagCommand = gitClient.tag();
         tagCommand.setTagger(tagger);
         tagCommand.setMessage(message);
         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) {
         error(e, repository, "Failed to create tag {1} in repository {0}", objectId, tag);
      }
      return false;
   }
   /**
    * Create an orphaned branch in a repository.
    * 
    * @param repository