From 0c5cee25a1d9019de2d92427fda886a28076aa01 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 18 Sep 2013 11:31:02 -0400
Subject: [PATCH] Disable but improve the example commit message regexes
---
src/main/java/com/gitblit/utils/RefLogUtils.java | 62 +++++++++++++++++++++++++++++-
1 files changed, 59 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/gitblit/utils/RefLogUtils.java b/src/main/java/com/gitblit/utils/RefLogUtils.java
index fed55ca..df09a76 100644
--- a/src/main/java/com/gitblit/utils/RefLogUtils.java
+++ b/src/main/java/com/gitblit/utils/RefLogUtils.java
@@ -20,6 +20,7 @@
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
@@ -41,6 +42,7 @@
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;
@@ -95,6 +97,21 @@
parameters.add(0, repository.getDirectory().getAbsolutePath());
}
LOGGER.error(MessageFormat.format(pattern, parameters.toArray()), t);
+ }
+
+ /**
+ * Returns true if the repository has a reflog branch.
+ *
+ * @param repository
+ * @return true if the repository has a reflog branch
+ */
+ public static boolean hasRefLogBranch(Repository repository) {
+ try {
+ return repository.getRef(GB_REFLOG) != null;
+ } catch(Exception e) {
+ LOGGER.error("failed to determine hasRefLogBranch", e);
+ }
+ return false;
}
/**
@@ -156,6 +173,37 @@
}
/**
+ * Logs a ref deletion.
+ *
+ * @param user
+ * @param repository
+ * @param ref
+ * @return true, if the update was successful
+ */
+ public static boolean deleteRef(UserModel user, Repository repository, Ref ref) {
+ try {
+ if (ref == null) {
+ return false;
+ }
+ RefModel reflogBranch = getRefLogBranch(repository);
+ if (reflogBranch == null) {
+ return false;
+ }
+
+ List<RevCommit> log = JGitUtils.getRevLog(repository, reflogBranch.getName(), ref.getName(), 0, 1);
+ if (log.isEmpty()) {
+ // this ref is not in the reflog branch
+ return false;
+ }
+ ReceiveCommand cmd = new ReceiveCommand(ref.getObjectId(), ObjectId.zeroId(), ref.getName());
+ return updateRefLog(user, repository, Arrays.asList(cmd));
+ } catch (Throwable t) {
+ error(t, repository, "Failed to commit reflog entry to {0}");
+ }
+ return false;
+ }
+
+ /**
* Updates the reflog with the received commands.
*
* @param user
@@ -184,7 +232,7 @@
PersonIdent ident;
if (UserModel.ANONYMOUS.equals(user)) {
// anonymous push
- ident = new PersonIdent("anonymous", "anonymous");
+ ident = new PersonIdent(user.username + "/" + user.username, user.username);
} else {
// construct real pushing account
ident = new PersonIdent(MessageFormat.format("{0}/{1}", user.getDisplayName(), user.username),
@@ -394,9 +442,13 @@
UserModel user = newUserModelFrom(push.getAuthorIdent());
Date date = push.getAuthorIdent().getWhen();
- RefLogEntry log = new RefLogEntry(repositoryName, date, user);
- list.add(log);
+ RefLogEntry log = new RefLogEntry(repositoryName, date, user);
List<PathChangeModel> changedRefs = JGitUtils.getFilesInCommit(repository, push);
+ if (changedRefs.isEmpty()) {
+ // skip empty commits
+ continue;
+ }
+ list.add(log);
for (PathChangeModel change : changedRefs) {
switch (change.changeType) {
case DELETE:
@@ -410,6 +462,10 @@
String oldId = fields[1];
String newId = fields[2];
log.updateRef(change.path, ReceiveCommand.Type.valueOf(fields[0]), oldId, newId);
+ if (ObjectId.zeroId().getName().equals(newId)) {
+ // ref deletion
+ continue;
+ }
List<RevCommit> pushedCommits = JGitUtils.getRevLog(repository, oldId, newId);
for (RevCommit pushedCommit : pushedCommits) {
RepositoryCommit repoCommit = log.addCommit(change.path, pushedCommit);
--
Gitblit v1.9.1