8000 Get rid of DiffSafeHandle and PatchSafeHandle · vrkcse2011/libgit2sharp@1d5b5f5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1d5b5f5

Browse files
committed
Get rid of DiffSafeHandle and PatchSafeHandle
1 parent 57a9183 commit 1d5b5f5

12 files changed

+200
-90
lines changed

LibGit2Sharp/Core/Handles/DiffSafeHandle.cs

Lines changed: 0 additions & 11 deletions
This file was deleted.

LibGit2Sharp/Core/Handles/Objects.cs

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,4 +418,142 @@ public void Dispose()
418418
}
419419
}
420420

421+
internal unsafe class DiffHandle : IDisposable
422+
{
423+
git_diff* ptr;
424+
internal git_diff* Handle
425+
{
426+
get
427+
{
428+
return ptr;
429+
}
430+
}
431+
432+
bool owned;
433+
bool disposed;
434+
435+
public unsafe DiffHandle(git_diff* handle, bool owned)
436+
{
437+
this.ptr = handle;
438+
this.owned = owned;
439+
}
440+
441+
public unsafe DiffHandle(IntPtr ptr, bool owned)
442+
{
443+
this.ptr = (git_diff*) ptr.ToPointer();
444+
this.owned = owned;
445+
}
446+
447+
~DiffHandle()
448+
{
449+
Dispose(false);
450+
}
451+
452+
internal bool IsNull
453+
{
454+
get
455+
{
456+
return ptr == null;
457+
}
458+
}
459+
460+
internal IntPtr AsIntPtr()
461+
{
462+
return new IntPtr(ptr);
463+
}
464+
465+
void Dispose(bool disposing)
466+
{
467+
if (!disposed)
468+
{
469+
if (owned)
470+
{
471+
NativeMethods.git_diff_free(ptr);
472+
ptr = null;
473+
}
474+
}
475+
476+
disposed = true;
477+
}
478+
479+
public void Dispose()
480+
{
481+
Dispose(true);
482+
}
483+
484+
public static implicit operator git_diff*(DiffHandle handle)
485+
{
486+
return handle.Handle;
487+
}
488+
}
489+
490+
internal unsafe class PatchHandle : IDisposable
491+
{
492+
git_patch* ptr;
493+
internal git_patch* Handle
494+
{
495+
get
496+
{
497+
return ptr;
498+
}
499+
}
500+
501+
bool owned;
502+
bool disposed;
503+
504+
public unsafe PatchHandle(git_patch* handle, bool owned)
505+
{
506+
this.ptr = handle;
507+
this.owned = owned;
508+
}
509+
510+
public unsafe PatchHandle(IntPtr ptr, bool owned)
511+
{
512+
this.ptr = (git_patch*) ptr.ToPointer();
513+
this.owned = owned;
514+
}
515+
516+
~PatchHandle()
517+
{
518+
Dispose(false);
519+
}
520+
521+
internal bool IsNull
522+
{
523+
get
524+
{
525+
return ptr == null;
526+
}
527+
}
528+
529+
internal IntPtr AsIntPtr()
530+
{
531+
return new IntPtr(ptr);
532+
}
533+
534+
void Dispose(bool disposing)
535+
{
536+
if (!disposed)
537+
{
538+
if (owned)
539+
{
540+
NativeMethods.git_patch_free(ptr);
541+
ptr = null;
542+
}
543+
}
544+
545+
disposed = true;
546+
}
547+
548+
public void Dispose()
549+
{
550+
Dispose(true);
551+
}
552+
553+
public static implicit operator git_patch*(PatchHandle handle)
554+
{
555+
return handle.Handle;
556+
}
557+
}
558+
421559
}

LibGit2Sharp/Core/Handles/Objects.tt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ var cNames = new[] {
1818
"git_signature",
1919
"git_status_list",
2020
"git_blame",
21+
"git_diff",
22+
"git_patch",
2123
};
2224

2325
var csNames = new[] {
@@ -27,6 +29,8 @@ var csNames = new[] {
2729
"SignatureHandle",
2830
"StatusListHandle",
2931
"BlameHandle",
32+
"DiffHandle",
33+
"PatchHandle"
3034
};
3135

3236
for (var i = 0; i < cNames.Length; i++)

LibGit2Sharp/Core/Handles/PatchSafeHandle.cs

Lines changed: 0 additions & 11 deletions
This file was deleted.

LibGit2Sharp/Core/NativeMethods.cs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -475,39 +475,39 @@ internal static extern int git_describe_format(
475475
internal static extern void git_describe_result_free(IntPtr describe);
476476

477477
[DllImport(libgit2)]
478-
internal static extern void git_diff_free(IntPtr diff);
478+
internal static extern unsafe void git_diff_free(git_diff* diff);
479479

480480
[DllImport(libgit2)]
481481
internal static extern unsafe int git_diff_tree_to_tree(
482-
out DiffSafeHandle diff,
482+
out git_diff* diff,
483483
git_repository* repo,
484484
GitObjectSafeHandle oldTree,
485485
GitObjectSafeHandle newTree,
486486
GitDiffOptions options);
487487

488488
[DllImport(libgit2)]
489489
internal static extern unsafe int git_diff_tree_to_index(
490-
out DiffSafeHandle diff,
490+
out git_diff* diff,
491491
git_repository* repo,
492492
GitObjectSafeHandle oldTree,
493493
IndexSafeHandle index,
494494
GitDiffOptions options);
495495

496496
[DllImport(libgit2)]
497-
internal static extern int git_diff_merge(
498-
DiffSafeHandle onto,
499-
DiffSafeHandle from);
497+
internal static extern unsafe int git_diff_merge(
498+
git_diff* onto,
499+
git_diff* from);
500500

501501
[DllImport(libgit2)]
502502
internal static extern unsafe int git_diff_index_to_workdir(
503-
out DiffSafeHandle diff,
503+
out git_diff* diff,
504504
git_repository* repo,
505505
IndexSafeHandle index,
506506
GitDiffOptions options);
507507

508508
[DllImport(libgit2)]
509509
internal static extern unsafe int git_diff_tree_to_workdir(
510-
out DiffSafeHandle diff,
510+
out git_diff* diff,
511511
git_repository* repo,
512512
GitObjectSafeHandle oldTree,
513513
GitDiffOptions options);
@@ -547,24 +547,24 @@ internal static extern int git_diff_blobs(
547547
IntPtr payload);
548548

549549
[DllImport(libgit2)]
550-
internal static extern int git_diff_foreach(
551-
DiffSafeHandle diff,
550+
internal static extern unsafe int git_diff_foreach(
551+
git_diff* diff,
552552
git_diff_file_cb fileCallback,
553553
git_diff_binary_cb binaryCallback,
554554
git_diff_hunk_cb hunkCallback,
555555
git_diff_line_cb lineCallback,
556556
IntPtr payload);
557557

558558
[DllImport(libgit2)]
559-
internal static extern int git_diff_find_similar(
560-
DiffSafeHandle diff,
559+
internal static extern unsafe int git_diff_find_similar(
560+
git_diff* diff,
561561
GitDiffFindOptions options);
562562

563563
[DllImport(libgit2)]
564-
internal static extern UIntPtr git_diff_num_deltas(DiffSafeHandle diff);
564+
internal static extern unsafe UIntPtr git_diff_num_deltas(git_diff* diff);
565565

566566
[DllImport(libgit2)]
567-
internal static extern unsafe git_diff_delta* git_diff_get_delta(DiffSafeHandle diff, UIntPtr idx);
567+
internal static extern unsafe git_diff_delta* git_diff_get_delta(git_diff* diff, UIntPtr idx);
568568

569569
[DllImport(libgit2)]
570570
internal static extern int git_filter_register(
@@ -919,20 +919,20 @@ internal static extern int git_object_short_id(
919919
internal static extern GitObjectType git_object_type(GitObjectSafeHandle obj);
920920

921921
[DllImport(libgit2)]
922-
internal static extern int git_patch_from_diff(out PatchSafeHandle patch, DiffSafeHandle diff, UIntPtr idx);
922+
internal static extern unsafe int git_patch_from_diff(out git_patch* patch, git_diff* diff, UIntPtr idx);
923923

924924
[DllImport(libgit2)]
925-
internal static extern int git_patch_print(PatchSafeHandle patch, git_diff_line_cb print_cb, IntPtr payload);
925+
internal static extern unsafe int git_patch_print(git_patch* patch, git_diff_line_cb print_cb, IntPtr payload);
926926

927927
[DllImport(libgit2)]
928-
internal static extern int git_patch_line_stats(
928+
internal static extern unsafe int git_patch_line_stats(
929929
out UIntPtr total_context,
930930
out UIntPtr total_additions,
931931
out UIntPtr total_deletions,
932-
PatchSafeHandle patch);
932+
git_patch* patch);
933933

934934
[DllImport(libgit2)]
935-
internal static extern void git_patch_free(IntPtr patch);
935+
internal static extern unsafe void git_patch_free(git_patch* patch);
936936

937937
/* Push network progress notification function */
938938
internal delegate int git_push_transfer_progress(uint current, uint total, UIntPtr bytes, IntPtr payload);

LibGit2Sharp/Core/Opaques.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,7 @@ internal struct git_refspec {}
88
internal struct git_repository {}
99
internal struct git_status_list {}
1010
internal struct git_blame {}
11+
internal struct git_diff {}
12+
internal struct git_patch {}
1113
}
1214

0 commit comments

Comments
 (0)
0