4141@interface GTTreeBuilder ()
4242
4343@property (nonatomic , assign , readonly ) git_treebuilder *git_treebuilder;
44+ @property (nonatomic , strong , readonly ) GTRepository *repository;
4445
4546// Data to be written with the tree, keyed by the file name. This should only be
4647// accessed while synchronized on self.
@@ -61,16 +62,19 @@ - (NSUInteger)entryCount {
6162
6263#pragma mark Lifecycle
6364
64- - (id )initWithTree : (GTTree *)treeOrNil error : (NSError **)error {
65+ - (id )initWithTree : (GTTree *)treeOrNil repository : (GTRepository *)repository error : (NSError **)error {
66+ NSParameterAssert (repository != nil );
67+
6568 self = [super init ];
6669 if (self == nil ) return nil ;
6770
68- int status = git_treebuilder_create (&_git_treebuilder, treeOrNil.git_tree );
71+ int status = git_treebuilder_create (&_git_treebuilder, repository. git_repository , treeOrNil.git_tree );
6972 if (status != GIT_OK) {
7073 if (error != NULL ) *error = [NSError git_errorFor: status description: @" Failed to create tree builder with tree %@ ." , treeOrNil.SHA];
7174 return nil ;
7275 }
7376
77+ _repository = repository;
7478 _fileNameToPendingData = [NSMutableDictionary dictionary ];
7579
7680 return self;
@@ -86,7 +90,7 @@ - (void)dealloc {
8690#pragma mark Modification
8791
8892- (void )clear {
89- git_treebuilder_clear (self.git_treebuilder );
93+ git_treebuilder_clear (self.git_treebuilder );
9094}
9195
9296static int filter_callback (const git_tree_entry *entry, void *payload) {
@@ -105,7 +109,7 @@ - (GTTreeEntry *)entryWithFileName:(NSString *)fileName {
105109
106110 const git_tree_entry *entry = git_treebuilder_get (self.git_treebuilder , fileName.UTF8String );
107111 if (entry == NULL ) return nil ;
108-
112+
109113 return [GTTreeEntry entryWithEntry: entry parentTree: nil ];
110114}
111115
@@ -129,12 +133,12 @@ - (GTTreeEntry *)addEntryWithOID:(GTOID *)oid fileName:(NSString *)fileName file
129133
130134 const git_tree_entry *entry = NULL ;
131135 int status = git_treebuilder_insert (&entry, self.git_treebuilder , fileName.UTF8String , oid.git_oid , (git_filemode_t )fileMode);
132-
136+
133137 if (status != GIT_OK) {
134138 if (error != NULL ) *error = [NSError git_errorFor: status description: @" Failed to add entry %@ to tree builder." , oid.SHA];
135139 return nil ;
136140 }
137-
141+
138142 return [GTTreeEntry entryWithEntry: entry parentTree: nil ];
139143}
140144
@@ -147,19 +151,19 @@ - (BOOL)removeEntryWithFileName:(NSString *)fileName error:(NSError **)error {
147151 @synchronized (self) {
148152 [self .fileNameToPendingData removeObjectForKey: fileName];
149153 }
150-
154+
151155 return status == GIT_OK;
152156}
153157
154- - (BOOL )writePendingDataToRepository : (GTRepository *) repository error : (NSError **)error {
158+ - (BOOL )writePendingData : (NSError **)error {
155159 NSDictionary *copied;
156160 @synchronized (self) {
157161 copied = [self .fileNameToPendingData copy ];
158162 [self .fileNameToPendingData removeAllObjects ];
159163 }
160164
161165 if (copied.count != 0 ) {
162- GTObjectDatabase *odb = [repository objectDatabaseWithError: error];
166+ GTObjectDatabase *odb = [self . repository objectDatabaseWithError: error];
163167 if (odb == nil ) return NO ;
164168
165169 for (NSString *fileName in copied) {
@@ -172,25 +176,25 @@ - (BOOL)writePendingDataToRepository:(GTRepository *)repository error:(NSError *
172176 return YES ;
173177}
174178
175- - (GTTree *)writeTreeToRepository : (GTRepository *) repository error : (NSError **)error {
176- BOOL success = [self writePendingDataToRepository: repository error : error];
179+ - (GTTree *)writeTree : (NSError **)error {
180+ BOOL success = [self writePendingData : error];
177181 if (!success) return nil ;
178182
179183 git_oid treeOid;
180- int status = git_treebuilder_write (&treeOid, repository. git_repository , self.git_treebuilder );
184+ int status = git_treebuilder_write (&treeOid, self.git_treebuilder );
181185 if (status != GIT_OK) {
182186 if (error != NULL ) *error = [NSError git_errorFor: status description: @" Failed to write tree in repository." ];
183187 return nil ;
184188 }
185-
189+
186190 git_object *object = NULL ;
187- status = git_object_lookup (&object, repository.git_repository , &treeOid, GIT_OBJ_TREE);
191+ status = git_object_lookup (&object, self. repository .git_repository , &treeOid, GIT_OBJ_TREE);
188192 if (status != GIT_OK) {
189193 if (error != NULL ) *error = [NSError git_errorFor: status description: @" Failed to lookup tree in repository." ];
190194 return nil ;
191195 }
192-
193- return [GTObject objectWithObj: object inRepository: repository];
196+
197+ return [GTObject objectWithObj: object inRepository: self . repository];
194198}
195199
196200@end
0 commit comments