@@ -182,10 +182,10 @@ public override int Read(ObjectId oid, out Stream data, out ObjectType objectTyp
182
182
183
183
objectType = gitObject . ObjectType ;
184
184
185
- return GIT_OK ;
185
+ return ( int ) ReturnCode . GIT_OK ;
186
186
}
187
187
188
- return GIT_ENOTFOUND ;
188
+ return ( int ) ReturnCode . GIT_ENOTFOUND ;
189
189
}
190
190
191
191
public override int ReadPrefix ( byte [ ] shortOid , int len , out byte [ ] oid , out Stream data , out ObjectType objectType )
@@ -228,7 +228,7 @@ public override int ReadPrefix(byte[] shortOid, int len, out byte[] oid, out Str
228
228
229
229
if ( null != gitObjectAlreadyFound )
230
230
{
231
- return GIT_EAMBIGUOUS ;
231
+ return ( int ) ReturnCode . GIT_EAMBIGUOUS ;
232
232
}
233
233
234
234
gitObjectAlreadyFound = gitObject ;
@@ -246,37 +246,47 @@ public override int ReadPrefix(byte[] shortOid, int len, out byte[] oid, out Str
246
246
data . Write ( chunk , 0 , chunk . Length ) ;
247
247
}
248
248
249
- return GIT_OK ;
249
+ return ( int ) ReturnCode . GIT_OK ;
250
250
}
251
251
252
- return GIT_ENOTFOUND ;
252
+ return ( int ) ReturnCode . GIT_ENOTFOUND ;
253
253
}
254
254
255
255
public override int Write ( ObjectId oid , Stream dataStream , long length , ObjectType objectType )
256
+ {
257
+ var buffer = ReadBuffer ( dataStream , length ) ;
258
+
259
+ m_objectIdToContent . Add ( oid ,
260
+ new MockGitObject ( oid , objectType , length , new List < byte [ ] > { buffer } ) ) ;
261
+
262
+ return ( int ) ReturnCode . GIT_OK ;
263
+ }
264
+
265
+ private static byte [ ] ReadBuffer ( Stream dataStream , long length )
256
266
{
257
267
if ( length > int . MaxValue )
258
268
{
259
- return GIT_ERROR ;
269
+ throw new InvalidOperationException (
270
+ string . Format ( "Provided length ({0}) exceeds int.MaxValue ({1})." , length , int . MaxValue ) ) ;
260
271
}
261
272
262
273
var buffer = new byte [ length ] ;
263
274
int bytesRead = dataStream . Read ( buffer , 0 , ( int ) length ) ;
264
275
265
276
if ( bytesRead != ( int ) length )
266
277
{
267
- return GIT_ERROR ;
278
+ throw new InvalidOperationException (
279
+ string . Format ( "Too short buffer. {0} bytes were expected. {1} have been successfully read." , length ,
280
+ bytesRead ) ) ;
268
281
}
269
-
270
- m_objectIdToContent . Add ( oid , new MockGitObject ( oid , objectType , length , new List < byte [ ] > { buffer } ) ) ;
271
-
272
- return GIT_OK ;
282
+ return buffer ;
273
283
}
274
284
275
285
public override int WriteStream ( long length , ObjectType objectType , out OdbBackendStream stream )
276
286
{
277
287
stream = new MockOdbBackendStream ( this , objectType , length ) ;
278
288
279
- return GIT_OK ;
289
+ return ( int ) ReturnCode . GIT_OK ;
280
290
}
281
291
282
292
public override bool Exists ( ObjectId oid )
@@ -287,11 +297,6 @@ public override bool Exists(ObjectId oid)
287
297
private readonly Dictionary < ObjectId , MockGitObject > m_objectIdToContent =
288
298
new Dictionary < ObjectId , MockGitObject > ( ) ;
289
299
290
- private const int GIT_OK = 0 ;
291
- private const int GIT_ERROR = - 1 ;
292
- private const int GIT_ENOTFOUND = - 3 ;
293
- private const int GIT_EAMBIGUOUS = - 5 ;
294
-
295
300
#region Unimplemented
296
301
297
302
public override int ReadHeader ( ObjectId oid , out int length , out ObjectType objectType )
@@ -311,7 +316,7 @@ public override int ForEach(ForEachCallback callback)
311
316
callback ( mockGitObject . Key ) ;
312
317
}
313
318
314
- return GIT_OK ;
319
+ return ( int ) ReturnCode . GIT_OK ;
315
320
}
316
321
317
322
#endregion
@@ -345,19 +350,11 @@ public override bool CanWrite
345
350
346
351
public override int Write ( Stream dataStream , long length )
347
352
{
348
- if ( length > Int32 . MaxValue )
349
- return GIT_ERROR ;
350
-
351
- var buffer = new byte [ length ] ;
352
-
353
- int bytesRead = dataStream . Read ( buffer , 0 , ( int ) length ) ;
354
-
355
- if ( bytesRead != ( int ) length )
356
- return GIT_ERROR ;
353
+ var buffer = ReadBuffer ( dataStream , length ) ;
357
354
358
355
m_chunks . Add ( buffer ) ;
359
356
360
- return GIT_OK ;
357
+ return ( int ) ReturnCode . GIT_OK ;
361
358
}
362
359
363
360
public override int FinalizeWrite ( ObjectId oid )
@@ -366,15 +363,16 @@ public override int FinalizeWrite(ObjectId oid)
366
363
367
364
if ( totalLength != m_length )
368
365
{
369
- return GIT_ERROR ;
366
+ throw new InvalidOperationException (
367
+ string . Format ( "Invalid final length. {0} was expected. The total size of the received chunks is {1}." , m_length , totalLength ) ) ;
370
368
}
371
369
372
370
var backend = ( MockOdbBackend ) Backend ;
373
371
374
372
backend . m_objectIdToContent . Add ( oid ,
375
373
new MockGitObject ( oid , m_type , m_length , m_chunks ) ) ;
376
374
377
- return GIT_OK ;
375
+ return ( int ) ReturnCode . GIT_OK ;
378
376
}
379
377
380
378
private readonly List < byte [ ] > m_chunks = new List < byte [ ] > ( ) ;
0 commit comments