James Moger
2014-03-18 23c416f30f4a1e69e76b70d71f6a9a7da4a020f1
src/main/java/com/gitblit/tickets/BranchTicketService.java
@@ -30,8 +30,6 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import javax.inject.Inject;
import org.eclipse.jgit.api.errors.ConcurrentRefUpdateException;
import org.eclipse.jgit.api.errors.JGitInternalException;
import org.eclipse.jgit.dircache.DirCache;
@@ -45,6 +43,8 @@
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectInserter;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.RefRename;
import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.lib.RefUpdate.Result;
import org.eclipse.jgit.lib.Repository;
@@ -82,7 +82,7 @@
 */
public class BranchTicketService extends ITicketService implements RefsChangedListener {
   public static final String BRANCH = "refs/gitblit/tickets";
   public static final String BRANCH = "refs/meta/gitblit/tickets";
   private static final String JOURNAL = "journal.json";
@@ -90,7 +90,6 @@
   private final Map<String, AtomicLong> lastAssignedId;
   @Inject
   public BranchTicketService(
         IRuntimeManager runtimeManager,
         INotificationManager notificationManager,
@@ -190,23 +189,45 @@
   }
   /**
    * Returns a RefModel for the refs/gitblit/tickets branch in the repository.
    * Returns a RefModel for the refs/meta/gitblit/tickets branch in the repository.
    * If the branch can not be found, null is returned.
    *
    * @return a refmodel for the gitblit tickets branch or null
    */
   private RefModel getTicketsBranch(Repository db) {
      List<RefModel> refs = JGitUtils.getRefs(db, Constants.R_GITBLIT);
      List<RefModel> refs = JGitUtils.getRefs(db, "refs/");
      Ref oldRef = null;
      for (RefModel ref : refs) {
         if (ref.reference.getName().equals(BRANCH)) {
            return ref;
         } else if (ref.reference.getName().equals("refs/gitblit/tickets")) {
            oldRef = ref.reference;
         }
      }
      if (oldRef != null) {
         // rename old ref to refs/meta/gitblit/tickets
         RefRename cmd;
         try {
            cmd = db.renameRef(oldRef.getName(), BRANCH);
            cmd.setRefLogIdent(new PersonIdent("Gitblit", "gitblit@localhost"));
            cmd.setRefLogMessage("renamed " + oldRef.getName() + " => " + BRANCH);
            Result res = cmd.rename();
            switch (res) {
            case RENAMED:
               log.info(db.getDirectory() + " " + cmd.getRefLogMessage());
               return getTicketsBranch(db);
            default:
               log.error("failed to rename " + oldRef.getName() + " => " + BRANCH + " (" + res.name() + ")");
            }
         } catch (IOException e) {
            log.error("failed to rename tickets branch", e);
         }
      }
      return null;
   }
   /**
    * Creates the refs/gitblit/tickets branch.
    * Creates the refs/meta/gitblit/tickets branch.
    * @param db
    */
   private void createTicketsBranch(Repository db) {
@@ -219,7 +240,7 @@
    * folder with the remaining characters as a subfolder within that folder.
    *
    * @param ticketId
    * @return the root path of the ticket content on the refs/gitblit/tickets branch
    * @return the root path of the ticket content on the refs/meta/gitblit/tickets branch
    */
   private String toTicketPath(long ticketId) {
      StringBuilder sb = new StringBuilder();
@@ -851,7 +872,9 @@
      } catch (Exception e) {
         log.error(null, e);
      } finally {
         db.close();
         if (db != null) {
            db.close();
         }
      }
      return false;
   }