HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/server/nodejs/v18.20.6/lib/node_modules/pm2/node_modules/js-git/test/test-pack-codec.js
var bodec = require('bodec');
var run = require('./run.js');
var decoders = require('../lib/object-codec.js').decoders;
var encoders = require('../lib/object-codec.js').encoders;

// The thing we mean to test.
var codec = require('../lib/pack-codec.js');

var pack = require('./sample-pack.js');
var items = [];
var newPack;

function unpackStream(stream) {
  var meta, out = [], finished = false;
  var write = codec.decodePack(onItem);
  for (var i = 0, l = stream.length; i < l; i += 128) {
    var slice = bodec.slice(stream, i, i + 128);
    try {
      // console.log("SLICE", slice);
      write(slice);
    }
    catch (err) {
      throw err;
    }
  }
  write();

  function onItem(item) {
    // console.log("UNPACK", item);
    if (item === undefined) {
      finished = true;
    }
    else if (!meta) {
      meta = item;
    }
    else {
      out.push(item);
    }
  }
  if (!finished) throw new Error("unpack stream didn't finish");
  if (out.length !== meta.num) throw new Error("Item num mismatch");
  return out;
}


run([
  function testDecodePack() {
    var counts = {};
    items = unpackStream(pack).map(function (item) {
      counts[item.type] = counts[item.type] || 0;
      counts[item.type]++;
      if (item.type === "tree" || item.type === "tag" || item.type === "commit") {
        item.body = decoders[item.type](item.body);
      }
      return item;
    });
    if (counts.commit !== 6) throw new Error("Wrong number of commits parsed");
    if (counts.tree !== 4) throw new Error("Wrong number of trees parsed");
    if (counts.blob !== 4) throw new Error("Wrong number of blobs parsed");
    if (counts['ofs-delta'] !== 2) throw new Error("Wrong number of offset deltas parsed");
  },
  function testEncodePack() {
    var done = false;
    var outs = [];

    var write = codec.encodePack(function (item) {
      if (item === undefined) {
        done = true;
        return;
      }
      if (!bodec.isBinary(item)) throw new Error("encode output must be buffers");
      outs.push(item);
    });
    write({num:items.length});
    items.forEach(function (item) {
      if (!bodec.isBinary(item.body)) {
        item.body = encoders[item.type](item.body);
        }
      write(item);
    });
    write();

    if (!done) throw new Error("Output stream never ended");

    newPack = bodec.join(outs);
  },
  function verifyEncodePack() {
    try {
      unpackStream(newPack);
      if (bodec.toHex(pack) !== bodec.toHex(newPack)) {
        throw new Error("Final pack doesn't match original.");
      }
    }
    catch (err) {
      console.log(bodec.toHex(pack));
      console.log(bodec.toHex(newPack));
      throw err;
    }
  }
]);