Skip to content

Commit 8edb888

Browse files
author
Jan Gassen
committed
Refactored last commit, so that GTTreeEntry is now assumed to own the respective git_tree_entry and is responsible for freeing it.
Therefore, the type of the field has been changed to git_tree_entry* (without the const). To easily create a GTTreeEntry from a managed const git_tree_entry*, a factory method exists to duplicate git_tree_entry and create a new GTTreeEntry
1 parent 5b9a285 commit 8edb888

File tree

8 files changed

+37
-56
lines changed

8 files changed

+37
-56
lines changed

ObjectiveGit/GTDiffPatch.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@
5050
/// Returns the raw size of the delta, in bytes.
5151
- (NSUInteger)sizeWithContext:(BOOL)includeContext hunkHeaders:(BOOL)includeHunkHeaders fileHeaders:(BOOL)includeFileHeaders;
5252

53-
/// Returns the raw patch data as buffer.
54-
- (NSData*)toBuffer;
53+
/// Returns the raw patch data.
54+
- (NSData*)patchData;
5555

5656
/// Enumerate the hunks contained in the patch.
5757
///

ObjectiveGit/GTDiffPatch.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ - (NSUInteger)sizeWithContext:(BOOL)includeContext hunkHeaders:(BOOL)includeHunk
5959
return git_patch_size(self.git_patch, includeContext, includeHunkHeaders, includeFileHeaders);
6060
}
6161

62-
- (NSData*)toBuffer {
62+
- (NSData*)patchData {
6363
git_buf buf = GIT_BUF_INIT_CONST(0, NULL);
6464
git_patch_to_buf(&buf, self.git_patch);
6565

ObjectiveGit/GTTree.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,12 @@ typedef NS_ENUM(NSInteger, GTTreeEnumerationOptions) {
6464
/// returns a GTTreeEntry or nil if there is nothing with the specified name
6565
- (GTTreeEntry *)entryWithName:(NSString *)name;
6666

67-
- (GTTreeEntry*) treeEntryByPath:(NSString*) path error:(NSError**)error;
67+
/// Get a entry by path
68+
///
69+
/// path - the path of the entry relative to the repository root
70+
///
71+
/// returns a GTTreeEntry or nil if there is nothing with the specified path
72+
- (GTTreeEntry*)entryWithPath:(NSString*)path error:(NSError**)error;
6873

6974
/// Enumerates the contents of the tree
7075
///

ObjectiveGit/GTTree.m

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,27 +56,27 @@ - (NSUInteger)entryCount {
5656
return (NSUInteger)git_tree_entrycount(self.git_tree);
5757
}
5858

59-
- (GTTreeEntry *)createEntryWithEntry:(const git_tree_entry *)entry {
60-
return (entry != NULL ? [GTTreeEntry entryWithEntry:entry parentTree:self] : nil);
59+
- (GTTreeEntry *)createEntryWithCopyOfEntry:(const git_tree_entry *)entry {
60+
return (entry != NULL ? [GTTreeEntry entryWithCopyOfEntry:entry parentTree:self error:nil] : nil);
6161
}
6262

6363
- (GTTreeEntry *)entryAtIndex:(NSUInteger)index {
64-
return [self createEntryWithEntry:git_tree_entry_byindex(self.git_tree, index)];
64+
return [self createEntryWithCopyOfEntry:git_tree_entry_byindex(self.git_tree, index)];
6565
}
6666

6767
- (GTTreeEntry *)entryWithName:(NSString *)name {
68-
return [self createEntryWithEntry:git_tree_entry_byname(self.git_tree, name.UTF8String)];
68+
return [self createEntryWithCopyOfEntry:git_tree_entry_byname(self.git_tree, name.UTF8String)];
6969
}
7070

71-
- (GTTreeEntry*) treeEntryByPath:(NSString*)path error:(NSError**)error {
71+
- (GTTreeEntry*)entryWithPath:(NSString*)path error:(NSError**)error {
7272
git_tree_entry *entry = NULL;
7373
int gitError = git_tree_entry_bypath(&entry, self.git_tree, path.UTF8String);
7474
if (error != GIT_OK) {
7575
*error = [NSError git_errorFor:gitError description:@"Failed to get tree ntry %@", path];
7676
return nil;
7777
}
7878

79-
return [GTTreeEntry entryWithEntryToFree:entry parentTree:self];
79+
return [GTTreeEntry entryWithEntry:entry parentTree:self];
8080
}
8181

8282
- (git_tree *)git_tree {
@@ -90,7 +90,7 @@ static int treewalk_cb(const char *root, const git_tree_entry *git_entry, void *
9090
NSString *rootString = @(root);
9191
GTTreeEntry *parentEntry = enumerationStruct->directoryStructure[rootString];
9292
GTTree *parentTree = parentEntry != nil ? parentEntry.tree : enumerationStruct->myself;
93-
GTTreeEntry *entry = [GTTreeEntry entryWithEntry:git_entry parentTree:parentTree];
93+
GTTreeEntry *entry = [GTTreeEntry entryWithCopyOfEntry:git_entry parentTree:parentTree error:nil];
9494

9595
if (entry.type == GTObjectTypeTree) {
9696
NSString *path = [rootString stringByAppendingPathComponent:entry.name];

ObjectiveGit/GTTreeBuilder.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ - (GTTreeEntry *)entryWithFileName:(NSString *)fileName {
110110
const git_tree_entry *entry = git_treebuilder_get(self.git_treebuilder, fileName.UTF8String);
111111
if (entry == NULL) return nil;
112112

113-
return [GTTreeEntry entryWithEntry:entry parentTree:nil];
113+
return [GTTreeEntry entryWithCopyOfEntry:entry parentTree:nil error:nil];
114114
}
115115

116116
- (GTTreeEntry *)addEntryWithData:(NSData *)data fileName:(NSString *)fileName fileMode:(GTFileMode)fileMode error:(NSError **)error {
@@ -139,7 +139,7 @@ - (GTTreeEntry *)addEntryWithOID:(GTOID *)oid fileName:(NSString *)fileName file
139139
return nil;
140140
}
141141

142-
return [GTTreeEntry entryWithEntry:entry parentTree:nil];
142+
return [GTTreeEntry entryWithCopyOfEntry:entry parentTree:nil error:nil];
143143
}
144144

145145
- (BOOL)removeEntryWithFileName:(NSString *)fileName error:(NSError **)error {

ObjectiveGit/GTTreeEntry.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,12 @@
3434
@interface GTTreeEntry : NSObject
3535

3636
/// Initializer and convience methods.
37-
- (instancetype)initWithEntry:(const git_tree_entry *)theEntry parentTree:(GTTree *)parent;
38-
- (instancetype)initWithEntryToFree:(git_tree_entry *)theEntry parentTree:(GTTree *)parent;
39-
+ (instancetype)entryWithEntry:(const git_tree_entry *)theEntry parentTree:(GTTree *)parent;
40-
+ (instancetype)entryWithEntryToFree:(git_tree_entry *)theEntry parentTree:(GTTree *)parent;
37+
- (instancetype)initWithEntry:(git_tree_entry *)theEntry parentTree:(GTTree *)parent;
38+
+ (instancetype)entryWithEntry:(git_tree_entry *)theEntry parentTree:(GTTree *)parent;
39+
+ (instancetype)entryWithCopyOfEntry:(const git_tree_entry *)theEntry parentTree:(GTTree *)parent error:(NSError**)error;
4140

4241
/// The underlying `git_tree_entry`.
43-
- (const git_tree_entry *)git_tree_entry __attribute__((objc_returns_inner_pointer));
42+
- (git_tree_entry *)git_tree_entry __attribute__((objc_returns_inner_pointer));
4443

4544
/// The entry's parent tree. This may be nil if nil is passed in to -initWithEntry:
4645
@property (nonatomic, strong, readonly) GTTree *tree;

ObjectiveGit/GTTreeEntry.m

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@
3838
#import "git2/errors.h"
3939

4040
@interface GTTreeEntry ()
41-
@property (nonatomic, assign, readonly) const git_tree_entry *git_tree_entry;
42-
@property (nonatomic, assign, readonly) git_tree_entry* entry_to_free;
41+
@property (nonatomic, assign, readonly) git_tree_entry *git_tree_entry;
4342
@end
4443

4544
@implementation GTTreeEntry
@@ -66,39 +65,35 @@ - (BOOL)isEqualToEntry:(GTTreeEntry *)treeEntry {
6665
}
6766

6867
- (void)dealloc {
69-
if (_entry_to_free != nil) {
70-
git_tree_entry_free(_entry_to_free);
71-
}
68+
git_tree_entry_free(_git_tree_entry);
7269
}
7370

7471
#pragma mark API
7572

76-
- (instancetype)initWithEntry:(const git_tree_entry *)theEntry parentTree:(GTTree *)parent {
73+
- (instancetype)initWithEntry:(git_tree_entry *)theEntry parentTree:(GTTree *)parent {
7774
NSParameterAssert(theEntry != NULL);
7875
if((self = [super init])) {
7976
_git_tree_entry = theEntry;
8077
_tree = parent;
81-
_entry_to_free = nil;
8278
}
8379
return self;
8480
}
8581

86-
- (instancetype)initWithEntryToFree:(git_tree_entry *)theEntry parentTree:(GTTree *)parent {
87-
NSParameterAssert(theEntry != NULL);
88-
if((self = [super init])) {
89-
_git_tree_entry = theEntry;
90-
_tree = parent;
91-
_entry_to_free = theEntry;
92-
}
93-
return self;
94-
}
95-
96-
+ (instancetype)entryWithEntry:(const git_tree_entry *)theEntry parentTree:(GTTree *)parent {
82+
+ (instancetype)entryWithEntry:(git_tree_entry *)theEntry parentTree:(GTTree *)parent {
9783
return [[self alloc] initWithEntry:theEntry parentTree:parent];
9884
}
9985

100-
+ (instancetype)entryWithEntryToFree:(git_tree_entry *)theEntry parentTree:(GTTree *)parent {
101-
return [[self alloc] initWithEntryToFree:theEntry parentTree:parent];
86+
+ (instancetype)entryWithCopyOfEntry:(const git_tree_entry *)theEntry parentTree:(GTTree *)parent error:(NSError**)error{
87+
NSParameterAssert(theEntry != NULL);
88+
git_tree_entry* copyOfEntry = nil;
89+
int gitError = git_tree_entry_dup(&copyOfEntry, theEntry);
90+
if (gitError != GIT_OK) {
91+
if (error != NULL) {
92+
*error = [NSError git_errorFor:gitError description:@"Failed to duplicate tree entry."];
93+
}
94+
return nil;
95+
}
96+
return [GTTreeEntry entryWithEntry:copyOfEntry parentTree:parent];
10297
}
10398

10499
- (NSString *)name {

ObjectiveGitFramework.xcodeproj/project.pbxproj

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,6 @@
412412
30DCBA7017B4791A009B0EBD /* NSArray+StringArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+StringArray.m"; sourceTree = "<group>"; };
413413
30FDC07D16835A8100654BF0 /* GTDiffLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTDiffLine.h; sourceTree = "<group>"; };
414414
30FDC07E16835A8100654BF0 /* GTDiffLine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTDiffLine.m; sourceTree = "<group>"; };
415-
3D6123BB1A643296008F831A /* libgit2.0.21.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgit2.0.21.2.dylib; path = ../../../../../usr/local/Cellar/libgit2/0.21.2/lib/libgit2.0.21.2.dylib; sourceTree = "<group>"; };
416415
4D103ADC1819CFAA0029DB24 /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; };
417416
4D12323F178E009E0048F785 /* GTRepositoryCommittingSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTRepositoryCommittingSpec.m; sourceTree = "<group>"; };
418417
4D1C40D7182C006D00BE2960 /* GTBlobSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTBlobSpec.m; sourceTree = "<group>"; };
@@ -621,7 +620,6 @@
621620
0867D691FE84028FC02AAC07 /* ObjectiveGitFramework */ = {
622621
isa = PBXGroup;
623622
children = (
624-
3D6123BB1A643296008F831A /* libgit2.0.21.2.dylib */,
625623
BDD8AB01130F01AB00CB5D40 /* README.md */,
626624
887B948D1A3A38130070D41D /* ObjectiveGit.modulemap */,
627625
BDE4C05E130EFE2C00851650 /* ObjectiveGit */,
@@ -1451,10 +1449,6 @@
14511449
DYLIB_CURRENT_VERSION = 1;
14521450
FRAMEWORK_VERSION = A;
14531451
INFOPLIST_FILE = Info.plist;
1454-
LIBRARY_SEARCH_PATHS = (
1455-
"$(inherited)",
1456-
/usr/local/Cellar/libgit2/0.21.2/lib,
1457-
);
14581452
MODULEMAP_FILE = ObjectiveGit.modulemap;
14591453
OTHER_LDFLAGS = (
14601454
"-lgit2",
@@ -1478,10 +1472,6 @@
14781472
DYLIB_CURRENT_VERSION = 1;
14791473
FRAMEWORK_VERSION = A;
14801474
INFOPLIST_FILE = Info.plist;
1481-
LIBRARY_SEARCH_PATHS = (
1482-
"$(inherited)",
1483-
/usr/local/Cellar/libgit2/0.21.2/lib,
1484-
);
14851475
MODULEMAP_FILE = ObjectiveGit.modulemap;
14861476
OTHER_LDFLAGS = (
14871477
"-lgit2",
@@ -1666,10 +1656,6 @@
16661656
DYLIB_CURRENT_VERSION = 1;
16671657
FRAMEWORK_VERSION = A;
16681658
INFOPLIST_FILE = Info.plist;
1669-
LIBRARY_SEARCH_PATHS = (
1670-
"$(inherited)",
1671-
/usr/local/Cellar/libgit2/0.21.2/lib,
1672-
);
16731659
MODULEMAP_FILE = ObjectiveGit.modulemap;
16741660
OTHER_LDFLAGS = (
16751661
"-lgit2",
@@ -1887,10 +1873,6 @@
18871873
DYLIB_CURRENT_VERSION = 1;
18881874
FRAMEWORK_VERSION = A;
18891875
INFOPLIST_FILE = Info.plist;
1890-
LIBRARY_SEARCH_PATHS = (
1891-
"$(inherited)",
1892-
/usr/local/Cellar/libgit2/0.21.2/lib,
1893-
);
18941876
MODULEMAP_FILE = ObjectiveGit.modulemap;
18951877
OTHER_LDFLAGS = (
18961878
"-lgit2",

0 commit comments

Comments
 (0)