From a502d96a860456ec5e8c96761db70f7cabb74751 Mon Sep 17 00:00:00 2001
From: Paul Martin <paul@paulsputer.com>
Date: Sat, 30 Apr 2016 04:19:14 -0400
Subject: [PATCH] Merge pull request #1073 from gitblit/1062-DocEditorUpdates

---
 src/main/java/com/gitblit/utils/DeepCopier.java |   36 +++++++++++++++++++++++++++++++++++-
 1 files changed, 35 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/gitblit/utils/DeepCopier.java b/src/main/java/com/gitblit/utils/DeepCopier.java
index 5df3062..fc76f1a 100644
--- a/src/main/java/com/gitblit/utils/DeepCopier.java
+++ b/src/main/java/com/gitblit/utils/DeepCopier.java
@@ -23,8 +23,41 @@
 import java.io.ObjectOutputStream;
 import java.io.PipedInputStream;
 import java.io.PipedOutputStream;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 
 public class DeepCopier {
+
+	/**
+	 * Utility method to calculate the checksum of an object.
+	 * @param sourceObject The object from which to establish the checksum.
+	 * @return The checksum
+	 * @throws IOException
+	 */
+	public static BigInteger checksum(Object sourceObject) {
+
+	    if (sourceObject == null) {
+	      return BigInteger.ZERO;
+	    }
+
+	    try {
+		    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		    ObjectOutputStream oos = new ObjectOutputStream(baos);
+		    oos.writeObject(sourceObject);
+		    oos.close();
+
+	    	MessageDigest m = MessageDigest.getInstance("SHA-1");
+	    	m.update(baos.toByteArray());
+	    	return new BigInteger(1, m.digest());
+	    } catch (IOException e) {
+	    	throw new RuntimeException(e);
+	    } catch (NoSuchAlgorithmException e) {
+	    	// impossible
+	    }
+
+	    return BigInteger.ZERO;
+	}
 
 	/**
 	 * Produce a deep copy of the given object. Serializes the entire object to
@@ -57,7 +90,7 @@
 	 * very large objects. The current thread is used for serializing the
 	 * original object in order to respect any synchronization the caller may
 	 * have around it, and a new thread is used for deserializing the copy.
-	 * 
+	 *
 	 */
 	public static <T> T copyParallel(T original) {
 		try {
@@ -88,6 +121,7 @@
 			start();
 		}
 
+		@Override
 		@SuppressWarnings("unchecked")
 		public void run() {
 

--
Gitblit v1.9.1