({
fs: _fs,
dir,
gitdir = join(dir, '.git'),
oid,
format = 'parsed',
filepath = undefined,
encoding = undefined,
cache = {},
})
| 201 | * |
| 202 | */ |
| 203 | export async function readObject({ |
| 204 | fs: _fs, |
| 205 | dir, |
| 206 | gitdir = join(dir, '.git'), |
| 207 | oid, |
| 208 | format = 'parsed', |
| 209 | filepath = undefined, |
| 210 | encoding = undefined, |
| 211 | cache = {}, |
| 212 | }) { |
| 213 | try { |
| 214 | assertParameter('fs', _fs) |
| 215 | assertParameter('gitdir', gitdir) |
| 216 | assertParameter('oid', oid) |
| 217 | |
| 218 | const fs = new FileSystem(_fs) |
| 219 | const updatedGitdir = await discoverGitdir({ fsp: fs, dotgit: gitdir }) |
| 220 | if (filepath !== undefined) { |
| 221 | oid = await resolveFilepath({ |
| 222 | fs, |
| 223 | cache, |
| 224 | gitdir: updatedGitdir, |
| 225 | oid, |
| 226 | filepath, |
| 227 | }) |
| 228 | } |
| 229 | // GitObjectManager does not know how to parse content, so we tweak that parameter before passing it. |
| 230 | const _format = format === 'parsed' ? 'content' : format |
| 231 | const result = await _readObject({ |
| 232 | fs, |
| 233 | cache, |
| 234 | gitdir: updatedGitdir, |
| 235 | oid, |
| 236 | format: _format, |
| 237 | }) |
| 238 | result.oid = oid |
| 239 | if (format === 'parsed') { |
| 240 | result.format = 'parsed' |
| 241 | switch (result.type) { |
| 242 | case 'commit': |
| 243 | result.object = GitCommit.from(result.object).parse() |
| 244 | break |
| 245 | case 'tree': |
| 246 | result.object = GitTree.from(result.object).entries() |
| 247 | break |
| 248 | case 'blob': |
| 249 | // Here we consider returning a raw Buffer as the 'content' format |
| 250 | // and returning a string as the 'parsed' format |
| 251 | if (encoding) { |
| 252 | result.object = result.object.toString(encoding) |
| 253 | } else { |
| 254 | result.object = new Uint8Array(result.object) |
| 255 | result.format = 'content' |
| 256 | } |
| 257 | break |
| 258 | case 'tag': |
| 259 | result.object = GitAnnotatedTag.from(result.object).parse() |
| 260 | break |
searching dependent graphs…