read method

Implementation

Future<GitObjectResult> read(GitHash hash) async {
  var sha = hash.toString();
  var path =
      p.join(_gitDir, 'objects', sha.substring(0, 2), sha.substring(2));
  if (await _fs.isFile(path)) {
    return readObjectFromPath(path);
  }

  // Read all the index files
  var packDirPath = p.join(_gitDir, 'objects', 'pack');
  var stat = await _fs.stat(packDirPath);
  if (stat.changed != _packDirChanged || stat.modified != _packDirModified) {
    await _loadPackFiles(packDirPath);

    _packDirChanged = stat.changed;
    _packDirModified = stat.modified;
  }

  for (var packFile in _packFiles) {
    var obj = await packFile.object(hash);
    if (obj != null) {
      return GitObjectResult(obj);
    }
  }

  return GitObjectResult.fail(GitObjectNotFound(hash));
}