Skip to content

Commit 5b9a285

Browse files
author
Jan Gassen
committed
Added git_tree_entry_bypath method wrapper to GTTree
1 parent 3337fbd commit 5b9a285

File tree

4 files changed

+37
-0
lines changed

4 files changed

+37
-0
lines changed

ObjectiveGit/GTTree.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ 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;
68+
6769
/// Enumerates the contents of the tree
6870
///
6971
/// options - One of `GTTreeEnumerationOptionPre` (for pre-order walks) or

ObjectiveGit/GTTree.m

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,17 @@ - (GTTreeEntry *)entryWithName:(NSString *)name {
6868
return [self createEntryWithEntry:git_tree_entry_byname(self.git_tree, name.UTF8String)];
6969
}
7070

71+
- (GTTreeEntry*) treeEntryByPath:(NSString*)path error:(NSError**)error {
72+
git_tree_entry *entry = NULL;
73+
int gitError = git_tree_entry_bypath(&entry, self.git_tree, path.UTF8String);
74+
if (error != GIT_OK) {
75+
*error = [NSError git_errorFor:gitError description:@"Failed to get tree ntry %@", path];
76+
return nil;
77+
}
78+
79+
return [GTTreeEntry entryWithEntryToFree:entry parentTree:self];
80+
}
81+
7182
- (git_tree *)git_tree {
7283
return (git_tree *)self.git_object;
7384
}

ObjectiveGit/GTTreeEntry.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@
3535

3636
/// Initializer and convience methods.
3737
- (instancetype)initWithEntry:(const git_tree_entry *)theEntry parentTree:(GTTree *)parent;
38+
- (instancetype)initWithEntryToFree:(git_tree_entry *)theEntry parentTree:(GTTree *)parent;
3839
+ (instancetype)entryWithEntry:(const git_tree_entry *)theEntry parentTree:(GTTree *)parent;
40+
+ (instancetype)entryWithEntryToFree:(git_tree_entry *)theEntry parentTree:(GTTree *)parent;
3941

4042
/// The underlying `git_tree_entry`.
4143
- (const git_tree_entry *)git_tree_entry __attribute__((objc_returns_inner_pointer));

ObjectiveGit/GTTreeEntry.m

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939

4040
@interface GTTreeEntry ()
4141
@property (nonatomic, assign, readonly) const git_tree_entry *git_tree_entry;
42+
@property (nonatomic, assign, readonly) git_tree_entry* entry_to_free;
4243
@end
4344

4445
@implementation GTTreeEntry
@@ -64,13 +65,30 @@ - (BOOL)isEqualToEntry:(GTTreeEntry *)treeEntry {
6465
return git_tree_entry_cmp(self.git_tree_entry, treeEntry.git_tree_entry) == 0 ? YES : NO;
6566
}
6667

68+
- (void)dealloc {
69+
if (_entry_to_free != nil) {
70+
git_tree_entry_free(_entry_to_free);
71+
}
72+
}
73+
6774
#pragma mark API
6875

6976
- (instancetype)initWithEntry:(const git_tree_entry *)theEntry parentTree:(GTTree *)parent {
7077
NSParameterAssert(theEntry != NULL);
7178
if((self = [super init])) {
7279
_git_tree_entry = theEntry;
7380
_tree = parent;
81+
_entry_to_free = nil;
82+
}
83+
return self;
84+
}
85+
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;
7492
}
7593
return self;
7694
}
@@ -79,6 +97,10 @@ + (instancetype)entryWithEntry:(const git_tree_entry *)theEntry parentTree:(GTTr
7997
return [[self alloc] initWithEntry:theEntry parentTree:parent];
8098
}
8199

100+
+ (instancetype)entryWithEntryToFree:(git_tree_entry *)theEntry parentTree:(GTTree *)parent {
101+
return [[self alloc] initWithEntryToFree:theEntry parentTree:parent];
102+
}
103+
82104
- (NSString *)name {
83105
return @(git_tree_entry_name(self.git_tree_entry));
84106
}

0 commit comments

Comments
 (0)