From faae5cdb5be65547f7d681108f9a194e8da748f5 Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Sun, 12 Apr 2015 00:51:37 +0200 Subject: [PATCH 1/5] Fix hidden field warnings in bundle org.eclipse.jgit Change-Id: I4e79cefe15037df0e1c520956bf2482240e31a7d Signed-off-by: Matthias Sohn --- .../storage/file/ObjectDirectoryPackParser.java | 11 +++++------ .../src/org/eclipse/jgit/transport/UploadPack.java | 8 ++++---- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectoryPackParser.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectoryPackParser.java index a186b8147..1c076ee09 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectoryPackParser.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectoryPackParser.java @@ -366,11 +366,10 @@ public class ObjectDirectoryPackParser extends PackParser { @Override protected void onEndThinPack() throws IOException { - final byte[] tailHash = this.tailDigest.digest(); final byte[] buf = buffer(); final MessageDigest origDigest = Constants.newMessageDigest(); - final MessageDigest tailDigest = Constants.newMessageDigest(); + final MessageDigest tailDigest2 = Constants.newMessageDigest(); final MessageDigest packDigest = Constants.newMessageDigest(); long origRemaining = origEnd; @@ -393,15 +392,15 @@ public class ObjectDirectoryPackParser extends PackParser { origDigest.update(buf, 0, origCnt); origRemaining -= origCnt; if (origRemaining == 0) - tailDigest.update(buf, origCnt, n - origCnt); + tailDigest2.update(buf, origCnt, n - origCnt); } else - tailDigest.update(buf, 0, n); + tailDigest2.update(buf, 0, n); packDigest.update(buf, 0, n); } - if (!Arrays.equals(origDigest.digest(), origHash) - || !Arrays.equals(tailDigest.digest(), tailHash)) + if (!Arrays.equals(origDigest.digest(), origHash) || !Arrays + .equals(tailDigest2.digest(), this.tailDigest.digest())) throw new IOException( JGitText.get().packCorruptedWhileWritingToFilesystem); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java index c60590dda..753277dd3 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java @@ -810,9 +810,9 @@ public class UploadPack { adv.advertiseCapability(OPTION_ALLOW_TIP_SHA1_IN_WANT); adv.advertiseCapability(OPTION_AGENT, UserAgent.get()); adv.setDerefTags(true); - Map refs = getAdvertisedOrDefaultRefs(); - findSymrefs(adv, refs); - advertised = adv.send(refs); + Map advertisedOrDefaultRefs = getAdvertisedOrDefaultRefs(); + findSymrefs(adv, advertisedOrDefaultRefs); + advertised = adv.send(advertisedOrDefaultRefs); if (adv.isEmpty()) adv.advertiseId(ObjectId.zeroId(), "capabilities^{}"); //$NON-NLS-1$ adv.end(); @@ -1467,7 +1467,7 @@ public class UploadPack { pckOut.end(); } - private void findSymrefs( + private static void findSymrefs( final RefAdvertiser adv, final Map refs) { Ref head = refs.get(Constants.HEAD); if (head != null && head.isSymbolic()) { From 17307df3af722b9fcb5a90ebea03505a7a82faf0 Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Sun, 12 Apr 2015 01:01:14 +0200 Subject: [PATCH 2/5] Silence deprecation warning in DirCacheCheckout Change-Id: I9e021ba2e0d1317bd98e86f832d55787ed6b0a63 Signed-off-by: Matthias Sohn --- .../src/org/eclipse/jgit/dircache/DirCacheCheckout.java | 1 + 1 file changed, 1 insertion(+) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java index f316ea99a..00252547d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java @@ -1192,6 +1192,7 @@ public class DirCacheCheckout { entry.setLastModified(f.lastModified()); } + @SuppressWarnings("deprecation") private static void checkValidPath(CanonicalTreeParser t) throws InvalidPathException { ObjectChecker chk = new ObjectChecker() From e013bcdcc638be71a7639c52dfcfa33445d49fd5 Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Sun, 12 Apr 2015 01:08:48 +0200 Subject: [PATCH 3/5] Silence deprecation warning in WindowCacheConfig Change-Id: I923b65efeaacc5e9cc8aecc754ab8d8e63ccd2e5 Signed-off-by: Matthias Sohn --- .../src/org/eclipse/jgit/storage/file/WindowCacheConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/WindowCacheConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/WindowCacheConfig.java index 69abd0d97..4205fc4e8 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/WindowCacheConfig.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/WindowCacheConfig.java @@ -221,6 +221,7 @@ public class WindowCacheConfig { * * @since 3.0 */ + @SuppressWarnings("deprecation") public void install() { WindowCache.reconfigure(this); } From 8787176ef1cd4c7b7fc6e312bdf680f384c38467 Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Sun, 12 Apr 2015 01:27:12 +0200 Subject: [PATCH 4/5] Silence unchecked conversion warning in TransportSftp Change-Id: I3dc8e0b483072bdf193ae4190a60d1867ebefd12 Signed-off-by: Matthias Sohn --- .../src/org/eclipse/jgit/transport/TransportSftp.java | 1 + 1 file changed, 1 insertion(+) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportSftp.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportSftp.java index c47645cd7..fa073ae2a 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportSftp.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportSftp.java @@ -227,6 +227,7 @@ public class TransportSftp extends SshTransport implements WalkTransport { Collection getPackNames() throws IOException { final List packs = new ArrayList(); try { + @SuppressWarnings("unchecked") final Collection list = ftp.ls("pack"); //$NON-NLS-1$ final HashMap files; final HashMap mtimes; From efacad0fc8e98505be6f007230ab2b1cdc1684f3 Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Wed, 15 Apr 2015 08:40:05 +0200 Subject: [PATCH 5/5] Improve exception thrown when pull can't find advertised ref - throw an API exception instead of an internal exception to allow applications to handle this problem - improve error message to give hints about possible root causes Bug: 464660 Change-Id: Ib7d18bb2eeeac0fc218daea375b290ea5034bda1 Signed-off-by: Matthias Sohn --- .../eclipse/jgit/internal/JGitText.properties | 2 +- .../src/org/eclipse/jgit/api/PullCommand.java | 14 +++-- .../api/errors/RefNotAdvertisedException.java | 54 +++++++++++++++++++ 3 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 org.eclipse.jgit/src/org/eclipse/jgit/api/errors/RefNotAdvertisedException.java diff --git a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties index a2f06b1a2..db9a68458 100644 --- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties +++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties @@ -181,7 +181,7 @@ corruptObjectTruncatedInObjectId=truncated in object id couldNotCheckOutBecauseOfConflicts=Could not check out because of conflicts couldNotDeleteLockFileShouldNotHappen=Could not delete lock file. Should not happen couldNotDeleteTemporaryIndexFileShouldNotHappen=Could not delete temporary index file. Should not happen -couldNotGetAdvertisedRef=Could not get advertised Ref for branch {0} +couldNotGetAdvertisedRef=Remote {0} did not advertise Ref for branch {1}. This Ref may not exist in the remote or may be hidden by permission settings. couldNotGetRepoStatistics=Could not get repository statistics couldNotLockHEAD=Could not lock HEAD couldNotReadIndexInOneGo=Could not read index in one go, only {0} out of {1} read diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java index ac050dd33..63de85c50 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java @@ -54,6 +54,7 @@ import org.eclipse.jgit.api.errors.InvalidConfigurationException; import org.eclipse.jgit.api.errors.InvalidRemoteException; import org.eclipse.jgit.api.errors.JGitInternalException; import org.eclipse.jgit.api.errors.NoHeadException; +import org.eclipse.jgit.api.errors.RefNotAdvertisedException; import org.eclipse.jgit.api.errors.RefNotFoundException; import org.eclipse.jgit.api.errors.WrongRepositoryStateException; import org.eclipse.jgit.internal.JGitText; @@ -171,6 +172,7 @@ public class PullCommand extends TransportCommand { * @throws InvalidRemoteException * @throws CanceledException * @throws RefNotFoundException + * @throws RefNotAdvertisedException * @throws NoHeadException * @throws org.eclipse.jgit.api.errors.TransportException * @throws GitAPIException @@ -178,7 +180,7 @@ public class PullCommand extends TransportCommand { public PullResult call() throws GitAPIException, WrongRepositoryStateException, InvalidConfigurationException, DetachedHeadException, InvalidRemoteException, CanceledException, - RefNotFoundException, NoHeadException, + RefNotFoundException, RefNotAdvertisedException, NoHeadException, org.eclipse.jgit.api.errors.TransportException { checkCallable(); @@ -284,11 +286,13 @@ public class PullCommand extends TransportCommand { r = fetchRes.getAdvertisedRef(Constants.R_HEADS + remoteBranchName); } - if (r == null) - throw new JGitInternalException(MessageFormat.format(JGitText - .get().couldNotGetAdvertisedRef, remoteBranchName)); - else + if (r == null) { + throw new RefNotAdvertisedException(MessageFormat.format( + JGitText.get().couldNotGetAdvertisedRef, remote, + remoteBranchName)); + } else { commitToMerge = r.getObjectId(); + } } else { try { commitToMerge = repo.resolve(remoteBranchName); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/errors/RefNotAdvertisedException.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/errors/RefNotAdvertisedException.java new file mode 100644 index 000000000..2bd847765 --- /dev/null +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/errors/RefNotAdvertisedException.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2015,Matthias Sohn and + * other copyright owners as documented in the project's IP log. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v1.0 which accompanies this + * distribution, is reproduced below, and is available at + * http://www.eclipse.org/org/documents/edl-v10.php + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * - Neither the name of the Eclipse Foundation, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +package org.eclipse.jgit.api.errors; + +/** + * Thrown when a ref is not found in advertised refs + * + * @since 4.0 + */ +public class RefNotAdvertisedException extends GitAPIException { + private static final long serialVersionUID = 1L; + + /** + * @param message + */ + public RefNotAdvertisedException(String message) { + super(message); + } +}