Browse Source

Throw JGit exception when ResetCommand got wrong ref

If the ResetCommand should reset to a invalid ref (e.g. HEAD in a repo
whithout a single commit) it was throwing an NPE. This is fixed now by
throwing a JGitInternalExcpeption. It would be nicer if we could throw
a InvalidRefException, but this would modify our API.

Bug: 339610
Change-Id: Iffcb4f2cca9f702176471d93c3a71e5cb3e700b1
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
stable-1.1
Christian Halstrick 14 years ago committed by Chris Aniszczyk
parent
commit
930875a81a
  1. 17
      org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ResetCommandTest.java
  2. 6
      org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java

17
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ResetCommandTest.java

@ -46,6 +46,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
@ -156,6 +157,22 @@ public class ResetCommandTest extends RepositoryTestCase {
assertReflog(prevHead, head);
}
@Test
public void testResetToNonexistingHEAD() throws JGitInternalException,
AmbiguousObjectException, IOException {
// create a file in the working tree of a fresh repo
git = new Git(db);
writeTrashFile("f", "content");
try {
git.reset().setRef(Constants.HEAD).call();
fail("Expected JGitInternalException didn't occur");
} catch (JGitInternalException e) {
// got the expected exception
}
}
@Test
public void testSoftReset() throws JGitInternalException,
AmbiguousObjectException, IOException, NoFilepatternException,

6
org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java

@ -151,6 +151,12 @@ public class ResetCommand extends GitCommand<Ref> {
final ObjectId commitId;
try {
commitId = repo.resolve(ref);
if (commitId == null) {
// @TODO throw an InvalidRefNameException. We can't do that
// now because this would break the API
throw new JGitInternalException("Invalid ref " + ref
+ " specified");
}
} catch (IOException e) {
throw new JGitInternalException(
MessageFormat.format(JGitText.get().cannotRead, ref),

Loading…
Cancel
Save