Introduce "never" as parseable date

For configuration parameter like "gc.pruneexpire" we need to understand
the value "never". Never is handled as a date so far into the future
that it will never happen. The actual value currently used is the
constant GitDateParser.NEVER.

Change-Id: I7744eaee9bf5026da517151c212c88325c348d6c
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/GitDateParserTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/GitDateParserTest.java
index 98e84fe..6b0632a 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/GitDateParserTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/GitDateParserTest.java
@@ -77,6 +77,17 @@
 	}
 
 	@Test
+	public void never() throws ParseException {
+		GregorianCalendar cal = new GregorianCalendar(SystemReader
+				.getInstance().getTimeZone(), SystemReader.getInstance()
+				.getLocale());
+		Date parse = GitDateParser.parse("never", cal);
+		Assert.assertEquals(GitDateParser.NEVER, parse);
+		parse = GitDateParser.parse("never", null);
+		Assert.assertEquals(GitDateParser.NEVER, parse);
+	}
+
+	@Test
 	public void now() throws ParseException {
 		String dateStr = "2007-02-21 15:35:00 +0100";
 		Date refDate = SystemReader.getInstance()
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/GitDateParser.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/GitDateParser.java
index dc5c7fa..f1743d4 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/GitDateParser.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/GitDateParser.java
@@ -62,6 +62,12 @@
  * understands.
  */
 public class GitDateParser {
+	/**
+	 * The Date representing never. Though this is a concrete value, most
+	 * callers are adviced to avoid depending on the actual value.
+	 */
+	public static final Date NEVER = new Date(Long.MAX_VALUE);
+
 	// Since SimpleDateFormat instances are expensive to instantiate they should
 	// be cached. Since they are also not threadsafe they are cached using
 	// ThreadLocal.
@@ -113,6 +119,7 @@
 	 * relative formats (e.g. "yesterday") the caller can specify the reference
 	 * date. These types of strings can be parsed:
 	 * <ul>
+	 * <li>"never"</li>
 	 * <li>"now"</li>
 	 * <li>"yesterday"</li>
 	 * <li>"(x) years|months|weeks|days|hours|minutes|seconds ago"<br>
@@ -146,6 +153,9 @@
 			throws ParseException {
 		dateStr = dateStr.trim();
 		Date ret;
+
+		if ("never".equalsIgnoreCase(dateStr))
+			return NEVER;
 		ret = parse_relative(dateStr, now);
 		if (ret != null)
 			return ret;