From edd8029558483a56c850f1beb31f81f5e1288f09 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Mon, 23 Aug 2010 10:29:50 -0700 Subject: [PATCH] Add setLength(long) to DirCacheEntry Applications should favor the long style interface, especially when their source input is a long type, e.g. coming from java.io.File. This way when the index format is later changed to support a larger file size than 2 GiB we can handle it by just changing the entry code, and not need to fix a lot of applications. Change-Id: I332563caeb110014e2d544dc33050ce67ae9e897 Signed-off-by: Shawn O. Pearce --- .../org/eclipse/jgit/JGitText.properties | 1 + .../src/org/eclipse/jgit/JGitText.java | 1 + .../org/eclipse/jgit/dircache/DirCacheEntry.java | 16 ++++++++++++++++ 3 files changed, 18 insertions(+) diff --git a/org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties b/org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties index 681d289c84..58adf332d3 100644 --- a/org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties +++ b/org.eclipse.jgit/resources/org/eclipse/jgit/JGitText.properties @@ -328,6 +328,7 @@ shortReadOfBlock=Short read of block. shortReadOfOptionalDIRCExtensionExpectedAnotherBytes=Short read of optional DIRC extension {0}; expected another {1} bytes within the section. shortSkipOfBlock=Short skip of block. similarityScoreMustBeWithinBounds=Similarity score must be between 0 and 100. +sizeExceeds2GB=Path {0} size {1} exceeds 2 GiB limit. smartHTTPPushDisabled=smart HTTP push disabled sourceDestinationMustMatch=Source/Destination must match. sourceIsNotAWildcard=Source is not a wildcard. diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/JGitText.java b/org.eclipse.jgit/src/org/eclipse/jgit/JGitText.java index 193d733679..f7eea3fe9f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/JGitText.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/JGitText.java @@ -387,6 +387,7 @@ public class JGitText extends TranslationBundle { /***/ public String shortReadOfOptionalDIRCExtensionExpectedAnotherBytes; /***/ public String shortSkipOfBlock; /***/ public String similarityScoreMustBeWithinBounds; + /***/ public String sizeExceeds2GB; /***/ public String smartHTTPPushDisabled; /***/ public String sourceDestinationMustMatch; /***/ public String sourceIsNotAWildcard; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java index 909729d6c6..b7fc1c787d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheEntry.java @@ -486,6 +486,22 @@ public class DirCacheEntry { NB.encodeInt32(info, infoOffset + P_SIZE, sz); } + /** + * Set the cached size (in bytes) of this file. + * + * @param sz + * new cached size of the file, as bytes. + * @throws IllegalArgumentException + * if the size exceeds the 2 GiB barrier imposed by current file + * format limitations. + */ + public void setLength(final long sz) { + if (Integer.MAX_VALUE <= sz) + throw new IllegalArgumentException(MessageFormat.format(JGitText + .get().sizeExceeds2GB, getPathString(), sz)); + setLength((int) sz); + } + /** * Obtain the ObjectId for the entry. *

-- 2.39.5