From f76fee63ed9cb3a30d3c0c092d860b1cb93a481b Mon Sep 17 00:00:00 2001
From: Gerard Smyth <gerard.smyth@gmail.com>
Date: Thu, 08 May 2014 13:09:30 -0400
Subject: [PATCH] Updated the SyndicationServlet to provide an additional option to return details of the tags in the repository instead of the commits. This uses a new 'ot' request parameter to indicate the object type of the content to return, which can be ither TAG or COMMIT. If this is not provided, then COMMIT is assumed to maintain backwards compatability. If tags are returned, then the paging parameters, 'l' and 'pg' are still supported, but searching options are currently ignored.

---
 src/main/java/com/gitblit/models/RefLogEntry.java |   83 +++++++++++++++++++++--------------------
 1 files changed, 43 insertions(+), 40 deletions(-)

diff --git a/src/main/java/com/gitblit/models/RefLogEntry.java b/src/main/java/com/gitblit/models/RefLogEntry.java
index 79e8a2c..07dc6f3 100644
--- a/src/main/java/com/gitblit/models/RefLogEntry.java
+++ b/src/main/java/com/gitblit/models/RefLogEntry.java
@@ -36,7 +36,7 @@
 
 /**
  * Model class to represent a push into a repository.
- * 
+ *
  * @author James Moger
  */
 public class RefLogEntry implements Serializable, Comparable<RefLogEntry> {
@@ -44,22 +44,22 @@
 	private static final long serialVersionUID = 1L;
 
 	public final String repository;
-	
+
 	public final Date date;
-	
+
 	public final UserModel user;
 
 	private final Set<RepositoryCommit> commits;
-	
+
 	protected final Map<String, ReceiveCommand.Type> refUpdates;
-	
+
 	protected final Map<String, String> refIdChanges;
-	
+
 	private int authorCount;
 
 	/**
 	 * Constructor for specified duration of push from start date.
-	 * 
+	 *
 	 * @param repository
 	 *            the repository that received the push
 	 * @param date
@@ -76,10 +76,10 @@
 		this.refIdChanges = new HashMap<String, String>();
 		this.authorCount = -1;
 	}
-	
+
 	/**
 	 * Tracks the change type for the specified ref.
-	 * 
+	 *
 	 * @param ref
 	 * @param type
 	 */
@@ -88,10 +88,10 @@
 			refUpdates.put(ref, type);
 		}
 	}
-	
+
 	/**
 	 * Tracks the change type for the specified ref.
-	 * 
+	 *
 	 * @param ref
 	 * @param type
 	 * @param oldId
@@ -103,10 +103,10 @@
 			refIdChanges.put(ref, oldId + "-" + newId);
 		}
 	}
-	
+
 	/**
 	 * Returns the old id of a ref.
-	 * 
+	 *
 	 * @param ref
 	 * @return the old id
 	 */
@@ -120,7 +120,7 @@
 
 	/**
 	 * Returns the new id of a ref
-	 * 
+	 *
 	 * @param ref
 	 * @return the new id
 	 */
@@ -131,10 +131,10 @@
 		}
 		return change.split("-")[1];
 	}
-	
+
 	/**
 	 * Returns the change type of the ref change.
-	 * 
+	 *
 	 * @param ref
 	 * @return the change type for the ref
 	 */
@@ -146,7 +146,7 @@
 	/**
 	 * Adds a commit to the push entry object as long as the commit is not a
 	 * duplicate.
-	 * 
+	 *
 	 * @param branch
 	 * @param commit
 	 * @return a RepositoryCommit, if one was added. Null if this is duplicate
@@ -164,7 +164,7 @@
 	/**
 	 * Adds a commit to the push entry object as long as the commit is not a
 	 * duplicate.
-	 * 
+	 *
 	 * @param branch
 	 * @param commit
 	 * @return a RepositoryCommit, if one was added. Null if this is duplicate
@@ -181,17 +181,17 @@
 	/**
 	 * Adds a a list of repository commits.  This is used to construct discrete
 	 * ref push log entries
-	 * 
+	 *
 	 * @param commits
 	 */
 	public void addCommits(List<RepositoryCommit> list) {
 		commits.addAll(list);
 		authorCount = -1;
 	}
-	
+
 	/**
 	 * Returns true if this push contains a non-fastforward ref update.
-	 * 
+	 *
 	 * @return true if this is a non-fastforward push
 	 */
 	public boolean isNonFastForward() {
@@ -202,10 +202,10 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Returns true if this ref has been rewound.
-	 * 
+	 *
 	 * @param ref
 	 * @return true if this is a non-fastforward ref update
 	 */
@@ -219,7 +219,7 @@
 
 	/**
 	 * Returns true if this ref has been deleted.
-	 * 
+	 *
 	 * @param ref
 	 * @return true if this is a delete ref update
 	 */
@@ -230,28 +230,28 @@
 		}
 		return ReceiveCommand.Type.DELETE.equals(type);
 	}
-	
+
 	/**
 	 * Returns the list of refs changed by the push.
-	 * 
+	 *
 	 * @return a list of refs
 	 */
 	public List<String> getChangedRefs() {
 		return new ArrayList<String>(refUpdates.keySet());
 	}
-	
+
 	/**
 	 * Returns the list of branches changed by the push.
-	 * 
+	 *
 	 * @return a list of branches
 	 */
 	public List<String> getChangedBranches() {
 		return getChangedRefs(Constants.R_HEADS);
 	}
-	
+
 	/**
 	 * Returns the list of tags changed by the push.
-	 * 
+	 *
 	 * @return a list of tags
 	 */
 	public List<String> getChangedTags() {
@@ -260,7 +260,7 @@
 
 	/**
 	 * Gets the changed refs in the push.
-	 * 
+	 *
 	 * @param baseRef
 	 * @return the changed refs
 	 */
@@ -275,7 +275,7 @@
 		Collections.sort(list);
 		return list;
 	}
-	
+
 	public int getAuthorCount() {
 		if (authorCount == -1) {
 			Set<String> authors = new HashSet<String>();
@@ -287,19 +287,19 @@
 		}
 		return authorCount;
 	}
-	
+
 	/**
 	 * The total number of commits in the push.
-	 * 
+	 *
 	 * @return the number of commits in the push
 	 */
 	public int getCommitCount() {
 		return commits.size();
 	}
-	
+
 	/**
 	 * Returns all commits in the push.
-	 * 
+	 *
 	 * @return a list of commits
 	 */
 	public List<RepositoryCommit> getCommits() {
@@ -307,10 +307,10 @@
 		Collections.sort(list);
 		return list;
 	}
-	
+
 	/**
 	 * Returns all commits that belong to a particular ref
-	 * 
+	 *
 	 * @param ref
 	 * @return a list of commits
 	 */
@@ -324,12 +324,15 @@
 		Collections.sort(list);
 		return list;
 	}
-	
+
 	public PersonIdent getCommitterIdent() {
 		return new PersonIdent(user.getDisplayName(), user.emailAddress == null ? user.username : user.emailAddress);
 	}
 
 	public PersonIdent getAuthorIdent() {
+		if (getAuthorCount() == 1) {
+			return getCommits().get(0).getAuthorIdent();
+		}
 		return getCommitterIdent();
 	}
 
@@ -338,7 +341,7 @@
 		// reverse chronological order
 		return o.date.compareTo(date);
 	}
-	
+
 	@Override
 	public String toString() {
 		StringBuilder sb = new StringBuilder();

--
Gitblit v1.9.1