Permalink
Browse files

Introduce the RepositoryNotFoundException type

Fix #137
Partially fix #189
  • Loading branch information...
1 parent 61a7403 commit 9d09fe98081ac035a9dd4f3077158a800fd38727 @nulltoken nulltoken committed Aug 11, 2012
@@ -171,7 +171,7 @@ public void CanOpenRepository()
[Fact]
public void OpeningNonExistentRepoThrows()
{
- Assert.Throws<LibGit2SharpException>(() => { new Repository("a_bad_path"); });
+ Assert.Throws<RepositoryNotFoundException>(() => { new Repository("a_bad_path"); });
}
[Fact]
@@ -102,6 +102,7 @@
<Compile Include="IRepository.cs" />
<Compile Include="NoteCollection.cs" />
<Compile Include="Note.cs" />
+ <Compile Include="RepositoryNotFoundException.cs" />
<Compile Include="TreeChanges.cs" />
<Compile Include="TreeEntryChanges.cs" />
<Compile Include="LibGit2SharpException.cs" />
@@ -45,7 +45,15 @@ public Repository(string path, RepositoryOptions options = null)
{
Ensure.ArgumentNotNullOrEmptyString(path, "path");
- Ensure.Success(NativeMethods.git_repository_open(out handle, path));
+ int result = NativeMethods.git_repository_open(out handle, path);
+
+ if (result == (int)GitErrorCode.NotFound)
+ {
+ throw new RepositoryNotFoundException(string.Format(CultureInfo.InvariantCulture, "Path '{0}' doesn't point at a valid Git repository or workdir.", path));
+ }
+
+ Ensure.Success(result);
+
RegisterForCleanup(handle);
bool isBare = NativeMethods.RepositoryStateChecker(handle, NativeMethods.git_repository_is_bare);
@@ -0,0 +1,49 @@
+using System;
+using System.Runtime.Serialization;
+
+namespace LibGit2Sharp
+{
+ /// <summary>
+ /// The exception that is thrown when a <see cref="Repository"/> is being built with
+ /// a path that doesn't point at a valid Git repository or workdir.
+ /// </summary>
+ [Serializable]
+ public class RepositoryNotFoundException : LibGit2SharpException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "RepositoryNotFoundException" /> class.
+ /// </summary>
+ public RepositoryNotFoundException()
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "RepositoryNotFoundException" /> class with a specified error message.
+ /// </summary>
+ /// <param name = "message">A message that describes the error. </param>
+ public RepositoryNotFoundException(string message)
+ : base(message)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "RepositoryNotFoundException" /> class with a specified error message and a reference to the inner exception that is the cause of this exception.
+ /// </summary>
+ /// <param name = "message">The error message that explains the reason for the exception. </param>
+ /// <param name = "innerException">The exception that is the cause of the current exception. If the <paramref name = "innerException" /> parameter is not a null reference, the current exception is raised in a catch block that handles the inner exception.</param>
+ public RepositoryNotFoundException(string message, Exception innerException)
+ : base(message, innerException)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "RepositoryNotFoundException" /> class with a serialized data.
+ /// </summary>
+ /// <param name = "info">The <see cref="SerializationInfo "/> that holds the serialized object data about the exception being thrown.</param>
+ /// <param name = "context">The <see cref="StreamingContext"/> that contains contextual information about the source or destination.</param>
+ protected RepositoryNotFoundException(SerializationInfo info, StreamingContext context)
+ : base(info, context)
+ {
+ }
+ }
+}

0 comments on commit 9d09fe9

Please sign in to comment.