MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / applyDelta

Function applyDelta

packages/plugins/apps/src/git-client/packfile.ts:347–417  ·  view source on GitHub ↗
(
  base: Uint8Array,
  delta: Uint8Array,
  limits: Pick<ParsePackLimits, "maxDeltaResultBytes"> = DEFAULT_LIMITS,
)

Source from the content-addressed store, hash-verified

345}
346
347function applyDelta(
348 base: Uint8Array,
349 delta: Uint8Array,
350 limits: Pick<ParsePackLimits, "maxDeltaResultBytes"> = DEFAULT_LIMITS,
351): Uint8Array {
352 let p = 0;
353 const baseSize = readDeltaVarint(delta, p, "delta base size");
354 p = baseSize.pos;
355 if (baseSize.value !== base.length) {
356 throw new PackParseError("delta base size does not match base object");
357 }
358 const resSize = readDeltaVarint(delta, p, "delta result size");
359 p = resSize.pos;
360 if (resSize.value > limits.maxDeltaResultBytes) {
361 throw repositoryTooLarge(`delta result exceeds ${limits.maxDeltaResultBytes} bytes`);
362 }
363 const out = new Uint8Array(resSize.value);
364 let o = 0;
365 while (p < delta.length) {
366 const op = delta[p++];
367 if (op & 0x80) {
368 // copy from base
369 let cpOff = 0,
370 cpLen = 0;
371 if (op & 0x01) {
372 requireAvailable(delta, p, 1, "delta copy offset");
373 cpOff += delta[p++]!;
374 }
375 if (op & 0x02) {
376 requireAvailable(delta, p, 1, "delta copy offset");
377 cpOff += delta[p++]! * 256;
378 }
379 if (op & 0x04) {
380 requireAvailable(delta, p, 1, "delta copy offset");
381 cpOff += delta[p++]! * 65536;
382 }
383 if (op & 0x08) {
384 requireAvailable(delta, p, 1, "delta copy offset");
385 cpOff += delta[p++]! * 16777216;
386 }
387 if (op & 0x10) {
388 requireAvailable(delta, p, 1, "delta copy length");
389 cpLen += delta[p++]!;
390 }
391 if (op & 0x20) {
392 requireAvailable(delta, p, 1, "delta copy length");
393 cpLen += delta[p++]! * 256;
394 }
395 if (op & 0x40) {
396 requireAvailable(delta, p, 1, "delta copy length");
397 cpLen += delta[p++]! * 65536;
398 }
399 if (cpLen === 0) cpLen = 0x10000;
400 requireAvailable(base, cpOff, cpLen, "delta copy source");
401 requireAvailable(out, o, cpLen, "delta copy target");
402 out.set(base.subarray(cpOff, cpOff + cpLen), o);
403 o += cpLen;
404 } else if (op) {

Callers 1

parsePackFunction · 0.85

Calls 4

readDeltaVarintFunction · 0.85
repositoryTooLargeFunction · 0.85
requireAvailableFunction · 0.85
setMethod · 0.80

Tested by

no test coverage detected