diff --git a/package.json b/package.json index f762f4c..a321f99 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "git-essentials", "version": "0.0.0-development", "description": "A collection of essential Git commands for your browser and Node.js", + "type": "module", "main": "dist/esm/index.js", "types": "index.d.ts", "typesVersions": { diff --git a/scripts/fix-build.js b/scripts/fix-build.js index d170ee6..c53dbbb 100644 --- a/scripts/fix-build.js +++ b/scripts/fix-build.js @@ -1,6 +1,5 @@ -const path = require('path') -const fs = require('fs') - +import fs from 'fs' +import path from 'path' // Delete empty TypeScript declarations deleteEmptyTypeScriptDeclarations('dist/types') diff --git a/src/api/log.ts b/src/api/log.ts index 22bcdae..81acc1d 100644 --- a/src/api/log.ts +++ b/src/api/log.ts @@ -1,11 +1,10 @@ -import { _log } from '../commands/log' +import { Cache } from '../models/Cache' import { FileSystem } from '../models/FileSystem' import { FsClient } from '../models/FsClient' -import { Cache } from '../models/Cache' +import { ReadCommitResult } from '../api/readCommit' +import { _log } from '../commands/log' import { assertParameter } from '../utils/assertParameter' import { join } from '../utils/join' -import { ReadCommitResult } from '../api/readCommit' - export type LogParams = { /** A file system client. */ @@ -26,6 +25,15 @@ export type LogParams = { /** Return history newer than the given date. Can be combined with `depth` to get whichever is shorter. */ since?: Date + /** Get the commit for the filepath only. */ + filepath?: string + + /** Do not throw error if filepath does not exist (works only for a single file, default: `false`). */ + force?: boolean + + /** Continue listing the history of a file beyond renames (works only for a single file, default: `false`). */ + follow?: boolean + /** A cache object. */ cache?: Cache } @@ -55,6 +63,9 @@ export async function log({ ref = 'HEAD', depth, since, // Date + filepath, + force = false, + follow = false, cache = {}, }: LogParams): Promise> { try { @@ -69,6 +80,9 @@ export async function log({ ref, depth, since, + filepath, + force, + follow }) } catch (err: any) { err.caller = 'git.log' diff --git a/src/commands/log.ts b/src/commands/log.ts index c1f2f5c..65024d9 100644 --- a/src/commands/log.ts +++ b/src/commands/log.ts @@ -1,9 +1,13 @@ -import { FileSystem } from '../models/FileSystem' -import { Cache } from '../models/Cache' import { ReadCommitResult, _readCommit } from '../commands/readCommit' + +import { Cache } from '../models/Cache' +import { FileSystem } from '../models/FileSystem' import { GitRefManager } from '../managers/GitRefManager' import { GitShallowManager } from '../managers/GitShallowManager' +import { NotFoundError } from '../errors' import { compareAge } from '../utils/compareAge' +import { resolveFileIdInTree } from '../utils/resolveFileIdInTree' +import { resolveFilepath } from '../utils/resolveFilepath' type LogParams = { fs: FileSystem @@ -12,6 +16,9 @@ type LogParams = { ref: string depth?: number since?: Date + filepath?: string + force?: boolean, + follow?: boolean, } /** @@ -19,17 +26,34 @@ type LogParams = { * * @internal */ -export async function _log({ fs, cache, gitdir, ref, depth, since }: LogParams): Promise> { +export async function _log({ + fs, + cache, + gitdir, + ref, + depth, + since, + filepath, + force, + follow +}: LogParams): Promise> { const sinceTimestamp = typeof since === 'undefined' ? undefined : Math.floor(since.valueOf() / 1000) // TODO: In the future, we may want to have an API where we return a // async iterator that emits commits. - const commits = [] + const commits: ReadCommitResult[] = [] const shallowCommits = await GitShallowManager.read({ fs, gitdir }) const oid = await GitRefManager.resolve({ fs, gitdir, ref }) const tips = [await _readCommit({ fs, cache, gitdir, oid })] + let lastFileOid: string | undefined = undefined + let lastCommit: ReadCommitResult | undefined = undefined + let isOk: boolean | undefined = undefined + + function endCommit(commit: ReadCommitResult) { + if (isOk && filepath) commits.push(commit) + } while (tips.length > 0) { const commit = tips.pop()! @@ -42,10 +66,82 @@ export async function _log({ fs, cache, gitdir, ref, depth, since }: LogParams): break } - commits.push(commit) + if (filepath) { + let vFileOid + try { + vFileOid = await resolveFilepath({ + fs, + cache, + gitdir, + oid: commit.commit.tree!, + filepath, + }) + if (lastCommit && lastFileOid !== vFileOid) { + commits.push(lastCommit) + } + lastFileOid = vFileOid + lastCommit = commit + isOk = true + } catch (e) { + if (e instanceof NotFoundError) { + let found: string | string[] | boolean | undefined = follow && lastFileOid + if (found) { + found = await resolveFileIdInTree({ + fs, + cache, + gitdir, + oid: commit.commit.tree!, + fileId: lastFileOid!, + }) + if (found) { + if (Array.isArray(found)) { + if (lastCommit) { + const lastFound = await resolveFileIdInTree({ + fs, + cache, + gitdir, + oid: lastCommit.commit.tree!, + fileId: lastFileOid!, + }) + if (Array.isArray(lastFound)) { + found = found.filter(p => lastFound.indexOf(p) === -1) + if (found.length === 1) { + found = found[0] + filepath = found + if (lastCommit) commits.push(lastCommit) + } else { + found = false + if (lastCommit) commits.push(lastCommit) + break + } + } + } + } else { + filepath = found + if (lastCommit) commits.push(lastCommit) + } + } + } + if (!found) { + if (isOk && lastFileOid) { + commits.push(lastCommit!) + if (!force) break + } + if (!force && !follow) throw e + } + lastCommit = commit + isOk = false + } else throw e + } + } else { + commits.push(commit) + } // Stop the loop if we have enough commits now. - if (depth !== undefined && commits.length === depth) break + if (depth !== undefined && commits.length === depth) { + endCommit(commit) + break + } // If this is not a shallow commit... if (!shallowCommits.has(commit.oid)) { @@ -60,10 +156,13 @@ export async function _log({ fs, cache, gitdir, ref, depth, since }: LogParams): } // Stop the loop if there are no more commit parents - if (tips.length === 0) break + if (tips.length === 0) { + endCommit(commit) + } // Process tips in order by age tips.sort((a, b) => compareAge(a.commit, b.commit)) } + return commits } diff --git a/src/utils/resolveFileIdInTree.ts b/src/utils/resolveFileIdInTree.ts new file mode 100644 index 0000000..eb97b6d --- /dev/null +++ b/src/utils/resolveFileIdInTree.ts @@ -0,0 +1,106 @@ +import { Cache } from '../models/Cache' +import { FileSystem } from '../models/FileSystem' +import { GitTree } from '../models/GitTree' +import { join } from './join' +import { _readObject as readObject } from '../storage/readObject' +import { resolveTree } from './resolveTree' + +// the empty file content object id + const EMPTY_OID = 'e69de29bb2d1d6434b8b29ae775ad8c2e48c5391' + +type ResolveFileIdInTreeParams = { + fs: FileSystem + cache: Cache + gitdir: string + oid: string + fileId: string +} + +type ResolveFileIdParams = { + fs: FileSystem + cache: Cache + gitdir: string + tree: GitTree + fileId: string + oid: string + filepaths?: string[] + parentPath?: string +} + + export async function resolveFileIdInTree({ + fs, + cache, + gitdir, + oid, + fileId +}: ResolveFileIdInTreeParams): Promise { + if (fileId === EMPTY_OID) { + return + } + + const _oid = oid + const result = await resolveTree({ fs, cache, gitdir, oid }) + const tree = result.tree + + if (fileId === result.oid && 'path' in result) { + return (result as any).path + } else { + const filepaths = await _resolveFileId({ + fs, + cache, + gitdir, + tree, + fileId, + oid: _oid, + }) + + if (filepaths.length === 0) { + return undefined + } else if (filepaths.length === 1) { + return filepaths[0] + } else { + return filepaths + } + } + } + + async function _resolveFileId({ + fs, + cache, + gitdir, + tree, + fileId, + oid, + filepaths = [], + parentPath = '', + }: ResolveFileIdParams): Promise { + const walks = tree.entries().map(function(entry) { + let result: string | Promise | undefined = undefined + if (entry.oid === fileId) { + result = join(parentPath, entry.path) + filepaths.push(result) + } else if (entry.type === 'tree') { + result = readObject({ + fs, + cache, + gitdir, + oid: entry.oid, + }).then(function({ object }) { + return _resolveFileId({ + fs, + cache, + gitdir, + tree: GitTree.from(object), + fileId, + oid, + filepaths, + parentPath: join(parentPath, entry.path), + }) + }) + } + return result + }) + + await Promise.all(walks) + return filepaths + } diff --git a/src/utils/resolveFilepath.ts b/src/utils/resolveFilepath.ts index b1927dd..ad4d81f 100644 --- a/src/utils/resolveFilepath.ts +++ b/src/utils/resolveFilepath.ts @@ -1,9 +1,9 @@ -import { FileSystem } from '../models/FileSystem' import { Cache } from '../models' +import { FileSystem } from '../models/FileSystem' +import { GitTree } from '../models/GitTree' import { InvalidFilepathError } from '../errors/InvalidFilepathError' import { NotFoundError } from '../errors/NotFoundError' import { ObjectTypeError } from '../errors/ObjectTypeError' -import { GitTree } from '../models/GitTree' import { _readObject as readObject } from '../storage/readObject' import { resolveTree } from '../utils/resolveTree' diff --git a/src/utils/resolveTree.ts b/src/utils/resolveTree.ts index dd9e905..8674203 100644 --- a/src/utils/resolveTree.ts +++ b/src/utils/resolveTree.ts @@ -1,12 +1,11 @@ -import { FileSystem } from '../models/FileSystem' import { Cache } from '../models/Cache' -import { ObjectTypeError } from '../errors' +import { FileSystem } from '../models/FileSystem' import { GitAnnotatedTag } from '../models/GitAnnotatedTag' import { GitCommit } from '../models/GitCommit' import { GitTree } from '../models/GitTree' +import { ObjectTypeError } from '../errors' import { _readObject } from '../storage/readObject' - /** @internal */ export async function resolveTree( { fs, cache, gitdir, oid }: diff --git a/tests/fixtures/fs/log-file.json b/tests/fixtures/fs/log-file.json new file mode 100644 index 0000000..c708d74 --- /dev/null +++ b/tests/fixtures/fs/log-file.json @@ -0,0 +1,992 @@ +[ + { + "name": ".git", + "type": "dir", + "children": [ + { + "name": "info", + "type": "dir", + "children": [ + { + "name": "exclude", + "type": "file", + "encoding": "utf8", + "content": "# git ls-files --others --exclude-from=.git/info/exclude\n# Lines that start with '#' are comments.\n# For a project mostly in C, the following would be a good set of\n# exclude patterns (uncomment them if you want to use them):\n# *.[oa]\n# *~\n" + } + ] + }, + { + "name": "objects", + "type": "dir", + "children": [ + { + "name": "01", + "type": "dir", + "children": [ + { + "name": "cd249eaaceb8572bee5b24d8ed728c95f61bd6", + "type": "file", + "encoding": "base64", + "content": "eAGdlMmuq1YQRTPmK87cyjU9WMqLgumvbboDppnRN6YzPmDg6+Pk6c0ySkl7sqQqlWprVzp0XY0AgfPcb2jKc8DHGcEzDJtx7ImM84LkqZxLCwqPSZ5LWJzAU4olYxob4ynvESAZnqZxnCHIj3I2TXCuyGKmKLicz7L8M6lIKYKksXhG1TABp07zJG5bcJVl8MerH97b/NXm+V9lF9ftVzp0fwKCOVEMgdMECw44j+PYh362RPn/bC/H8lWX4Pd/6iyrugEs1QJQVw3B9Rz5X44BDNS2vp8F4SyWQqbUspx1oiBI7gWGzmpUx162lLzSvdeslorQcpxYCYJYPuxfHAOz2hynVRDQXSKu0LjRZbFptn3m1aNMf/vdc3Bb87sVyddhj5z95pUXy3rqCNEjrSi3FwZo9YWk7l6p94sxRo342CMvYAxSQx1r7b6UNUhn0GFrielaiA5H3e2LcNxR5rnkm0AlBpr8bYVOhU73yaLZ21Nck94bM8TsYfWq1Jg62iff2Qhiih9LMyXKCZ6ai3V41sYGiYDEAHVVN8mwW8gFWwc9ZactWJt3Vx4fcDBn9cZavVntXWaU7fHbCsnlLipp3piHp/QkLwcM4HJy1VghwSdOrhU7mAsTOnjH1hQM+qJk2QNCtc+YbUduhYtrOFO0i+aNJyrOhSEsMPA0lx46TB/QzW7H1007L9BvB2QUQnmF5fUetR4cYBU2TnekvVmBVdQzNLs95IhY3AgD081jLGOZ+fFZiXKfa33L+fK8Tu2KCHx5o881vbiNvag0LsGgh5Kvw/Fe7Jkpz+ZMYWA1Yo1Q39GsykiNEult7q/MfXyLjOk6+yNhUhwqx3crerHPTr6PfxNperQCKqnpfH5rGHAzL+cX/OKSTUByjNKM+yLa9ZrNt+l2ajt2eZsh9Mf2wQrzYWEGRC6xOiTk8GCym25hQKjJYRhdnqvyWTzWVnolpYsMCVdHdZA4SxjObHOmPi5LZGp7yhqU4ebOQg+pGfbVioE3f5Lb3mSeaKLIMmIOLH6qhkwp+X1aI38N1tFIda1wy4rgnlo0W+UPDPyoYYmwn5mRDem/EoPFWQY+TyDu8q8uw/4G3NlcxA==" + } + ] + }, + { + "name": "02", + "type": "dir", + "children": [ + { + "name": "a0734b6917f76b63038bdaada540063d8dad7f", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjA0ZlBWVijK1ctN4SotMOQCAD92BZI=" + } + ] + }, + { + "name": "04", + "type": "dir", + "children": [ + { + "name": "833cdb10e0f8fa81800cafa98e1381a1c6c58e", + "type": "file", + "encoding": "base64", + "content": "eAGdjksOAiEQRF1zCi6goWl+kxjjVaBp4kQZJsjE68vGC7ireknlFbVa1yE1wml0ZokIBY0ujpeEgYxl8BAWtwCgoWSi17NmLfbYeRsyUwKyhR2RDuy99WQSmexzKjYpB4SByQQRj/FoXcYen1t8D3n9pfve22hbjevrQq3eJDiLU+iUlWfllRKTzo+D/1uLY89xsNz4U9YXiy/auksW" + } + ] + }, + { + "name": "18", + "type": "dir", + "children": [ + { + "name": "f202dfed5cb66a295dc57f1f4ba1b7f6b74f36", + "type": "file", + "encoding": "base64", + "content": "eAGdVFnPo1YM7TO/4r6jGfZN6lQFQoCQsCeB7w24lyW5IQk7/PpJO+1bn3pkydaxbFmWj4vn49EMgGFo+rehQwiwUC5KRuFZmPGCJGUZV7K0wNBywbIyYjJFyDlO4WnilXWoHUAhZeIHtFRARRYRQows5Rws2YLPICq5XEKCWCg8kY1D/exA2BQozzAGR8MAv/ftc17H7xihP6tH1uDvxfPxB2AEhf+YLPCApGWaJj7sZ8oB/c/y6lX1TQW+/QXNMG0X+KYPItt01fgcGn/zBCBAE9ibpqqaXqlw3xgGfOiquoudKA0Xt6Zaw9+j2j73o1ntVSwfcZOqenUP/uUJ8MmY06fFyq9J6zDwddoheuHL7Vq4T6UTvLaizntfc+UrzGjv1EyPSgrz+rFnvg7LHBHgQNpjFF3WsW335vvgG+J9T+rQxfpFpzwsHQ8XtkvthgxJQ7scb2cSXZlGxFGobwfsDwTo5vXaH7fJvV57VY5kuYXWaXKLTnFxE6FXD5N+T8M8v3WjkFnFoOjdtCk5zpW3fO1cAqwFax0HQ4px4+tL6WrvTbDZ7JjO5a0wghy2pzQJyh4dNJt5QPq9ja9USJ17GqtkOpYEYFaj8A2vV3W3izKsx+bzeapKR9M/t2Rp7fmCcrWE7zMKxcS6YbG8WHHYnxwj7rUAWQSobWt0SejcYMJs05bkb86OhiSe4qPaOkIpDFAWxX043ccxvjec1lzTN6WWr7moX47z2UPEWfev1q+DZPK0aE1nWyw3EqOv6XXYvUjrZu4aN9dIS2w8ptsV0nCJN9O5tE3YJxfnQADqSHl3n9aE10AaODI7HHDy6S6MLr0MbW76pq7SEh9X3Up1umwKhrwoGfOV956AA6YiwHXczfG4bj7OxXLpisH0NVtadyRcFmqxw1tyP4XnJ2fORRBtsXrE5CJy0eJhXi2nR0AAa61Z6tmXh1pOz1CUgl0UeCk9ZFXyhF+1GvPpvUzqN6otTwuYqODNL1uYY0pqW9qNVwLovnCD0ahSs2pnBTWZdiArusTckYqdU4WMS7fzatG3o7P54t/yvMo/CPAD4j1P/NKM4e7+SzHE5wFkDwR+ORYMz3/CbyzxEyIsX2s=" + } + ] + }, + { + "name": "1b", + "type": "dir", + "children": [ + { + "name": "c226bc219beea3fb177de96350d8ad2f4c57cd", + "type": "file", + "encoding": "base64", + "content": "eAGdlEnTskYAhHPmV8zdyif7QFW+VEZZ5FWQVdTbwLApuwOCvz5vksotp/TxqeqqPnR32jVNRQHHKsovdMwyAHEiqSQXkpxwPJ/lEuHFFLK5mioqhDkrJIKUQZ5lejxmLQVpqiZpDgVRVNhEFAmfKYqIMyhhjlNYKRP5VBUUojB4omU3Ar9KswTXNTjpOvjt1XbvdfpRZ9kfRYOr+kfaNb8DTlIFiWNlKIINq7As802/U9Lsf9qLvnhVBfj1L+1003KAa7ogsEwHhZGv/80ZwIDKsz47hHb7AhGj0nXS7BHSwmNw8xen3La6a2SlFb0mszBQDeF+sdC+eHr/cgZMZlnciu02hYgQznOjglxcjjsHB9U20bo8TtmLEzeFXK/5RhqxhsVk9lDhX1ZSDQllwGqpwfGttRU8PO/RUd2Pg0bNdzXP2sM5wpb1N1niXH0snm7u2KizeqBERoPh9EEkn0wGGHO1RR4eLYe2AYX9eET6UuSiRlVPpffxchoca6m2MrIHYfUO71RL5PI4JRg9rzF5MyB/PppndKRB8FnTaOUPZNSC+MqK+fhw1O5Fh/sh9vxZ/1CL00hA37Zl2nGVaFX31VUbBix1yFm84sw+NdiyMIuHEXkdlhYHxu/LrV/4ZL16JDfwXN6XIfcerc/a9mp1k7VbTI8B2DM9x9FR8bns7bRNwrU9rffJFDiCrUCS0NQdAij4ddhu0q9sFfguqec29h+ZusBLx4Avifd6/8udxH0YezaU5lQUWhWn99uCQmc/bqkeK4GViO7Flwa2zkvZ5jb2mh8W52vsv/vgn553fK6D13Uh0aa7SGNqFPBW95qFh8MuDg+PPB+CaN55vBywcUelePt0nhMWpCGtGRCIedfc9n1Zbz9oWfvNWeBs77YPBNk+J5YtGFfdJHnDpfI1piMqqe2GR/p6SrcdX1OXAdBuTjZ3fh9rGsqJJG38qG080VwdlV+srle/7EJzNC+v223ox1DQsGbcKTyv9/N98RoGDE8SbtGpYYfTR6ncXBzYzy4JCJuJfntbNNZ4564H8cVGCMLyY3foJwN+cqmhM/9sRne0/1oMM/UE0wx8/wBuMo75E35nW50=" + } + ] + }, + { + "name": "20", + "type": "dir", + "children": [ + { + "name": "cd172dfe44608ed34136ab6069a6249f5a7860", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzYzA0MDAzMVHIyNTLTWHYz7zBNC3SXV+9Kei7/frM9s0MV/ygCopyQQqYFhR7Z4p/z05m7r61dqkDm23v2noAchAZpQ==" + } + ] + }, + { + "name": "24", + "type": "dir", + "children": [ + { + "name": "4c7a01897aa8bce50c643f2788d13da1cc39cb", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzYzA0MDAzMVHIyNTLTWHYz7zBNC3SXV+9Kei7/frM9s0MV/ygCopyQQq6DTpSo3WVzKqLYgRO+338+orvWgkAb44aLA==" + } + ] + }, + { + "name": "25", + "type": "dir", + "children": [ + { + "name": "84400512051e6cb07fda5ff7e8dde556fc3124", + "type": "file", + "encoding": "base64", + "content": "eAGdk8muq0YARLPmK3qPct1g2kCUFwUMtjGjzWjvGJrBjGbGX/9unpRdVqnlkUoqHanitq6LEVCQp34be4xBBHnIYAaHNKYRwyUQRzGKeQZSERfCPQ9jyHFcnBBd2ONmBIgLQxZBLk05JopphBAdMYg9RFSEwggmSYwwQyUJEU5j3vbgXsQ4CqsKaLIM/hyadtmmrwrjv7M6LKqvuK3/AhTi9wjyPAsBCTkIiW/6vXLE/7OeddlQZOD3fyLKZ8UA1tkCtnI2BMe9y784AQhQ3JSPKAjiMROSUyHLSX0UBMlR7cd9NfJdI1snnCvuMJ2zk1Cx7PGkCMesvP3LCTCdi1jMBaHnDUmulvBht2rJhZvbVCaE8k7tvwUFPblz4ZKlgdh611aKPHtQir2Sf54EmEv/Gng4orrJ3bb8cWdaOks2+7qf9mXcvahVU3DQkdlspON1M8OjAZn6cGnCjcZ6YBOAn58BQlbXnQIbilQl8hqPykNcXGWvadWX7DlULU1N3VJnfk+/++FwK1041OqV1Q9pTYBYbhv7U5DesYuF48CMrcFYet6fEms+yfNDhcWZ04JVK1WPjPJatbDEIEfNr46QvmaPANzBrkbXpdJxuzoTfVqHycf6ZxUWxEbKbpUdBl+8qDUbv9vHtiX4Aa3H6II2X/zcn9v3BmuRlGWZX9C3zTEw/avus8zeJGl+MGz1+Xy12qu3u6V/+I3xcBgn/yTnWZ0rOpD4Sf82+Xn62a3IE4fUN/gONG+SdKG5oMMLu8YuTQpxodtVJQdJL5ZhkJjH/jxVzo1t4YENXQIkb++IPagFTlBr7nEuI3uJ1Ga93+9rIuzMdrlAQ4rCx/bS2yfrvsVHcUI671NRLPJmR4D7UUh9T2RdNluyCVomC7MDqbk9Vdkk5TbDR5nbbhne7R5SJvV2buJHZ9JxEpdbiFiLAPZFWo/dk41EMwo3o/ZJSyuf9hLvhJKczp9rci293hRg+ab7atDWJtqGFxWsba7chuZGAPL+1PVH7HMYz7SEJZGcx55nTC5ab0/zso/TFWXROt8DVKxnlDQM84MAPzjP+5b46xuyIf3XY4i0WP8APa7bGYO+/qoT4icGbFzD" + } + ] + }, + { + "name": "28", + "type": "dir", + "children": [ + { + "name": "1d4cba64e37323777e7f3ee222d504ed8fa0ea", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzZTA0MDAzMVEIcnV08XXVy01heLpvhSobH+f20p3znzaLMh3cI/Oe28QACBQSGabNPTxL+cG3uALxR2uvP5OKOZO3aTUAgaMclw==" + }, + { + "name": "c8a8cae6d40cdd0c552b1649cdba691d37537c", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjAyYUjOSMxLT1UoyUhVKE7MTVVIzs8rSc0r4QIArjEK2A==" + } + ] + }, + { + "name": "2b", + "type": "dir", + "children": [ + { + "name": "68c99abf79c8b868dc425a5b5a3a07b70760d1", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjC0YFBWVsjI1MtN4SotSEksSVUw5AIAYvkHRw==" + } + ] + }, + { + "name": "2d", + "type": "dir", + "children": [ + { + "name": "8cf1942da4577aa3f205108c228e1a95b33940", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAyMmYwNDAwMzFRCHJ1dPF11ctNYXi6b4UqGx/n9tKd8582izId3CPzntvEAAgUEhk+7FBP2pK7bmbokjkPhJ607WoN7AmCGlCUmpeYm6prBDKi91R1tefFXZcOWqwWmMlzZleqb5YcijIjXUMi1RkTpw5srcaJFaeeXeG5yxOqLeZ5dlemrHlwDQAuWlgY" + } + ] + }, + { + "name": "2e", + "type": "dir", + "children": [ + { + "name": "d69fff23ee6e239744c7277ab80bf40a644ece", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzZTA0MDAzMVEIcnV08XXVy01hSPcqrV30/vbpubFf9nLXcUrw5hZvNjEAAoVEhpvTftb0SQV2zgudPrE138zv/f3TZwGZ2Rzb" + } + ] + }, + { + "name": "2f", + "type": "dir", + "children": [ + { + "name": "bfcceb679b5784a56760b11d8078d6232ab285", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjBjyMjUy03hAgAczgPQ" + } + ] + }, + { + "name": "33", + "type": "dir", + "children": [ + { + "name": "1f342f6e9b38c45e17189691134cb4a72189d2", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAyM2QwNDAwMzFRCHJ1dPF11ctNYXi6b4UqGx/n9tKd8582izId3CPzntvEAAgUEhk+7FBP2pK7bmbokjkPhJ607WoN7AmCGpCXWp6WmZMKMiHjlZV1ueidp0FOUj5bZzWv0rp0yA6qqig1LzE3VdcIpKz3VHW158Vdlw5arBaYyXNmV6pvlhyKMiNdQyLVGROnDmytxokVp55d4bnLE6ot5nl2V6aseXANAGhlZtg=" + } + ] + }, + { + "name": "37", + "type": "dir", + "children": [ + { + "name": "c51dcbe78dd2fbdca15cf74c6c540f879a5bbb", + "type": "file", + "encoding": "base64", + "content": "eAGdk7kOs0YUhVPzFNOjhNUDRPmjsJnNgAFv0LEMDBgbbI8B8/RxEqVLlVt+0pWOzlIOt1tLAMcq8CfyRAjwqIJKXde8gBBEvKBIolhKvCTlhcwWtcjmUBRRiagxf6I7ARtB4AQO8qKsyEUh1/VGlgtRLiWp4GEFBSShgpPZmsrfBA9PELclKvK+BzvTBL+97sP8ef/SI/RHc8vb/pdyuP0OuI0ibL6KoAJoVmZZ6ku/Kgn6n+/N2LzaBvz812mm5QRgb+1B4liBejjG5t+cAhRoI2fVVFXTG7XatqZZ3XRVNQ5eksZLgJm7ud8i7Bxfb6vZqr0kaZ+jqjfX6F9OgbfVuWnEKHaAxYMbMie6vB4+vrHWdCaqLYYfcodC+xqze114xQbvzRONLM6O33uCtyIFrkHbo5s8M0yUFn1ftFgpilkg3oT5JD+nthOahgORynDXjVax93TXbuzgnFl0EWZBTIFLZTj0Z6+pUdKLkJUSfrFQaEv2M1lPyanAyOgCPKdaGxvhVGwXvAhJyVj0FMpOXR0p4Ou79YTndg2Csvcc/+zlx2TURvf9WF6xJw5OcJBnN9pp4i6OGJ/XL02XdBlhkRKQbU8BGoaL5WlF0w6B38DDZZ1uj60rood15Ujjr8wjvXBrp8cx32Vcw+R3TOTQjcexWnmG/fogS2ZA97sx2NhMxpPE9Z+eZue6ex4kfnqWn2gddx05HU+VHVShBiEN2c8jMbJ2lcaSAtzwZpTOF8qCmDOZcoM+M647WVJJtqEvodoXWqvBZ74rS1fy3ozh9MusX0xoB3pn1BTI1/32EbKpUs9SNrg9bUivgaCcX/Kzj5fXeBzshdzTJceQrC70IhllohXL28Gf+aqjwGs95vaJ7OKGDhbG2qTn9hZug+OzUYU+Sjus0HUzDdWCnWiqFO90Zh56dYFZ5CuTcflmMSgVHZlVxeD16j9D036VB+H+8BrkmB10E63hpavxzH24Yyt1L856wCiYr4qYvyK247+tvtF6nJJr464bc3TFd8BpUmIcp0p7dqmz6rz6aAeMoc8jvOfau9T8oMAPZzrdqX82YwbGfy2GqlFOfgXvscoJAmQAsakavkn9CZ3YWqw=" + }, + { + "name": "fed2018da7b0a66c24206f485e19bb03962954", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTA2MGQwNDAwMzFRCHJ1dPF11ctNYXi6b4UqGx/n9tKd8582izId3CPzntvEAAgUEhk+7FBP2pK7bmbokjkPhJ607WoN7AmCGpCXWp5alJaZkwoyw7dTWkGLaeXU9/+rTIWEdr/Q1y2uRaiDqcp4ZWVdLnrnaZCTlM/WWc2rtC4dsoOqKkrNS8xN1TUCGdZ7qrra8+KuSwctVgvM5DmzK9U3Sw5FmZGuIZHqjIlTB7ZW48SKU8+u8NzlCdUW8zy7K1PWPLgGAKu0dQ0=" + } + ] + }, + { + "name": "3c", + "type": "dir", + "children": [ + { + "name": "f4f1c5dd80e7f19985f8b6472ad5e82b67cb1a", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTA3YDA0MDAzMVHIyNTLTWHYz7zBNC3SXV+9Kei7/frM9s0MV/ygCopS8xJzU0GKHLTOr9z8Va4n4M2bre9WXfqq7RHQBAD/bB5T" + } + ] + }, + { + "name": "40", + "type": "dir", + "children": [ + { + "name": "2acfa9b3f51e8c50ececb5eeaad2f52b485082", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjA0YChKzUvMTdXLTeECADa9BaI=" + } + ] + }, + { + "name": "43", + "type": "dir", + "children": [ + { + "name": "3d785c830e36ad8aaeeb7c421ec3baa9f22f11", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTA2ZjA0MDAzMVHIyNTLTWHYz7zBNC3SXV+9Kei7/frM9s0MV/wA/W8N1w==" + } + ] + }, + { + "name": "44", + "type": "dir", + "children": [ + { + "name": "19f0e38f02824b493e91d0c8ca9ddd940826b0", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzYzA0MDAzMVHIyNTLTWHQzjg5a3/liR0Zd5yioqOs2LezJ1yEKijKBSnoZKpbenVN3OnvhmlzZ+aeXJ7WeOcTAML5Hao=" + } + ] + }, + { + "name": "49", + "type": "dir", + "children": [ + { + "name": "86748219a91c0341f3a8f0d6da326d5a27a389", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzYzA0MDAzMVHIyNTLTWHYz7zBNC3SXV+9Kei7/frM9s0MV/ygCopyQQo6meqWXl0Td/q7Ydrcmbknl6c13vkEAI52HLg=" + }, + { + "name": "87423ea8242642cdda9cb6cbcc6ddf2b3115fe", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTA0MWYwNDAwMzFRCHJ1dPF11ctNYXi6b4UqGx/n9tKd8582izId3CPzntvEAAgUEhk+7FBP2pK7bmbokjkPhJ607WoN7AmCGlCUmpeYm2qkawgyo/dUdbXnxV2XDlqsFpjJc2ZXqm+WHKo6XKoAcrw6Ww==" + } + ] + }, + { + "name": "4d", + "type": "dir", + "children": [ + { + "name": "891b202a02a995efff7a351212bbe82f2d737d", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjC0YMhMz8svSlXITVVIyy9SyMsv5wIAcq8IhA==" + }, + { + "name": "9fa0f078b458c15e26cfcc9834ff6e740ff77d", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTCyYDAxAAKFJAabLx+P3m14/nFm649t7lpXX2inn5YCAP+jED0=" + } + ] + }, + { + "name": "51", + "type": "dir", + "children": [ + { + "name": "6f362cd01a4f7f2a39009e6f254166be075c54", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzYzA0MDAzMVHIyNTLTWHQ33/mdfrs8Jal6QkbZRsqrilrbWqFKijKBSnoZKpbenVN3OnvhmlzZ+aeXJ7WeOcTANwWHkU=" + }, + { + "name": "8ee7f6ee72af3bd80a866287edb7871438ffd4", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzYzA0MDAzMVHIyNTLTWHQ33/mdfrs8Jal6QkbZRsqrilrbWqFKijKBSl4NvfR7E0Xrzl7d2uuK4+6cehJT/BEAO7THp8=" + } + ] + }, + { + "name": "53", + "type": "dir", + "children": [ + { + "name": "3131624898bb8ff588b48c77b26d63e7eb180f", + "type": "file", + "encoding": "base64", + "content": "eAGdlEmvq0YQhbPmV/Qe5ZrBDXSUFwXsBoNtzGBs7F0zNZjJjLb59bnvSdlllVqcxSeVVFVHp+K2rosR8DzH/Tb2aQpihQhQEVNhLcZZkqyhQqQsW3NZJmUyERIoZxEhSGKepE+bESgS5JM4FpQYKgmS1iJKESJEiDJBRN9CIkFUIllkyDTmbQ+8Ik4jUlXggDH4c2ja12f6qtL0b1qTovqK2/ovwEMkQg5BJAOWUziO+abfU47p/2ynTzoUFPz+szRsmDZwDAf4pmGr58DDvzgDGFC45qKpqrahaqIXGCf1RlW3571/8952vmqwo6e5GQyTQXW1kmVt5NQNLd1/OQMm4/HCuaqO7E1zRlzp6szmA/xEqu1s90383CbL7WWxEJKLsfKK62hDXjs8ePQ0avlKGVC9X4IdOA7Ry/Q4D1NF5MFXSrpNJ9w8ybNsNbVxtkHQNnA/HjxZ7hrJMtQ5qSRsbG0GvPnLJxLT0/lx5KKruKb2mai+FO+M/FHr+hyyL97lC25VhtrSsCtj+SDTOr9vz9a51ZzHANO8s7oprvNIXgUXKXjg7oysLvI6xXaP/bq5QNNNsa6V2lUsUeWUrTXv1RIqsDFiYjDA7jt9czNZn/eMTX7lrRNK9qiwCZ1j/IQd3w2ix7mEwiTJ1pATqNvvXmY/W1peeGHGgJJCX7uRlN2wQZoEWD2acom382LdhEYcVpVwltAu7jeHFRcs5IPynS6zkxu04XFh2+9LTkrpWP7xjQlUP0J3zvXDWoAJF81yViNUzsp4ufd0a6gnT5d1KcYPllvUsDckqZPZDQPEJfoo99OotbBGFQ7z/TUrqdg9dtrVN/Gi+5kwmMPu/jq+iLMKwnW0iwWWDsH6PvkXxADsTfgIezOOgs/LHi/bzezRj6rZGeuhiWdPVYSxQHfl0PLb4rpccqtSTrRtczt1pTn93mKYsMLvpV3FeaHu3LFROIi9zNo+pfeePT83+WMVoPBNYdgqOW9abdaxz/goD8unuLIMCB+uYJ2ihUw+Gti5cu9iyfEkpsE71NliMSPROlzp3WmVu3uFcjqrPxjwQ9G7bxt+ZQPb2/9KDJOlZPwDkCQBcduMP7/B2IK+/qoT5h//5lpw" + } + ] + }, + { + "name": "56", + "type": "dir", + "children": [ + { + "name": "40888e247e986136d36b1d52a9881abc7170f6", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzZTA0MDAzMVEIcnV08XXVy01h2GL9Izvgb6+p5oI7bDoGDHmX+w3mmRgAgUIiw4zYAJ9u/Xr1WXLBpr47dYTXWepfBwBSbRgW" + } + ] + }, + { + "name": "58", + "type": "dir", + "children": [ + { + "name": "aa7508ff84bc25552b4576b1b5ab0ddc5e41dd", + "type": "file", + "encoding": "base64", + "content": "eAGdk8muq0YARLPmK3qPcgFjpigvCrNHZjD2rqGbwWYGM/jr302i7LJKLY9UUi1OpW1dlxNgaIn7ZRowBpLEQyZl6R0UGIhxwiZQ5LmUgaKwo5MEp6zEc0IiER0ccDOBJIF7EXLiDkIoYE7YpeJ+n2ZCtt9lbIpoFsNEZDKagO+paAfglSlOYFWBi66D38emXbb3V4Xxn3kNy+orbes/AMNJLEdLoiABkhZpmvim3ysn/D/reZePZQ5+/SuKbh4t4JgO8I+mJQehp//NCUCA0j1+FFlW1FxGRqnrqFZlWQvO/t1brYJqdMfAxTEc32ZuyJUgKFQqq/nL/ZcT4G0+yWKV5aJE25CX5zhEdkGz4m0u2r04ILrttF1CMir3CrunfxwaRAqfs+yze3OYcUuA5YnC8bWn5JbqrcvwOLyvC0qhdL5Ou2RbUj4W5aC1HvERdvHcLuzypJhFWqYVX7Y39AggHAwjWpUpOjykrpmu88CZcXi99HMtjmu82W5krOozzhX1ZbzepHQoJQcF1cQ5x9nlVAKItrc1RpSiSjw55h1zDE1Wjv+IUK5Q1ZBp3WYs35Y0XfSJS5y5huknlnafC04Lm3UmAJdqdXzxBelgnHJSmpqXja/9ufSd+RRKeenoVFAMPePdlRc5zPpJFresolxkuEppdDQBchtPq9nCEx6n7mZpBddD1UL5dmDDxWGwxwi30Fg8PpOWAHpLWN3F80tL9MvTbrijQ4CnJrht93DUpPBLPVVJDuoer2YpxIw2uU02maxMOZ1VRd5dRo87dRnFYTVGmDITwjkBXIqGfNbZpnSbxiDePsd5eZGJiNBpLOJorNbL7Sk+Fs6gnMNO6Pablz0COhxTubNZMyPAGlNNQe69UaQU7S0+6/DanereY73IZm7N5hdWruxsy4RayghJalqL/xGO58birrH94AlwUANLnbbx+Kr491k+9Fywocf64S/R0pOI38nRxqBzE4V9f9l8OxGcS3lbHjTvjvOW9d9Wnx1sN5XhhIOnzBaagizuvC7Z5yfGPinrOL/XUe6GHTkXTIJFR5V/EOBHVGcc8c9ndEv7r8cQGYbTb+DdIThhMLVgqL9qRPwEd3tg0Q==" + }, + { + "name": "ebbeb4ea12bf4b0bdedfdf89e3d8c8f456e094", + "type": "file", + "encoding": "base64", + "content": "eAGdVEsTskYQzJlfsXfqC8ibqnyp8AZBREFFb8uyrCAI8hR/fUxSueWUqTn11HR111QPapumHMGGVeRfxh5jIKiKLHA8hgoncJLAoTyHKsoklCEk5XnBZfxmIxaY6mCPnyMoBCGDmZLnAsepgiIhuZAgQoKgoAJtRCVDGRZRkVNwGu9tD44lwhmsaxBYFvhteLbLOv1aY/wHaWBZ/4ra5newEVXh24KkAppVWJb6ol+VI/6f66QjQ0nAj79KtxwvBJETgdhzQi05Ha2/cQpQoDx4H13TdINouV1aVt4YmmYmfnw9vsM787QiG9+90zA5xNZqJaj9k2aQx+FfnALfiSMcNa09R8ktqfWjTj7hbZ1oSdwbeiF1/tuqd82WrC+b5ghyiX3RmiR3sXfibsJMARLpuTl0a+nMgfx68XOjBVc2rBb9yAtocOnyZe+yrRur67tqdye7TcV4TZ9rI8tcxTJfDXgjrFmaGpfe+5xbckkNpjDDlz2a4vYKS2Iy8/nzvHgkwgedTFqnervgbIriqKJuf6VAo8zB9lHrjH9q4vlOWHGwdJTQA9wu+rikyvwYgvCAXNul28JU8eymR4yM1LePeutkFOjUUDoxK2K7yBuMY7RAr8icOzb80peTalKDbbOv8CQvO72Znp5t1sbNRjxnOu966wgUmNM4WcTzWBCukmE8He4jz14ssb3Y+e6dbBSOOd0updQbqSYUj/NN49s6eSxLfz3IUv5lWKs8at4L3LzH/nniHh6cP1LCiJXZ2Xk19nQtBePq37aQzKLlGPxx+gq+ksAY+l23fBkUc+JjI3zM+m4tmbP7ZrszKTzZv+U7XTA5lVHTD+wSnL7g3qPxekfhwy7cOp4jEdYiBcJ5jnU74m02qpMy3ZwHqxIZ61TN+9g39nj+lDdR8VgPbi/9OftaSd5rerBpfqXXxHpQQPvebSXJwuy9cY1uyidui/xtu9BsUiFObaKqXFkHlZKHLfl86rzfT7tNPgi0ldMD/aKAoUrbenbuqknLS9u8HBfKdsYkh/rhvvDWf3PuKcCfg5Zkrlvwsgq9nxT42ZdtQv2TGSs0/ysxFMxz8H0CsMHcjw31J4aNW7w=" + } + ] + }, + { + "name": "59", + "type": "dir", + "children": [ + { + "name": "c1caba006bb27077d11f1c0ff7ad3ff4b2b422", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAyM2QwNDAwMzFRCHJ1dPF11ctNYXi6b4UqGx/n9tKd8582izId3CPzntvEAAgUEhk+7FBP2pK7bmbokjkPhJ607WoN7AmCGpCXWp6WmZMKMqEvLdUrpHzjfvfUKYnuR6ZyLjH8mQxVVZSal5ibqmsEUtZ7qrra8+KuSwctVgvM5DmzK9U3Sw5FmZGuIZHqjIlTB7ZW48SKU8+u8NzlCdUW8zy7K1PWPLgGAEspZqs=" + } + ] + }, + { + "name": "5b", + "type": "dir", + "children": [ + { + "name": "c92de3df5a35c478872ff522a73741e33c303d", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTCyYDAxAAKFJAZn24qYZj6ztV3rXtc4yR3etfKTviAAyLwM0A==" + } + ] + }, + { + "name": "64", + "type": "dir", + "children": [ + { + "name": "1ca0a41cfbccf4fb5c366840270fd25ec48b4f", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzZTA0MDAzMVEIcnV08XXVy01heLpvhSobH+f20p3znzaLMh3cI/Oe28QACBQSGfYVsn8rvevcLbfM0eh1YDKPWptpIABolBkw" + } + ] + }, + { + "name": "67", + "type": "dir", + "children": [ + { + "name": "4a757da2efdbcb9d5df4bd0b7e09180d6d73b3", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjA0Z1BWVghydXTxddXLTeEqLTDkAgBVBQZl" + } + ] + }, + { + "name": "68", + "type": "dir", + "children": [ + { + "name": "ea3a3b7715dce552421a4cb59a83aa2ad2c23e", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjA2ZchLLVdIy8xJVUjOzytJzSvhys0vSkUVAQBARQ7v" + } + ] + }, + { + "name": "6a", + "type": "dir", + "children": [ + { + "name": "e7cfe2d19e1ab121ec7c31fac66f33f1ef9957", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAyMmIwNDAwMzFRCHJ1dPF11ctNYXi6b4UqGx/n9tKd8582izId3CPzntvEAAgUEhk+7FBP2pK7bmbokjkPhJ607WoN7AmCGlCUmpeYm2qkawgyo/dUdbXnxV2XDlqsFpjJc2ZXqm+WHJo6Y+LUEafKCKRM48SKU8+u8NzlCdUW8zy7K1PWPLgGANRXV+o=" + } + ] + }, + { + "name": "6c", + "type": "dir", + "children": [ + { + "name": "baa28d9a3f7f5ad91ccf2e409d1d8c9bd98080", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTCyYDAxAAKFJIbGqEOFPUuse1/Na+SzrxS0/+0nHwoA1XQMkw==" + } + ] + }, + { + "name": "6f", + "type": "dir", + "children": [ + { + "name": "2d819bb115a70fa9d831717d32ce2bdec3b83b", + "type": "file", + "encoding": "base64", + "content": "eAGdlMnOo1YQhbPmKe7e6jbzIKWjgLlgRhsz2d5x4TIP/sE2w9PHnah3vUqpVp90SqVTOpUOXVc9AUWKwh/PEWMgsjRDJizPsyhnKcQxJMMiKU0Qk4o0kyGBpkiOw4h4JCPun4ATMUIYsTih6I8CkSjDWZ7looSZTEzFnOV4TEoskbye5TCCS5VilLQtsCEEf079MK+v7y3GfxddUrXf06H7C1CcxP5skgI7UiRJ4kM/Wz7x/5QXj2KqCvDtZylQN1xw1s/AN3RXDsIL/JcTgACVZ2yKLCuHQs60CsKsO8iyGlj+7bK45b6HZw2XRji99EKTW9FunVA+FI33ixPgpZf29BkxjKv/hp5WHyybaoyKzs1VY5c47dHWnugl449x4it85N3v93nUPeOinYboSgC4VKftOKZdeh2zIz0NTNnavnCt285gBt231GVcpzTH+9mE74szSnl7lSPj7WXOqAsBAax9596siTu/9uRw8l670HHvx/hU97JSxWIklxPFx/Pqxn02ShOkaU0S0p7KOgf69t4iQMyd0offHBnzBZN7cPNntK4n0b9hO0nXVems91dAusr2FLr0npDn/ZdsxZc47SKu8/odAR6xQkOF7gQ066S01O3qzLPaRy265W9hopdNfCh2Sfe7FVMZOw5FGVQ6Oui1gXcHeSWAuG/H+SFfPLe6VgWTJLY7Cf1+DxOjySbRiZe1MBvhac1m4Jxjjek2h29I/mparaVKIwFosw6My6PTSCrI6nB4iQc7cKe8Wamc3Q5xiLiD61zw+r7jtlW0UM1LihU9Jm4XVY0+Puyvr2NsPEaqazd0K69KLF9MVnX6Lzc+88iW4MD1WHoiXdtKemyrZ76ZWeO4s0l7ihUTYETGKtQ+TB+WegunsmCiFIWNbC0Hla3oKJ7VPFi2ZXYqlR/j95k3CmHCX7UY5Ctthx8nH9G9FiNj8T1OO7IT5aioOF7W48acol3ss45jPzIolmUu3q/aV6vuOESLhg2jEwNthgCNzJSoDehYnP1oZV17W/Jd1duTJ4Rp+DmdPDUJ1KlpXO9fDbwPtfGDAD+QmZnEf5mBrvq7xBBJloHPE0g6TH+jiX8AYUVcPQ==" + } + ] + }, + { + "name": "79", + "type": "dir", + "children": [ + { + "name": "5c22aa0265ce8c2d1cd3d4bf2d62ac1605b5ca", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTA0MGYwNDAwMzFRCHJ1dPF11ctNYXi6b4UqGx/n9tKd8582izId3CPzntvEAAgUEhk+7FBP2pK7bmbokjkPhJ607WoN7AmCGlCUmpeYm2oEMqH3VHW158Vdlw5arBaYyXNmV6pvlhwAtF4q9Q==" + } + ] + }, + { + "name": "7a", + "type": "dir", + "children": [ + { + "name": "b59df3bfd122ef5d24c70f9c8977f03b35e720", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzZTA0MDAzMVEIcnV08XXVy01heLpvhSobH+f20p3znzaLMh3cI/Oe28QACBQSGT7sUE/akrtuZuiSOQ+EnrTtag3sCQIAfUgbyA==" + } + ] + }, + { + "name": "81", + "type": "dir", + "children": [ + { + "name": "5ac2718ca43b8dea9e810e3f79113ffb4e1f55", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTA3YDA0MDAzMVHIyNTLTWHYz7zBNC3SXV+9Kei7/frM9s0MV/ygCopS8xJzU0GKns19NHvTxWvO3t2a68qjbhx60hM8EQAKUR6m" + } + ] + }, + { + "name": "84", + "type": "dir", + "children": [ + { + "name": "230a4664bf41b53034b9cab3c823db721055eb", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTC0MGYwNDAwMzFRCHJ1dPF11ctNYXi6b4UqGx/n9tKd8582izId3CPzntvEAAgUEhk+7FBP2pK7bmbokjkPhJ607WoN7AmCGlCUmpeYm2qkawgyo/dUdbXnxV2XDlqsFpjJc2ZXqm+WHJo6I+LU4VIFAJoHScI=" + } + ] + }, + { + "name": "86", + "type": "dir", + "children": [ + { + "name": "51dcc28c58d96439e99aa2bf239bf2ab238b73", + "type": "file", + "encoding": "base64", + "content": "eAGdk8muq0YARLPmK3pvJYCZpbwoDTTzZGMuww4DhjaTbcAYvj43ecouq9TySKXa1CnGvsczoClG/GV+VRXgeJYSRbE6skIliTzN8CXDX+mSO+aSKNL5tRBogbrxRL7MzfgCZ1xU17zrgIMQ+H0axnVbfuuq6s+6z3H3WzH2fwCakxiOkjhWAAdKpCjim36vztX/rNePesI1+PXvyEg3PRDoAQhN3YOX6Iz+4QQgAD6ZuwyhrNSw1DBCZa9AqF7sMD1/vIYcUKBVjRlNi15rsBME+TlBpW5P/3ICLPqdHM8Q9r7bTC2622uh5WhQBHOIyMgt2cCAG5N09vqMFHz6QlYcY14W6YEz0ynGBOhV3070tBq61Ic3ytCekzAEcmV66lk7PSimpOg1uwhWnRcPdFbe74VjTMMxxKG0qsYhgHvKz3P8RYaPsLizfmaw8d7z811mTVkm8zqLXV6YI9a2zSPmL35zWsV2lsfkmuixL9UE8Ne7EbN9NnBVXZvN5u2eHZ/X3ezHR9oVsv6cU9xxHevECVTl2wemN1mBR4k3WqzSHgEmbZ8w1+etcLW3mCNLzZSW4CjIp9Bxrnp5tUyra9MEi4k5kpMTWDqkZGPBngO/kmggACIVn21kg5yz2fJa5l5Tl8CpNtZpGLZkLqt44Hdeebv2ac4kK0o28QVj9w2TmjqkXw8CmO/L4QN544OURc74CKZORGcGfH8XioZPGuuCX77FhW7bXTw7xHquODc1IPFyjv10JAD74Y7L2pqDueBhbgszG4v7ik6cOun83We37rr2KI/rx46Ws/DxF1P+MGI5KWOoqgeVAO2WaQK+533fzVxc8PC4CNWKagVtpO4i1zo0UfJsLEvS8XFJIzLuFUm31KdKH60J5d9/4DXtjcrDrhikZB98rpKjUIq1B16TIDjkfZ7octwmQ3dF6Y28S6eqzxJMlu1APxUkEGBzpW1/iZcrVVrx8z2+bfYIO2VJp0ySU192mX0/PPTmEZYolPzUp8QfBPhBNn1L/HQGeep/GUPc8GuawU85ib8AaPxH7g==" + } + ] + }, + { + "name": "89", + "type": "dir", + "children": [ + { + "name": "027ea5d5ac5ecbf731669d996dc9a76681dcf2", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjBjKMrVy03hAgAdHgPe" + } + ] + }, + { + "name": "8a", + "type": "dir", + "children": [ + { + "name": "d18556d7692aef283e7cf30a287b6010c362a4", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzZTA0MDAzMVEIcnV08XXVy01heLpvhSobH+f20p3znzaLMh3cI/Oe28QACBQSGXJ2LeqdZV8fdVPmvJ7DXNme2TcbGgBuxRrD" + } + ] + }, + { + "name": "8b", + "type": "dir", + "children": [ + { + "name": "3088655b2d22367b725c10cb4ef1f5ea0ed674", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjA0YihKTUxJUSjK1ctN4QIAQkYGKw==" + } + ] + }, + { + "name": "8d", + "type": "dir", + "children": [ + { + "name": "ca7b7b49d1bad2c138ab10990cccba654d6a1e", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjA0ZyjJSFUoTsxNVUjOzytJzSvhAgBphQhU" + } + ] + }, + { + "name": "8e", + "type": "dir", + "children": [ + { + "name": "66654a5477b1bf4765946147c49509a431f963", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjA0Z8hLLVdIy8xJVUjOzytJzSvhAgBpqQhX" + }, + { + "name": "98db35c3e3e01014f78a60786b1b3b96a49960", + "type": "file", + "encoding": "base64", + "content": "eAGdk0mvq0YQhbPmV/Qe5TK5DUR5UZjta8xkDIYd0M08mcHG/vXPSZRdVqnafUcllXTOyYauqxbA0CL8ZZkwBmiXID5JUw4J3O6zGY1YlmboHRYRgzj2I4qMsE+JMZlwvwCOzyCDshTzAkJsnqIsYWCW87tsn8EdnQu8mMA0TYlkXcphAl6V4TRpW2BqGvh97ofna/1qMf6z6JKq/cqG7g/AQJGDtMgLHCBpgaaJD/18ueD/eV6MxVwV4Ne/RtaMowUcwwGXo2FJ/tXT/uYEIEDlHt+yJMlKISG90jTUKZKk+qdL5G1WSfWao+PyeJ1Xo9ClludlmElK0bj/cgJ8FFsuKCrno8W9WMG3mUV4keX7s1UNJ/Yudkw+Q+WaTg8OBeqiFtKUH0rD3Hj6jJWKAJ3GPULVHHF+3a03/7SxlEfFbnds9aDgFPuNoi3wt7P2vqms3OQ3d2GHQp26fFyo1g4JsEuXm+sfmMHwyPLcO4HhvUKSWcRG2ZZJKRj0LoQb2xXZPLolrW+q/vJJnw9noc4vBUUA9S7x8xU+WWuSmO1y9LZUgrRkB01napTq7X3T2tuRH5jrCbJ6WBnsYQp7hkPPHA25RABxtH03OHqr2dz3VTzXEQlLyT5X9pgq46Ojd5lSv8iSWwu2U9cXXSJldU3rmPl409SYAB+3N7IOM62ZvHh7ho/wtn+hOL/R6KFfS2Mzq0VgOOzpi1XYCWvs+G10U3mB56ZKMp8AgjVrKqNr7xQqft/kvVSgYlKiEXOi7biKxucS5UWnSj+QlVkGykXxHlXQ35SJPwen+ycP08ZphxgbdeZxcnyhP0YFJ9Z97HFUG9/JNa9l1py+GwvW6kwKpfDM4toQnLk+GTu7I8CxWr/fvajP8sFRoXJIqGbNKBtD963b+VkWr3eaNNpFPZm9d2+u0pbu/THScHDg7drgCeAn6ZqMWSjHKSwYyx2UeT21+oP+jqDebV5tTQKML7kzOLgXYN+8YCfHQVJEvvp6byMBPo0czs/mRCWoXV7Sg24ZSB8kVb3Tt6mo0igqMc87d34wF1n1V+l4/EGAHxHtQeKfzmiW+l+NIXKcLL+BdUTJgsEygLL66hDxE7F8XWA=" + } + ] + }, + { + "name": "91", + "type": "dir", + "children": [ + { + "name": "e66ded3cee73f5f181fbd0e7a4703f1c12bb9f", + "type": "file", + "encoding": "base64", + "content": "eAGdk0mvq0YQhbPmV/TeyjXNYEyUFwUwcAEzmZkd0M2MMZOnX/+cRNlllVKpFp90SqWjOsU4DM0KIMmzv6wzxgBzOYJkkZEwp2mOK7NDmeMDTRcYksyBP+Ys4hCieOKWzfj6UeYFRR0+A/I5xhld5pDjEOYPNEuiY4aokilYrkBEtq31OINLU+A863twlmXw+3IdH6/tq8f4z2rImv6rGIc/AGR5+sBSnwY78kiSxId+rlzx/5RXt2ppKvDrXyXKqmYBR3WAp6mW4AcX+W9OAAI0rvYWBUGUKgEpjSyjQRKEk294yeVp1fur7Ci41oJlUytF6Dneyh6CVHXuv5wAm9py4kUQ2rS9tZlzMPrdblqXb49V0duUwtdYhLa8CyQ7ClhWG1pd4ysqa/trVGrBZhJgTH1FUiFF44S8q2vsS7ditgLHpt17uHZan75y01QKXTdH2YpaF85RKocxExj7pes+GzpjhakS6t9ldb5Oi6IWrwurDDP/MZEus7C5vrSnW9fIempJyDBPJmhZbXmnW8+8sDsTwBLR7NwGqfZZ2vPpXWTd4L7gGg+bbXCL7Z0UdsOgkl2D/VqvDHHqRL+vx/6RzKFUeQQQWdOvwve55i111L+XHe8i9vbGDFw1x9JzKVqjZhhtFOn+yMMzxU8+x3CrJUHmfnjXBEAdHtIqWOwj7Cf+EDU+7k4eJfPOKQqjDg4NFQvxvLhHezoZyenRnd2MUe/9s3VnSw4IABWVzNfvE4lQksgP0WI2g30ssXAgGzid8FpVqr+TiqShXjFjToqkMapelYzdkvVarwTo15grTSXd2MXwbATvZ/l4eXpUwWiV5aZMqkhCBIdSFEIaXs6xyojfsNwzfWbczdmwCcDKwVbqhaNFzN0Q4jBUX45Z4WsnB3N83mtDssJu8wTzSd3KMqsj950p3OzHQmRTibEjQD5lrZJv+dN08pMTceTtmrj6+bGd75jSJjF3FrOqnzuRJhXSeUtZW9HxXb9zKZpG5MkEeBhX6iThbH+8tJy9V5OLo+urftT8R62a5+dFYheuPQy68Pz8ARKp8vGDAD/e9LAR/2RGtk7/lRiixNn6G5hxhhBYawzm4WtAxE8DJlxG" + } + ] + }, + { + "name": "96", + "type": "dir", + "children": [ + { + "name": "9dc39a23e0f65e7017e2add7e61a5ccc6eb2ab", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTCyYDAxAAKFJAbPtpImyZUyzI6fV3y4dssoN0p9cScAzOUNHw==" + } + ] + }, + { + "name": "98", + "type": "dir", + "children": [ + { + "name": "5d504c8b2f7f279a1e53354db92c13ae392fd7", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTCyYDAxAAKFJIbAvuff3hWtt77B1ZbU/nZ7u4jF/ysA62oPUg==" + } + ] + }, + { + "name": "99", + "type": "dir", + "children": [ + { + "name": "6a1c302a71aeeb3ba865c1a8720bbec39657b9", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzZTA0MDAzMVEIcnV08XXVy01heLpvhSobH+f20p3znzaLMh3cI/Oe28QACBQSGY5e6HrAfv/xjtsPb77inGJzScUvbCYAkZQc2w==" + } + ] + }, + { + "name": "9a", + "type": "dir", + "children": [ + { + "name": "4eb099547166c9cf28628a127cfc9e59fa4f29", + "type": "file", + "encoding": "base64", + "content": "eAGdk8sOskYAhbvmKWZP+jOA3JL+TQfkrgiIIuy4zAByURFEfPraNt111bP8kpN8Ockpbn3fTICFsvDLNGIMpCwXlJLwOSlZjsNEKLlNIUGiFLIiSQTyOS9giYPUPRvxMAGFxaJY4pIvMJZ4IhBWZkleQixlGwnyhC1YLs8VQmXzVN9GEDYFzrOuAztdB789h9uyzj86jP+o+qzpfhS3/nfACgovCpyiCICGMoTUl34tJ/w/69W9ejYV+PWvqLppe8A3fXC0TQ9Fp1D/m1OAAk1gf1SEVK1CpdHoetlrCG0j95iEb69mBt03cG2fnrNZGaiTFG/ZI61qg385BWazpnXEMIQuvHzlG9mut8JuJ+CuD8XHnXYNbxfs9UwaXsWpT4ILZ5D3JkAejCc/oA8UWEW/H4NK2O+I5n+QN9UJf3OH9nW1k/w+qAbnRNjjLCT3hsxYk5m1e4LXtsVzZvrimQJu2W5s7tpcNI6rmHSVzuiTJ6UTtYq4xovEdveZBBn7uq3y2mrazCQVPmz061eMC5OBAjIXK/RlE7zfQj5DDXbufiFljYqQ2W+jFcNrPvN8Oy7DfHl6K6LFg6vaB2Kj2JX9OPkuGS2vlgS0yEawNA1UNvLkaMRMRSdUyUbmXCtkquPSLw9BqaTHfGSew7Dmqtiay/hIKTAdCysVjyuU31YS5k1+lq3+gFZbddORTf1Jv6pvAV3FYPNwn1Gb8oGQRlEjo7Xu2eP+uyTbOxwseRXGe8XYyAvM5Efuvr1B+mASy3JgPXhfFZfSxEXdpkz8gG+P+zA1f+yEmKdAeuyd4lXtDWcpmLtUNNzz3ob012UwvPI1wHcznF6jY5LJmBv90aXEWm7sJLptf1GeEwUuEs3DeHH72/SusErOsGLVcZPcszRynUI4c057oqvpOthdzkiXk4jjnn5p9pCVQlDuKODhJtH85xgp+Jrf3KpG9oQ9jzRzNjfhcE8ZKFpC1XCHM161GrHzuGXu7tVZM6/r8vrrkEYvJX58JvEWfELROEPLEiwFaY/DoDmXZ3S6reVnkjf83rB6f7uDyU8K/JSkZKT++Yzubf/rMdSIS9yBsf/Rl9Sfm7ZYog==" + } + ] + }, + { + "name": "a4", + "type": "dir", + "children": [ + { + "name": "5d8e20e14a6f07381daf801b837c341dba00f2", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjA0Z1BWVihKzUvMTdXLTeEqLTDkAgBeIAcv" + } + ] + }, + { + "name": "b0", + "type": "dir", + "children": [ + { + "name": "904e4ea2e2548d0ebc5c9401b8a0390c0888cd", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzZTA0MDAzMVEIcnV08XXVy01heLpvhSobH+f20p3znzaLMh3cI/Oe28QACBQSGaJP6j6+H2V6pKJd/6vScnPHxzYGtgBw8hom" + } + ] + }, + { + "name": "b3", + "type": "dir", + "children": [ + { + "name": "886fec49477755dcc5591c8df04f66535c0d79", + "type": "file", + "encoding": "base64", + "content": "eAGdlMnOo0gQhOfMU9QddZvdIE2PBmOW8s8OxsutiqUAs5nFNn76cc+ob32aVJw+KVNxiMi0b9tqBiwjb/+YxzwHOZ/lKMdSJuQFx0kyYuVtKmA5SxmOYwQRZQXLMpJADWjMuxlIBZfJrIIxy4poyxRIyWSe3bLbjOfSnMNZnvJY5jGFlrnsRxBWaY5R0wBb18GfU9c/1+V7k+d/kxZVzfe0b/8CrKgIP8UzgGZkhqE+9ONyzv/nOhnIVBHw7efsdBO6wDd9EEHTVeNjqP/LKUCBKoDvnaruNKJmRqXrWaup6j7+ii7hyy03ne4beQmP02ISQ21ku/GgqpFb8ItTYDFLOyObzdHRXdwRcu6QevmKxsaC/W6dmm5UMN2QQxjMqr7Mzf4xKY/SxuwQJtbpdqJAtLhCBA+839pk4h9WKflOabKtqgVJYnWWHM7+i3Xq9sB4xE7ia3EoZaIs76/oKTkTpIC7S+gUYV94ra4XVhV+Bykt0E9thjzRLnCdNUNImKsEs8R3padZMliO6IFb+rQZ7Q0FxNq/BK9KRQ90/0poZtqI856UrejRGvbviH1MjpcNsNwz7QoVo45tVWDFw4aUB2zghAL3o4yXKsvEOi5ujtW6btkRfiNxCDXBeZvOV1KeRrIjkHmZTGpUyxlyDLGyk5/S8NRT4OEXl9N91y71BTabECU7vDzE8fx2nz0/vfROYaylFY5zGWTDrddqm7k63EKaKdgtqupQoE+ObMgHRbibunA/0JPC6DhqWVN3cu+Fn9unQzzXPwe5fYzf7RWvtyP2RVmRY8wd1DMF0NtC6s2Uy9F/GObybLcvgx2OfnW3iBcJTvZ+OB5jSLCoL9PXW2UIv15fyGoGbWQLr6BAYVd3oRvObqzFNDFCPT5c66Rnj3CD+nVxr692XdNQDJbQ68fYPc3rse60T1IIf+gUgwIB3pHnM75COekzjYaS825jLL+8Wguz7YWrGvm+379xngpqHTdE7AkxWghNn14uCf5cULTU5J+Je5P6KBGW+DFk8gDXPJ0uVQRHO60XZ0WbIdqKY3TRb5as/qDAj+KTAuq/zuju/neNoVCWgc8TQG3OfeOpfwBnEl1K" + } + ] + }, + { + "name": "b4", + "type": "dir", + "children": [ + { + "name": "3bf86b50fd8d3529a0dc062c30006ed38f309e", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjA0YAhydXTxddXLTeECADDKBNg=" + } + ] + }, + { + "name": "b5", + "type": "dir", + "children": [ + { + "name": "d1f7500bb4d6dd31b70c19c2ddf89955a3e509", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAyMmIwNDAwMzFRCHJ1dPF11ctNYXi6b4UqGx/n9tKd8582izId3CPzntvEAAgUEhk+7FBP2pK7bmbokjkPhJ607WoN7AmCGlCUmpeYm2qkawgyo/dUdbXnxV2XDlqsFpjJc2ZXqm+WHJo6Y+LUEafKCJcyAN9jWPM=" + } + ] + }, + { + "name": "b7", + "type": "dir", + "children": [ + { + "name": "6aafd52bf2d588756a32ebc9fa1ae0e68052c9", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzZTA0MDAzMVEIcnV08XXVy01heLpvhSobH+f20p3znzaLMh3cI/Oe28QACBQSGXznL/hQsSXiYJza+TMzTP7nlfB/rwUAe1sb4A==" + } + ] + }, + { + "name": "b9", + "type": "dir", + "children": [ + { + "name": "a8e7ed4e394942ba0a45f19563e8ad90b94ea9", + "type": "file", + "encoding": "base64", + "content": "eAGdlEkPq0YQhHPmV8zdymPzsEh5UYbFeMALtsEYbizDYvbNxvz6OIlyyyl9/NRdKpVUHbd1XUyAZSTxl2kgBESiEIZpArko5RIoSSIUQp4jUSynIRsShggSA7lYprpwIM0EGDZOuK1MwjAmkQRFLiIERtw2kUgiclIsw1Rgo0SgwnnK2wFci+9eWFXgoOvgt7Fp35/5R0XIH1kdFtWPuK1/ByyUecgyWwGCDSMxDPWlX5cT+Z/nWZeNRQZ+/WsU3cAnYBs2uGHjhBz3qv/NKUCB4oJXBSFFzVCyK3Q9qVWENMe6+dfllNONbu9Ijt1xNrIdqkRRLXWkZuXlX06B2SiMANG0Dx/VAT6IzcBaNDsu5wzlHLPNTvBEhJareyuaKSkeIvNNu72h6K7x9lvhKbAevxoKJrb9upSbc7txJZ3JuVhjIuyzvLI3NyvHX+qGZjF7n+ZOnmfvqmpX0WGNDzNQgB/cMZk+c8D3+FkVqk0/IQe3i5CPHXbvys4l+4RWPMfDRW3h2beumRTWcn9qOC0vvgqtJMl0YM24HrMdS04jDvvKO4lsI1muUWun2EkuIgnWcvt2byO6fbzrqxn4zdkv86fTUSBNzTkaE7TZvYplUY9SmQkuas+76riaYXcvaJQcHteLIEJp0jvH9pKV8+7LgHmbRWpPgf3av25Ya3V8C7TSetOwDg8yLcnJnelvsxm/eL0PLtai8FjU0CUbyV5BmZNPaj4lZU6BUDgPKi6J+Tk9L3n26PoJmyJrC/Xd0U7Ni2jeeSOfi0od9ukh5JveV9fNYgfctFzfBk2BQNhsZdYL7iZaXXnAqiOj16B1VRXGbTrI8BCofnJIoCn0jr/021rmUBsczj0srD37pkCj+p8hHd9BW+l11EPmmGuimQSWzmM7hWMapO7msdVT2y8HmrbhUXgbq39/+C/BmiaTAs+RlNroxWuJnNEqO2YpVKa63o8n/71U3OHD8KYS0C5XKZ5u5Vq2svrBCtnHUe71/rangBq9a+ONvQ867+pnqTw9d4/7oebWy24su8e8DTcMn/R32KmXaky3/fiTAj/7V25T/3RGP2n/1Rhq7pJwIuD7B8KaUH8CUYVZwg==" + } + ] + }, + { + "name": "bb", + "type": "dir", + "children": [ + { + "name": "a48a582aaa7e572c844cf7f42f3cd03eab81f0", + "type": "file", + "encoding": "base64", + "content": "eAGdk8uOq0YURTPmK2qO0i6eBVFuFJ42DdiAwQbPCigw3WAwb/z18U2UWUY5wyWdrSVt7axtmmoEDAPFX8aeEMBKTM5nKRZ5wiGO5RBCBBUcISzL5gLkSS4VGBJMdbgnjxFIRJbylBMyjnAEMpDhCyRhESJJTJmUS2UR87IsQgpP473tQVBlJMV1DRzDAL8Pj3bZpo+akD/LBlf1R9Y2fwBGkDkByhInAhpKEFJv+rYcyf98L7tyqErw689Tjb11BN7eA2drf1TCKDD+5hSgQOVbL1VRVK1UcrMyjLzRFEUP7XMSrMf77mF4Jrlb0TDtS1OpEVKlRdHKb/9fToFpX0HN3+2yShV0PTt0nTkzGcanykiidpDaTEIMcd00Hmt6k0lYvI7ixVi6OJEaPBoU4O6r2xE+UaKumgufw0jIBdfYhMrozF0k99r3Va33Xf7cc3Q/N/3c+XFLezfjlXsS/05A/YuJCOs9imqOtVfLvma93Vzn+jTTY7nG1tLDc8ie10kNh4u1mDtxk+AU45108ePCpoCraqZtZ6oNuX66KdfKsRb3OCfhqlvuPHWBdWT71xZ0p1SqtfO12RZmR54vUxjayyayFDj0WLvVNlNtsxxjBz4f9LlW9kkyfG51Jw2FEzUR3NgnMUYnyQPnzApboNjyHdVCoL8TnmHjL14qzCtT56bi9DJ8lpdbxn2h1RLWhyNGY+Xuz+3NpQ/TJ0eq9lQNcQGxgtdejChgNYksXRXLmxRlFfvofvBY1MMF3nVFNW9N744nZH4fxCV7uqzzaS3E2Zu30Y6J1wQMTwHtwGf+wm/1+WvsM98sp8hE/fyCQyzKFtHD0GS7Dh/kyc9qh+ZMqH4hKa4Osl7U688uRPpQvC3G3PGyr32R5Uo5OWpq34a6SV5oishzPmx9eTECcXXNrN8HyIo8x4LW9Wt8Jm8HhxboctXZE29a0T1h74t1dg4rnV0HbVCaSr3Zq3C6++QqPx68LpGVv/r2rmxRpfUGoYDzmMIU0/DZHNXQRAXCdARXJiCk6qJvRk6NyUMeYyOvyxiNVpOQ/0GBHw/leqb+2Yxx1P9rMVRB8PgbmLocjwSMLegJzhsC8CMH9+qjyam/AHMMXsM=" + } + ] + }, + { + "name": "be", + "type": "dir", + "children": [ + { + "name": "7107f675dd438b1ea64132eb51630c26863551", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzYzAxAAKFJAZn24qYZj6ztV3rXtc4yR3etfKTvqChgYGZiYlCUWpeYm6qoV5uCoOD1vmVm7/K9QS8ebP13apLX7U9ApoAulYdfg==" + }, + { + "name": "98aa31f0228a9da51717ba8e69931c1bda1022", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzYzAxAAKFJAYVnyrGzqoVe57ypNird1y0XXjG8rShgYGZiYlCUWpeYm6qoV5uCsOS2D6Fh1757Bay6xukm2tMZHcxfAIAju8ZqQ==" + } + ] + }, + { + "name": "bf", + "type": "dir", + "children": [ + { + "name": "03b0356659472f278252f73faf6987b300d44e", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjC0YFBWVsjI1MtN4SotSEksSVUw4gIAYvsHSA==" + } + ] + }, + { + "name": "c5", + "type": "dir", + "children": [ + { + "name": "d08ae007dfe3b8dbe1d9ea09943cd2244e5699", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTCyYDAxAAKFJAaFs+K6/1wS+i47mq1OyFymMj+qIgEAyfYMaw==" + } + ] + }, + { + "name": "c7", + "type": "dir", + "children": [ + { + "name": "a666607cd986eee187b3df2c4adef3b7e56c94", + "type": "file", + "encoding": "base64", + "content": "eAGdlEkTqkYUhbPmV/SeymNoAanKS6UZVRSRQYUdQzMIDcig4K+PSSq7rHLrrL6qc+ou7rlpR0g1AY7dyr9MA8ZAjLGU5pjPOBlzccLxHE6lFHJ5nIpiDmHO4VyWBYnq4wG3E0i3UowFVuISGYvSJubSPIbZVoAYQlmGKSfyqZDhnIrnqewG4FYpTuKmAUddB7+Nbfde5x8Nxn8UJK6aH2lHfgecIG++EjkO0OyWZakv/W454f9pL/pirArw61+j6ObeBo7pAG9v2sgPXP1vTgEKVJf9R0FIUQuUGZWuZ0RFSPMtL3QXu2Ra3TFwuQ/G2SwM1GyPjX9CalFf/uUUmM0yWEqEmo3rRwPbjb6Qj3TiM3fBnXnndVuV7elQptJlha15IX33fj4bEgiBRiuWu6dAd8k/Jomk0rJdXHgCt0vt8cXUzlNHEokRMjT/qVqBkRwzfLL8nH056iKzdCCUQUwyCrRwPF4tufG8+sMaBmyvGr81SDqUYrfsws39wli7q6JtnWjdH3hN2Qxh/wwVrpdOC3c8U4AjzSkfZu4g2KmoGXQrTshuZaHr6+KtPSbnUPtl5Oc3bXcxV5Ggwz3pWV8tcc64C21SQMFF9hrq+vRwGPPJ0HwiHHd6lLCo7TIsfFCYffgD4+Gnxp8r9/VypdZk39cIYfEjRRoFvKm9GpMfs58YmeXSj+KE15tuwWxSarImy8hwTqJrUboaNjyG5Ox5/b7v1mDj8YSTKcBeYI2jdnX4DD7jR1MUvDDftvhRQs7vSJpcIrFlr/fnso5Of0QPKG8qw564yHKH2ogoMCjWzX+XYVh+zyKBz5ODqnNvi0HrXz8Ym0MqEBtqXglvyAnOF/L2F6OXi7q/DRIpbArE8By1nlnQEpPbwW17D4zV2ZdzxqtQUbWBSFISOc3Oj/rIh1x2CxYCWbLfn+h3CweDAseAOPE9FB+JmlQFG7JvdKQteqsfR+auSu5Bldi9O4Xz3Wodfidn+mYL03EkBjqe/cc3gUdVHacqO7tTdchOCDNhatifPFz0oONZROoaVvMUIJtmar852cPpJwV+3npUU/90Rre1/2oMNfdZPGHw/QMxwTxP/Qnoz1kp" + } + ] + }, + { + "name": "c8", + "type": "dir", + "children": [ + { + "name": "7ae5071b9e674a1cfa3d853e33993c162c5def", + "type": "file", + "encoding": "base64", + "content": "eAGdlMnOo1gMhXvNU9w9quIyXAapq9XMISSMgUB2zHMYAvxJnr7TVapdr9qyZPmzLB3JOs7GYWhWQJKQ+mNdigKkKCdLDkGYpkzO5jlNphzMSCGj8rzkBQGhhC4QFLApWYr7ClKa59myyBiB4TgOoTzLEBLIjM9LyJQsi2iUwZwTsGRb63EBXpMVadL34KSq4M/Hffx6bd/7ovi7GpKm/56Nw1+ARALzMyHAIQ8h9qEflWvxP9erqXo0Ffj2b0iqbljA0R3gG7olXgJP/ckxgIHGNd6SKEpyJeZao6r5IIuicjH92HtaNXFXHa2ojeCx6ZUm9vyp9xhRrjr3N8fAZ9JutSg+K8ITwsBjBVPZ19Jg8rgsd8JuaVaLH2ohOZeY1PMXPTFlFSmJCxXGVBkcA5HtmC2FVLN/5R5slE0IMvr6fERDaVtwImO5Pjc2j8e3sVXdMPW70lbl+/tubyYflh4G2JC7G+FxEZIplvWgCHh4syhKfJJmP4WyMHQWzoVFK+pmVdIcE3jBro+mFG2qqHZ7gQFpRox6zK/1NUJfFVVaPG9FpxJ2hzirz9T+CmV0ojJrMmY6eN6Qb/Km7I7PauHKx0olGPBew/HNP9zJPDbTsuMKGcdya1sRn86rtowvmJgE7Z3NG0yVARnuzDGCzE6r0ub05l8xMLZvfbueRfbKS+J2RkqLo+VpHA64Eu10Tbiw01IrLn2ByO9D5MH27SZiX3Jhou/n6IIBMijlZdlP93R+kX5Gcs8kSHbOdRk27ikq1MjK4hW5HHuy4Q0Hvln3YV9jHNF2R6+M/LkFR9uVHs1N6wiSVJ0MX5CnvihDfHQj7vJqv4j2Qsf5wbvUTrE+01Wrunt7WW4EFfThiIGuk/LFstSOH/RzfJPJsG/l/KCqV70n9KM6J/No0XbeHbVOrgpm1g5OO5LwKdxpd0cmBm4TPMbrmVhGs+jL4FhzaKLs2+if5RBvL7gzhk5ND/Jj9S3ZX3HK9r8ub212p9pLA4bBQELzkp49aGftb4a7HZRpcWWBjuPci2+csivpVa10KxvsmGIIBp+D+AcGfnBO98J+eUa1lP9yDPZ5AMlQgF+F+kaBdfzdUNg/60BZSg==" + }, + { + "name": "a2583e243cfdd458a6ff40ff6f7a2d57fbaa96", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzZTA0MDAzMVEIcnV08XXVy01h2GL9Izvgb6+p5oI7bDoGDHmX+w3mmRgAgUIiw81pP2v6pAI754VOn9iab+b3/v7pswB56xwS" + } + ] + }, + { + "name": "cc", + "type": "dir", + "children": [ + { + "name": "9bcf734480b44d2e884ae75a11805e42c938d8", + "type": "file", + "encoding": "base64", + "content": "eAGdlEmvq0YQhbPmV/QeJWYepLwozHABm9HTrmlGM5oGbO6vj1+i7LJKLc7ik45UR6pTaOz7ZgE0JbG/LHNRAIGjEaTgR8sMoZIrMx6xgiBxFCNSZc7wBeKkjCuJCc7FsIBMhlIhFjlXsDInc0z208yXtMwLbCHBXKYymSugTMB1qccZRA0qMth1wDMM8Dsexte+/tYVxZ9VD5vuNzT2fwCal1mepjhZAiQlURTxoZ8tl+J/2qupwk0Ffv05qmE5RxBYAYgd66gkaWT8zQlAgCZ0vlVFUbVKyc3GMPJeUxQ9ceNb9D7Wh8EIzKJ2Urxalal0oqj1jqJVbfgvJ8BqNVIZHg5n9SWlKo/5dGu7Vs3q2jzoQoqhLc07baV8GY7pvSvFcVUbt829jYqfhRgQIE/wWGcjbVq2eyBxfc1z7MklnuQ9rPZ4oe6oFW1kMbUvJXth7wjbzr1kHnlbPi9jRgC2f3TMbQy9oV74b54MxqPY270AOXR8mpM7hNi+ro7vPu7esFl6W6Wn7q01x9nEfq+8CYDrkY5O54hMtDZuJHeOBEHbFAFK2InOTSbeZPZyFcNqMsPqxXD3bLpvnR5RyWPtOq/5pChJOVFPRiXJ491cAnWb8jQyY7dbOiHwY/EyKOO1csxIGV4+HwzB3W4VVrTg0MfzQyIAfHlqq8HpsiYmd3BJtV75ukyjCCLBCb4aXtir8OJOSa28WrZmvAOGbvJlPnV5yw7WSADS9A9lX7zZ7mRl5+yOaWPZWvd1c5RMni6ug/AwfduCJwRzaIg69q7MMWDY+uXja7QIBJC3UE/Xm6TnHL8svnQN0DmgMp/XuODZa8b8vp5ND61eurSmLEUwPQ5G3uraSO3l+DAJUITPQeS++5BCbMhd1vLt+iTXhrRRdjHauPV9WtUZPtjaRDtE3Epru6dTeBOdoc0jlQAJ1cTk5Dk7/Aod+8wp76afIidulrO13objEq/J/PWl94/esmJ/1w4PDevzTC9U57/zzz1sub7W7EJqtTxvV9sIlsEZ29NFTsl6PjuFYxWNTrk+H9o6oz1Q9Qp/EOAHUw+Y+KczxlH/r8YQnwcA+wI0C/EX1o1bJw==" + } + ] + }, + { + "name": "d4", + "type": "dir", + "children": [ + { + "name": "ad7abb3d834343c0d220104e9d1d32d7a9186b", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzZTA0MDAzMVEIcnV08XXVy01hSPcqrV30/vbpubFf9nLXcUrw5hZvNjEAAoVEhlfrEiepOIpcXrzueVjErXN1x7xdNQGW4Rve" + } + ] + }, + { + "name": "d9", + "type": "dir", + "children": [ + { + "name": "96f97c8e1a51899e559791856f364eefdfcbcd", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTCyYDAxAAKFJIbAfDOdC1L+9VqWDPPyVR3T9rHHhAAAs9gKPA==" + } + ] + }, + { + "name": "dc", + "type": "dir", + "children": [ + { + "name": "b1c5fe6cc28e7757c4bc4d7dbf5b061c38ec48", + "type": "file", + "encoding": "base64", + "content": "eAGdjlsKwjAQRf3OKrIBZWaaRwsibmXyGCw2SYkRt29/3IB/l8M5cGMrZR2aaD6NnrO2S8TIgQFcCOTB+4QoGEHEc5pETKBgiNTOPdehcRYCSpKTjcE5psWmaL3gITIGLy54I5NT/B6P1jV3flZ+DX39rfve22i18LpdYis3jc5Oi1vAoD6DB1AHPT6O/F+tOCVd80fWLasvx6JKqw==" + } + ] + }, + { + "name": "e3", + "type": "dir", + "children": [ + { + "name": "deaeb6d4ef2268a187c4b8dc022045adf11064", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAyMmYwNDAwMzFRCHJ1dPF11ctNYXi6b4UqGx/n9tKd8582izId3CPzntvEAAgUEhk+7FBP2pK7bmbokjkPhJ607WoN7AmCGlCUmpeYm2qkawgyo/dUdbXnxV2XDlqsFpjJc2ZXqm+WHJo6IyLVGROnDpcqACKFWSE=" + } + ] + }, + { + "name": "e5", + "type": "dir", + "children": [ + { + "name": "bea825060e09b775b99fe5831502c1bc1cef0b", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjA0Z1BWVghydXTxddXLTeEqLTDiAgBVBwZm" + } + ] + }, + { + "name": "e6", + "type": "dir", + "children": [ + { + "name": "9de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "type": "file", + "encoding": "base64", + "content": "eAFLyslPUjBgAAAJsAHw" + } + ] + }, + { + "name": "e7", + "type": "dir", + "children": [ + { + "name": "bd10ca01b3377fa6fbe633ce104698b5d7dd29", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzZTA0MDAzMVEIcnV08XXVy01heLpvhSobH+f20p3znzaLMh3cI/Oe28QACBQSGfbNWGX4Qalr7lJx8V19mZNlpG8JKAEAbjsZlA==" + } + ] + }, + { + "name": "ea", + "type": "dir", + "children": [ + { + "name": "ae6192244114d3a3aee75658dace7ec64b4529", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTCyYDAxAAKFJAYXyQ+P+5mavD3tJl44cWru3SkcahsA1IMNpQ==" + } + ] + }, + { + "name": "f0", + "type": "dir", + "children": [ + { + "name": "b82762b46dae9955a49ce012e486ba85518c52", + "type": "file", + "encoding": "base64", + "content": "eAErKUpNVTAzYzAxAAKFJAZn24qYZj6ztV3rXtc4yR3etfKTvqChgYGZiYlCUWpeYm6qoV5uCsOS2D6Fh1757Bay6xukm2tMZHcxfAIAlAQZtA==" + } + ] + }, + { + "name": "f4", + "type": "dir", + "children": [ + { + "name": "4bab8dd4229486c7f6acc448cfc158bcbe5cfd", + "type": "file", + "encoding": "base64", + "content": "eAGdlMmuq0YURTPmK2pu5Rnq0pWUF4XemMaYxoBnRVHGmMY2jQ3++twkyiyjHJ3Rkra0daR1yL3r6glwrCz8Mg2UAgkJBEKMWSgKhMoElhwpv0q+uMBShJhwIisUAsHMAw+0nwDCPC1YhARe4kSRIHKBsghlzEGJXAiiArpg/gIRg+fpeh9AWBNa4LYFrmGA38b+/l7nHy2lf1Qdrtsf5N79DjgB8d/L8yzYsDLLMt/0u+VE/2e8elRjXYFf/xrVsGwfBFYAItvylTgJjb85AxhQH+2PqiiqVimlWRtG2WmKosdOlIeLf932RmDSq52Ms1WZSiu7rV0pWtUc/+UMmK1bWivbzaHE8DAHRMpQbFb6q1feduqFZnxNaDFYFPr4NE6vSVF2E/3Kt8jMnwkrQgawduquRDP8QjKKKG7tQnTpm0VOVhe9yhtfKB1skub7/QI/tmbEfiqIKy2bcsMle+fMgOyt0fdYLevhpCCRxe9ldTHEMyvinW7KichBud0FZ/2U26eqzD/Xod9w8m0TZ4THvcqAB/e+NsJLeUp9U8YRuypx4b7aQq3WzsH6MlqeFB64qjaj03H5JG7BhuuOUy/9qznxh4UBx6VZvcDO5099ztRHrp6786G0n5whfA6nZr0fbcN9ZKvsD+6ZT2+bAQYonG9lq4ifelIYsGBaX/W6OfvhkXCvYCw4Dj1GXAxDleXbcknR5iGyTZSNiZVeMyFUnTm4l5fuEe72sf59B4cKLWmGIE4a7V2cPCtLFtjf0E0jpmAann50jHJbqqaToWOQi/v+huvOzjlDnlslY8DwznzE3Q2tm4TDK7BhTQ65qzVBU/jeKg/p19WY+aN+kwvtEqhTtbveexTZY+oYonpFDBhD10oQ2admkPntekL97cuCb8HLhk8Ho+d+WHbbgc562ahcDpvc84RH5HdtxG1sq5EZ0MVNfmtHLebTZReuq7dPJmt5lXE9rg94LwNJNYhxeyLpvHOcKtGnuBg7nZ0ud7ZhqcsAR8UStSVc8Y6n7Hkvbb4yib3Ap0LvOPIzZcz1yN4003YwK3PMox37kwE/FRxYzD/OGL7+X8YwuCzB9xPAHYXMn5wgWQU=" + } + ] + }, + { + "name": "f6", + "type": "dir", + "children": [ + { + "name": "245c0372667abbcb092a529c8981ce765fe70e", + "type": "file", + "encoding": "base64", + "content": "eAGdjlEKwyAQRPvtKbxAy64as0IpvcqqKw1tYrCWXL/+9AL9GYYHw5tU13Xp2lg89Sai7VwkG0DKPEdg75NxBnxxNAmGGMEGb8Lk1M5Ntq7BkbUpRwSBQoUJCSBx4UCClpAx+TSRKP70R22aGz83fnd9/bX73mqv28rL65LqetPopyEJI/UZZgA16PjY5b+14pz1JschrSwvUV+YS0qR" + } + ] + } + ] + }, + { + "name": "refs", + "type": "dir", + "children": [ + { + "name": "heads", + "type": "dir", + "children": [ + { + "name": "master", + "type": "file", + "encoding": "utf8", + "content": "f6245c0372667abbcb092a529c8981ce765fe70e\n" + } + ] + } + ] + }, + { + "name": "HEAD", + "type": "file", + "encoding": "utf8", + "content": "ref: refs/heads/master\n" + }, + { + "name": "config", + "type": "file", + "encoding": "utf8", + "content": "[core]\n\trepositoryformatversion = 0\n\tfilemode = true\n\tbare = true\n" + }, + { + "name": "description", + "type": "file", + "encoding": "utf8", + "content": "Unnamed repository; edit this file 'description' to name the repository.\n" + } + ] + } +] diff --git a/tests/log.test.ts b/tests/log.test.ts index 6c650d7..8ae1a1d 100644 --- a/tests/log.test.ts +++ b/tests/log.test.ts @@ -1,10 +1,11 @@ -import { log } from 'git-essentials' - -import { makeFsFixture, FsFixtureData } from './helpers/makeFsFixture' +import { FsFixtureData, makeFsFixture } from './helpers/makeFsFixture' -import logFsFixtureData from './fixtures/fs/log.json' +import { NotFoundError } from 'git-essentials/errors' +import { expectToFailWithTypeAsync } from './helpers/assertionHelper' +import { log } from 'git-essentials' import logComplexFsFixtureData from './fixtures/fs/log-complex.json' - +import logFileFsFixtureData from './fixtures/fs/log-file.json' +import logFsFixtureData from './fixtures/fs/log.json' describe('log', () => { it('HEAD', async () => { @@ -681,3 +682,1139 @@ Initial commit\n`, ]) }) }) + +describe('log-file', () => { + it('a newly added file', async () => { + // arrange + const { fs, dir } = await makeFsFixture(logFileFsFixtureData as FsFixtureData) + + // act + const commits = await log({ + fs, + dir, + ref: 'HEAD', + filepath: 'newfile.md', + }) + + // assert + expect(commits.length).toBe(2) + expect(commits).toEqual( + [ + { + "commit": { + "author": { + "email": "araknast@protonmail.com", + "name": "araknast", + "timestamp": 1653969605, + "timezoneOffset": 420, + }, + "committer": { + "email": "araknast@protonmail.com", + "name": "araknast", + "timestamp": 1653969605, + "timezoneOffset": 420, + }, + "message": "update newfile\n", + "parent": [ + "dcb1c5fe6cc28e7757c4bc4d7dbf5b061c38ec48", + ], + "tree": "331f342f6e9b38c45e17189691134cb4a72189d2", + }, + "oid": "04833cdb10e0f8fa81800cafa98e1381a1c6c58e", + "payload": +`tree 331f342f6e9b38c45e17189691134cb4a72189d2 +parent dcb1c5fe6cc28e7757c4bc4d7dbf5b061c38ec48 +author araknast 1653969605 -0700 +committer araknast 1653969605 -0700 + +update newfile\n`, + }, + { + "commit": { + "author": { + "email": "araknast@protonmail.com", + "name": "araknast", + "timestamp": 1653969041, + "timezoneOffset": 420, + }, + "committer": { + "email": "araknast@protonmail.com", + "name": "araknast", + "timestamp": 1653969041, + "timezoneOffset": 420, + }, + "message": "add newfile\n", + "parent": [ + "18f202dfed5cb66a295dc57f1f4ba1b7f6b74f36", + ], + "tree": "59c1caba006bb27077d11f1c0ff7ad3ff4b2b422", + }, + "oid": "dcb1c5fe6cc28e7757c4bc4d7dbf5b061c38ec48", + "payload": +`tree 59c1caba006bb27077d11f1c0ff7ad3ff4b2b422 +parent 18f202dfed5cb66a295dc57f1f4ba1b7f6b74f36 +author araknast 1653969041 -0700 +committer araknast 1653969041 -0700 + +add newfile\n`, + }, + ]) + }) + + it('a file only', async () => { + // arrange + const { fs, dir } = await makeFsFixture(logFileFsFixtureData as FsFixtureData) + + // act + const commits = await log({ + fs, + dir, + ref: 'HEAD', + filepath: 'README.md', + }) + + // assert + expect(commits.length).toBe(3) + expect(commits).toEqual( + [ + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509836, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509836, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77B8wACgkQEPFehIUs +uGi0CQ//ciB5DDcHppFv1caaOiEYUos8oc871eMMbXtl+y9eTfzN6VEwpXY8matE +3hxMpe4YAUpivfQ3a75d5MEy5iEpF/U9rCkWBlGpdqG3+rvmrvpQXo+PZEzdP84E +7rz1Ue2PnfivXCzo2zvDoyMLWqFbNgxXIwr0ST2SxuBTsVIwF/6y80uXa/8VQXfK +MBCFKKcBK03ruZAWiLIwMNvYTxDIMvupRIN2rzyRpOb8lCSWmyw1/eqzF5soVy62 +HraCZlK1iyv9XaL0qn+SlAGYYsJylp8sfLUmU0y2qeEtLYdRLS25yRAK9h7l5RD2 +qTmQwPb5vx1ldFALr90qgVZc3j7xI5xnL6UtiMGSoZM+HuJ3eioOisXf0aAaxr6U +ImY98WAIPuAAx6rUhHP27r0w0hDABFZmrMtO7FkH6wcqM2LJIweLGFZtKXePmR14 +CH4cQw4ylSjtrcQFguUF7rvz0sX69IeDTTF2ppaH9uQclL+3F0Bj78XiH9Dflx4E +6+HfY98tdLPcjGfcdAguLBbKZslmYz7uUeqvHyrgVER6xMFcrGR7IUPLI0IWjtqY +CL+5+gxD2O4FIUhY2hwISLHx+cWsCsAmiBZKx5OhQeW9nn4D8ex4WQK/go7iCrEe +LnuTba+0qmNBTF7f7a+U0x1ReeipUk19bEuP7P1K7Ppc1C+BYT4= +=nAWS +-----END PGP SIGNATURE-----`, + "message": "feat: update to readme and hi.md\n", + "parent": [ + "8e98db35c3e3e01014f78a60786b1b3b96a49960", + ], + "tree": "281d4cba64e37323777e7f3ee222d504ed8fa0ea", + }, + "oid": "bba48a582aaa7e572c844cf7f42f3cd03eab81f0", + "payload": +`tree 281d4cba64e37323777e7f3ee222d504ed8fa0ea +parent 8e98db35c3e3e01014f78a60786b1b3b96a49960 +author Riceball LEE 1593509836 +0800 +committer Riceball LEE 1593509836 +0800 + +feat: update to readme and hi.md\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509669, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509669, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77ByUACgkQEPFehIUs +uGjJYQ/9HNh4TJO/V+ckTyMDzf+Z4Aih6ytn63ispZnfbKb5hPEV+eG1HRuPthF4 +kNilem8w//QYbllbih9bbw3tKvh2SaWYHIOEDI6eA/1k5Bd0nYLi5HNWZG+bOZNR +XdDI+yPBAQSl4607S2xGeOH7HrSzVSVbheDjNhwYBiRDOvbFxhx3Sc/G+vO8IfdU +MCLzVhwizNNclKIMWKaUSpBpJuqxsRK4oINT8wJQLB4LRQ/M2CXgjSjZt0e9NtFl ++6OxGKBbgioNMg6TXzvmqFJ4eqGk1tgMz/qYX1zjCRR2jZ1g/anht8OJRppdz2/0 +k87EN+lLpN5H/Z2tSJMrKBHaCJWo72vrcyQzpLjtVUVdHNdOB66+60yqSDZiz7pc +1ou/9jM3cbtEwtvaD+W/JJvG7ctFOM7efM3iGghW2jccJ7Ku/DIlxwCXE6HNCjDf +azPFqO0Y9fw7ZoJl+D7sotea2xaWMhxspUoHxtnYxah6tzJ6KQ8eZ4GR8FoMw2dj +szUaHVtLRg+Nx/G5YWimOFNUrgA3lQYjh9+fgvodxhIQvd9KVW/qCdX6ZQM9vDXU +o9d+QEdd/hzkMrOEHscT3nqKgeIEj6JSBg27kDraM6L0dAP4wCN/9h2dbR2ke0j2 +im+CRYtkgJz5EpJ4uN1B7SDUvdBrjYIzC2Aqiohh6M2ehP1in7g= +=IvVn +-----END PGP SIGNATURE-----`, + "message": "feat: update to README\n", + "parent": [ + "533131624898bb8ff588b48c77b26d63e7eb180f", + ], + "tree": "2ed69fff23ee6e239744c7277ab80bf40a644ece", + }, + "oid": "37c51dcbe78dd2fbdca15cf74c6c540f879a5bbb", + "payload": +`tree 2ed69fff23ee6e239744c7277ab80bf40a644ece +parent 533131624898bb8ff588b48c77b26d63e7eb180f +author Riceball LEE 1593509669 +0800 +committer Riceball LEE 1593509669 +0800 + +feat: update to README\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509547, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509547, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77BqsACgkQEPFehIUs +uGj/oRAAmOMhskEjKwcFaEnC7InU/UMd4PHAy3XlKwqUCiQVEJWWi6B81n5IYsWi +mDOKXGYenlYOAf0HFqs7nPBeINDRFQp03d01wZT7JgacpERCvvu53IHLH8ndJehL +MQaRtWV/SpScj4OZH4Wzm6tjB4IBB/agZWM67tU4KKI2i6TOhQw8ktBoXbXGWO9g +OwjHW4mZn5eggIhyNzNKWRwzImopYlcBGqtYil5l4LWXADBfxAYfBCA296HkiD1N +sFzsi5mak7bKyW5/dFI9uP27BQSLLbGdbJIJlkYXi8XIo/sLPJGA0BHuiNLAVXUn +E/CO4hBH/tZtJNk3jg0TPLey4Lh34d3Tw8+6z6CvMKQtZ9JUXy8rAWMvAXg0+YVp +IvT+xA6HxECuBZ6UAYLU1ZHAvQtZch6XhJTirOJ5SMklTNKSiGaCLfDP/iuRWOYo +4x52uwkInIuintkcIZocjwEQ5DsG6jO4ylbwmEaWgpzEuR7xOuIBx38dsCoSDD+D +kyZF7ijammlt5Wc6A2u7ewEgCEy/GMEMJ+hUXqhJJ9Gi2uYU/WmC9GJDqD12JsEa +m6FFvEd+zCH/9K+O5eBUS9WFpiwXPP+amaXGBWkXnlbEYf/j9QemZXi/dkn1qCE7 +yM9yzr8Tb0dJWqvovK42AlCuYsZ9BYOBM3zz+pGhpSdES9OYO08= +=/hmk +-----END PGP SIGNATURE-----`, + "message": "first commit\n", + "parent": [], + "tree": "5640888e247e986136d36b1d52a9881abc7170f6", + }, + "oid": "8651dcc28c58d96439e99aa2bf239bf2ab238b73", + "payload": +`tree 5640888e247e986136d36b1d52a9881abc7170f6 +author Riceball LEE 1593509547 +0800 +committer Riceball LEE 1593509547 +0800 + +first commit\n`, + }, + ] + ) + }) + + it('a deleted file without force should throw error', async () => { + // arrange + const { fs, dir } = await makeFsFixture(logFileFsFixtureData as FsFixtureData) + + // act + const action = async () => { + await log({ + fs, + dir, + ref: 'HEAD', + filepath: 'a/b/rm.md', + }) + } + + // assert + await expectToFailWithTypeAsync(action, NotFoundError) + }) + + it('a deleted file forced', async () => { + // arrange + const { fs, dir } = await makeFsFixture(logFileFsFixtureData as FsFixtureData) + + // act + const commits = await log({ + fs, + dir, + ref: 'HEAD', + filepath: 'a/b/rm.md', + force: true, + }) + + // assert + expect(commits.length).toBe(6) + expect(commits).toEqual( + [ + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593652995, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593652995, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl79NwMACgkQEPFehIUs +uGh+EA//f+cNby3i8IhD5LL5elmR6qp+KFNLQMEa7nvcUmYQX2Ffx4QAN0WtPQ+O +y6PmrQg5MLfCPzANthY3oKnkvjIYbpnBF2JTeN2HA8mF8/HtGakMfeykkeuaGP6V +Kdk4I2jiXC22g/Zy7VAzbYdJTk96yWw71lpufQa1voy8ykCCu/YgeO4EjQME2RYn +82W9+X4Qxx5bu0C0lKMwfdhAcR/MDTye0jbu33krwnuXsNyA+6OKBIOfIAWK8PWY +iTwvkfQ+61T0dGFAdi8tJCfGZ6JRBf482KHR/gSwmwq59g7quS/snnybB6kGwrqZ +tScHZ6Sy08xHYRbibV8HmOAyIBKZr1ZPtEjBx5Aj6Q4qKsTkZ3Q5ZTTi8Ayhm1SM +y1mJ20d3B0WM9F48w0a8qbKxNn7zefW88QHq3PB6wdGechkZ/Wq0xN2z/h3Sl5W3 +ZSmJcvgMFJwc/p7ci2spkR+ibVnFNdvn0xinUvrJGftFuiEqlZfHwo1t6KkmX9st +X7+30WwKmotxgeBfV0g1Br4YpaZTKJc5V2JkU+gtjnIlb/7XU6eWm+vCInad5QdL +NeiYCPsrT9ejboKghAIteNNfiuauiRnpZ/06H5gi2OVeyChA1urD/pKjJyaNllbh +XZTv9Wqzt6oQzR6FV0HH5H9ACqOnCJXsTUoydzt843MFHmPDL0Y= +=77Yr +-----END PGP SIGNATURE-----`, + "message": "redel rm.md\n", + "parent": [ + "91e66ded3cee73f5f181fbd0e7a4703f1c12bb9f", + ], + "tree": "7ab59df3bfd122ef5d24c70f9c8977f03b35e720", + }, + "oid": "9a4eb099547166c9cf28628a127cfc9e59fa4f29", + "payload": +`tree 7ab59df3bfd122ef5d24c70f9c8977f03b35e720 +parent 91e66ded3cee73f5f181fbd0e7a4703f1c12bb9f +author Riceball LEE 1593652995 +0800 +committer Riceball LEE 1593652995 +0800 + +redel rm.md\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593652652, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593652652, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl79NawACgkQEPFehIUs +uGj7BRAAjZjpjaP6Kl++qtsHS5GdzMCVyocVOE+UCOWU55ImjJI9g2ajlnWfIUuM +oZTFCG123eY0vGtXTCpcrNUPO3QvVtkIlZybMMFcJJMoENWjQ1rWZEVX4UK/skkM +kKt1ZFVJHfgLnqsFGcyR5Fmr9omm3faVinyIxQhhdNxIYV44x4Uj5IszZul4yeQr +NBdrPpmChT53ST3+WNp1/c7iSeMjUpXO+CVkmmG0kieThJgKBqkBTlholwYrVCgS +B5MTgVzLh9NGoJHs+9Qd5pze41tIPNJbCWtWimoOdWJTo91L29qT747tNC14v6zh +dkemZgUsO81lq96WiTekDS2E9PDWVWk1mi2XAXrsQ8OqDKYDwkLQa4GvlxjQrNEU +1FG0btHD0ddYYEwBN4uK5wsXA60i1qDetggGT+CcYi2yX4MqFCI4GJgf4Oj0htht +ltX7fMFZu5sKSOd1vLE8RxS2c4IgNQZ4ZFCAW1mfBAV31RLXG4BH1f/4laKvMrKO +5EUufJcPIW4vKAXVVGyPMgenkEUrXL/ImYt1kuSAMx2pffahWQzaF7rTXAWO2YK+ +bqajFbubxMPbDPW70pnYQJLwuLve2IqBbPsMghx+B30F0PzCajg3XvJv7ZdqodSE +wKn2DCea/8Rj7O/GYRPJJtJ8ITwhGMLxRC5s7j6mJAxj5IdB2fw= +=z3mu +-----END PGP SIGNATURE-----`, + "message": "feat: readd the rm.md\n", + "parent": [ + "1bc226bc219beea3fb177de96350d8ad2f4c57cd", + ], + "tree": "e7bd10ca01b3377fa6fbe633ce104698b5d7dd29", + }, + "oid": "91e66ded3cee73f5f181fbd0e7a4703f1c12bb9f", + "payload": +`tree e7bd10ca01b3377fa6fbe633ce104698b5d7dd29 +parent 1bc226bc219beea3fb177de96350d8ad2f4c57cd +author Riceball LEE 1593652652 +0800 +committer Riceball LEE 1593652652 +0800 + +feat: readd the rm.md\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509970, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509970, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77CFIACgkQEPFehIUs +uGicBhAAr9NDElwaYSoKk8ayUnlO00E/Kr555Xr+/U0wgfXBoVJoDbVSsIi3IhzZ +vkWJXVeb1puUyyhYR4o2gdySJ3u3kcpj1xLIeXp+gvNftJyOaCN04m6Hnay2eMXS +9vZX55PppFXS0B1lB9L95k6ciJEVnoKjEVT1mDunmo1G932qrs6QkU0smKJ7M6fm +cEonSzi+VCpcACs4toN4PMhrFdPvFEvYK0iG8LXxLkKV+bhmKPeD45TKhJTAfjvV +86SltUU1ftyJTu2FxsuWeMzxAw57bI/xET4eHVboOnWp3cSPAWX2Mc5H5yWBzRZy +cPwDIwwvj0WSOtXOWJMW743O+29sNSKZZjoLjrSpwrYWnNYT4ThzdGvKvl2XD9uM +vzZWgQihdT+My0qXLVuDMAnH56jeUN/fdiBw2oxK+sDMiwssD4Y3GulTQ7o067aU +dqVCeV0LXTXmLUCvkbSwbKnxRRRxdA/OowH0NDbaYyjMoZ7UqBYiF5M9W1bcB9Op +RCAfWVB7U7gwgu0PO70g6+LUr1lS+1UnszIvopwsqo301O1qTQBzM4ftuBwQa57P +SHDxCpZ7bBObayNmW+PLkZSwc/Ak+uGzJdJkVrOA0kq2rlsLxnbysj1XxohIQsnQ ++RZMMYcW8eev2DeDB+vtr94O8bxQZOH3cfx5gbxvRX5ixG5dn44= +=8VVM +-----END PGP SIGNATURE-----`, + "message": "fix: remove rm.md\n", + "parent": [ + "58aa7508ff84bc25552b4576b1b5ab0ddc5e41dd", + ], + "tree": "b0904e4ea2e2548d0ebc5c9401b8a0390c0888cd", + }, + "oid": "2584400512051e6cb07fda5ff7e8dde556fc3124", + "payload": +`tree b0904e4ea2e2548d0ebc5c9401b8a0390c0888cd +parent 58aa7508ff84bc25552b4576b1b5ab0ddc5e41dd +author Riceball LEE 1593509970 +0800 +committer Riceball LEE 1593509970 +0800 + +fix: remove rm.md\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509879, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509879, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77B/cACgkQEPFehIUs +uGj+hxAAhidyrgiKXUdOh038Wvho48rd0opD2b+1C5kUpjSIrnd+7zKAS34Grveo +wjdUsk4/Ao/qNLrZHuMwdca9KMt2bywc6X8AToNZXIapXvow3wj/1w9wtxeLyuaR +7HFFVxBtVHZ9pntMvr5GXUMLqvm8sxXyOQVFxCjXgBCkFku+9Hi9PdTlt5PIvQ5C +8ORynFVcdl8JPGYe510+lPSZVdgB/lrfDpyFwa1cnpVzXiefQFGSbNDYvh5DUnxv +5cDmXLS79HFJg+9tnkOeMqKiSPvJU9giPE/Thrq1RYBk+rvEJA8yfl/QdFQBiFp0 +gOetxGoaJestpWNDh5qaCNdgyH3UwP1eR17WUFwR6f9wTaRwUlY8KkDbELjOn5IP +jD7QopZPCbhSiEcC+5aER6Cfcae1DtQnftG3A/PpNlVRYAdZY/Ls8rxFsac1tdeg +Q/0a6fpOG9WtsTXyzIvwk+b8ddJshXVslxLWj8Zw5F/PH27p4yRfZT0UscApO3Gf +xX/nh+4Rs8/BDu8jmUMpJmqR3RVO1WnyShNgB2ONGaDc17bcGNwSz7IKnN5MXOZ6 +HCTNCtysIkl6uKAHq5TydZxz6LVwq+d62AVy1dKnVUqqLySOb7PLiWwZ06Qsvyfq +iKPeOnlFPUrRBvNdtTfXpRpb4gJ1OJBxsvuxsApr2+vh1be8PCA= +=Vmf5 +-----END PGP SIGNATURE-----`, + "message": "feat: update to rm.md\n", + "parent": [ + "bba48a582aaa7e572c844cf7f42f3cd03eab81f0", + ], + "tree": "996a1c302a71aeeb3ba865c1a8720bbec39657b9", + }, + "oid": "58aa7508ff84bc25552b4576b1b5ab0ddc5e41dd", + "payload": +`tree 996a1c302a71aeeb3ba865c1a8720bbec39657b9 +parent bba48a582aaa7e572c844cf7f42f3cd03eab81f0 +author Riceball LEE 1593509879 +0800 +committer Riceball LEE 1593509879 +0800 + +feat: update to rm.md\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509597, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509597, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77Bt0ACgkQEPFehIUs +uGjwEhAAt+YBPtElFAv+hs5ybANPDKncpDdzYwJ+55aVG/RiWtN51BLj19pGm7Wg +lxw2NUPPaFkeMvsula7sS8kgDeuEnpapkoBAnPDUUon5KtLR77qn6JGAvdl6EGDN +x1Vyb3eOTjM0bW34gNTaAS6cHGhjmFFvX+w1Q1i0/kXBzn+/Gzy9IJTxYpoPYm0R +IIZ+FI34hb7/UV6UjEqT9JqbRq8NQMr4nV5IQeEFBkBW3k9lPkoJvKAk585nGcaG +NrqFCYI+S1RGChW1JO9dK9iNagvcEp5q1qs3R0Qag5ddf4502gQrHwIrvJBhiRXf +kg5SBYae+C+UedUEAMI7kEDvzJY2n3s/l2T69HcrCL/0Uzay9hHF7+uQUoXMz+og +u8kPJSMxEa5Ay2qThFL425d0bv7fm99kv8tVZrgDGAORF7F6cEj+0zAXrG66q7+C +3zby8ZOtBo5m9lEXhKWfkg3qjHBWSIEzFSf2sIsHZwMwaP/UX4bHc2+gsU4ZuSV9 +ERuEM5rIcbUywNtVDCvRgyABNf+R9u1+OlbEE2gHkso1DiWzVhJl8OgoohNeQ6ve +usuE81K6Hl0RXFPZEGiP9+VvBKegZr+TpChj/U9Xxg5Xo8h1IJofq+pcM7szyiW+ +XjQ2JObzauS9s+vlQZ3k01acgUxXF+izIb3JLWgZPo8ZQW57evA= +=8Fqf +-----END PGP SIGNATURE-----`, + "message": "feat: add content to rm.md\n", + "parent": [ + "8651dcc28c58d96439e99aa2bf239bf2ab238b73", + ], + "tree": "c8a2583e243cfdd458a6ff40ff6f7a2d57fbaa96", + }, + "oid": "533131624898bb8ff588b48c77b26d63e7eb180f", + "payload": +`tree c8a2583e243cfdd458a6ff40ff6f7a2d57fbaa96 +parent 8651dcc28c58d96439e99aa2bf239bf2ab238b73 +author Riceball LEE 1593509597 +0800 +committer Riceball LEE 1593509597 +0800 + +feat: add content to rm.md\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509547, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593509547, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77BqsACgkQEPFehIUs +uGj/oRAAmOMhskEjKwcFaEnC7InU/UMd4PHAy3XlKwqUCiQVEJWWi6B81n5IYsWi +mDOKXGYenlYOAf0HFqs7nPBeINDRFQp03d01wZT7JgacpERCvvu53IHLH8ndJehL +MQaRtWV/SpScj4OZH4Wzm6tjB4IBB/agZWM67tU4KKI2i6TOhQw8ktBoXbXGWO9g +OwjHW4mZn5eggIhyNzNKWRwzImopYlcBGqtYil5l4LWXADBfxAYfBCA296HkiD1N +sFzsi5mak7bKyW5/dFI9uP27BQSLLbGdbJIJlkYXi8XIo/sLPJGA0BHuiNLAVXUn +E/CO4hBH/tZtJNk3jg0TPLey4Lh34d3Tw8+6z6CvMKQtZ9JUXy8rAWMvAXg0+YVp +IvT+xA6HxECuBZ6UAYLU1ZHAvQtZch6XhJTirOJ5SMklTNKSiGaCLfDP/iuRWOYo +4x52uwkInIuintkcIZocjwEQ5DsG6jO4ylbwmEaWgpzEuR7xOuIBx38dsCoSDD+D +kyZF7ijammlt5Wc6A2u7ewEgCEy/GMEMJ+hUXqhJJ9Gi2uYU/WmC9GJDqD12JsEa +m6FFvEd+zCH/9K+O5eBUS9WFpiwXPP+amaXGBWkXnlbEYf/j9QemZXi/dkn1qCE7 +yM9yzr8Tb0dJWqvovK42AlCuYsZ9BYOBM3zz+pGhpSdES9OYO08= +=/hmk +-----END PGP SIGNATURE-----`, + "message": "first commit\n", + "parent": [], + "tree": "5640888e247e986136d36b1d52a9881abc7170f6", + }, + "oid": "8651dcc28c58d96439e99aa2bf239bf2ab238b73", + "payload": +`tree 5640888e247e986136d36b1d52a9881abc7170f6 +author Riceball LEE 1593509547 +0800 +committer Riceball LEE 1593509547 +0800 + +first commit\n`, + }, + ] + ) + }) + + it('a rename file with follow', async () => { + // arrange + const { fs, dir } = await makeFsFixture(logFileFsFixtureData as FsFixtureData) + + // act + const commits = await log({ + fs, + dir, + ref: 'HEAD', + filepath: 'a/rename1.md', + follow: true, + }) + + // assert + expect(commits.length).toBe(4) + expect(commits).toEqual( + [ + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593510674, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593510674, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77CxIACgkQEPFehIUs +uGhgYg//c7Add1QPUgdVP11OSH9MGAyxjLes14+g6lyf+5raDa4bvQAgRVydiqbt +yI9SKwDni7HkZUK9CrqDtGwivvDjNK7n0R+ebNXRa4LYPrm9v9Htd6AqFNpSU6LG +Fvi/AQarINtnSt7prKAExgf4Dt9Q9tZrVLqNIxi/6AMq3yQHwcDb6hKubaAkXWdw +fkjmkUKtSSzycUy2HdrDSWX04frjN9ostqZHWQRvEztI1DdStwMIGMWibDioJoi+ +xlT1I28NvRtF0hgGgjFUQoa5xN7WwVYpx2byXQdfFavhZxqfQjnR0MMyIouIBxGQ +aQGQNNEAgzVCMcnbTynLyZuG31daIS55AuoHS73RlTn+cJey32oblvnWRje9x7Vo +J52QpRJPu4CTWQM75vc43n9acZYxATNCr/tEW8SIb4PVR5q0lfh6M1+MyfHxNJrp +iRLkZaOlSsXxdU+oV5rcFg7YlpDIaqHBWTHjffqSUvBQ26S0Wot5W/kNkua35qcl +S4fomYCphl/zAxyp+O31MQYCS36MObIM3FXEGdfm1c6XWtrAhtMPTKtsk5YB2ltP +7MmLM1OwKltT6b55+RUnmQ4GyN92xIop9JMgDNDQfln/TRW73DaDFZt7OyZOZxQm +qkdT/ALm0qLz8iPf4q0zBbSd0e4RnYxD0FwfPQ7aVMAA77hzMoA= +=1cFE +-----END PGP SIGNATURE-----`, + "message": "update rename1\n", + "parent": [ + "cc9bcf734480b44d2e884ae75a11805e42c938d8", + ], + "tree": "7ab59df3bfd122ef5d24c70f9c8977f03b35e720", + }, + "oid": "1bc226bc219beea3fb177de96350d8ad2f4c57cd", + "payload": +`tree 7ab59df3bfd122ef5d24c70f9c8977f03b35e720 +parent cc9bcf734480b44d2e884ae75a11805e42c938d8 +author Riceball LEE 1593510674 +0800 +committer Riceball LEE 1593510674 +0800 + +update rename1\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593510498, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593510498, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77CmIACgkQEPFehIUs +uGi8fQ//VBw8UB5s5UvklkBbhhF/D6UsaH8ry1GU5fQoUZlf7ouBiKkdLv0Sqe7P +dTsohbo1FGHK/+shXddsL9fsp9yQgySt0Zck7HcG2hM8TyeHycsHIZf2jdkfqWob +3mjl2YoQLnht5z5+PoN7mHm6a4cNqFpKnQsHXuIMKjZLnvGDkgUOlxCiNrFsMmAx +sho1ROVR+TCkSi8KrR66CvA6a8sIRVib7Y93WX7QgpFQgw24ZbpZvlDR0TjullLi +df+9TBOEg89oZFtPBvpdURFSKltl6PMS7WnAoXgIFRAnwM5PnPZHkA37GanmSrj8 +awLBkCapWuTF4/K+Bhu5hfURRac6IPJi56ygQWKpThAwk3h2L/saKTJFqD9vb/Go ++FM/fmex3lOGbVbZs1EtvkKwYIAb9pWKIcsnpzH6L6PrQE7DsLX2NP23hwMsXRt6 +9vQDUuY8Dd45ttM8XPcVP0bM5C4PqmCErxXVFLcuLUtkF98RaUNnEdkDCo0yfojF +eQqn74zmQ0c3Q4WufxKM+4kQ1EflScv4uxOuBraj3hFcyac4u1CyLD0sv7InkdRB +T0iS+pLIyaJQIHV4AximpRISitVGuYnNtSuTrJJDmjmGGSMyC/jCsDrr1t0lMxdb +vdDuh3t+Ch9rvXHEPtnIokOW9U+hrVIeIGeiD0KM5QHD2CjcgwQ= +=2hns +-----END PGP SIGNATURE-----`, + "message": "rename it\n", + "parent": [ + "b9a8e7ed4e394942ba0a45f19563e8ad90b94ea9", + ], + "tree": "641ca0a41cfbccf4fb5c366840270fd25ec48b4f", + }, + "oid": "cc9bcf734480b44d2e884ae75a11805e42c938d8", + "payload": +`tree 641ca0a41cfbccf4fb5c366840270fd25ec48b4f +parent b9a8e7ed4e394942ba0a45f19563e8ad90b94ea9 +author Riceball LEE 1593510498 +0800 +committer Riceball LEE 1593510498 +0800 + +rename it\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593510465, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593510465, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77CkEACgkQEPFehIUs +uGiGZA//Y5XlL5XeP05m7Jp2h2GBOc1nF6W7AAxRUSintdiX706aaoSAbVD3PwB3 +zMuGiBIePPvQk+Oo+U8E0h2cD0bIY13BHJ+z23Qmn/1I1Vtup9uuWRCDR7T1Gy0r +3rUsdtyuZ3qIjliCP/j5254x6hspIUVBFUeHd/BWTWIimKIuYKRg8am9qNn2Dhir +o889/ZKuImsgF1eNsIaqlWN71n8KUGmDNcTdQ7eZzk4wUSsASyWRvnr3+OYkhjTp +ffJubsdA+FvixxCM8kg6UAoOFlMzJapVi/AdLXRQ6758tEpTPWdz2WVxrI3P1ACq +HzqvSIDoEISZDkKw/5maL9/89dV0qSuJcv3EqZQKxB3I7DAQgseHBAgThtChtdkh +a6OrCIkeJyNjQhgXpqtIJ71P6mVTDNnveDWO+9OilCrHfLa3nqYCz+xPZ2txRwG/ +Z6+491WZVJAzU9rICT9AvrDpllacofr95LZCYdLd5J6qTYxq4m92AoZLOq5iKH1w +nCYyrfswZolEmbq50MhD7JdZKE3IPf5sfZfU+X4EfPYkr//P5M6wGzYVXYv6KttJ +jsekDsWczkATsKkp0xiC0lRVMNYwxl2Ly03JBZ/U2lBWEKhDgz1ELKa1XM9qEqSH +CbwmGwIWyAOFmjkBjWUHIqrm2zQFskpXu4a+03dqV5pCQlsf4qs= +=qvhP +-----END PGP SIGNATURE-----`, + "message": "update rename\n", + "parent": [ + "01cd249eaaceb8572bee5b24d8ed728c95f61bd6", + ], + "tree": "b76aafd52bf2d588756a32ebc9fa1ae0e68052c9", + }, + "oid": "b9a8e7ed4e394942ba0a45f19563e8ad90b94ea9", + "payload": +`tree b76aafd52bf2d588756a32ebc9fa1ae0e68052c9 +parent 01cd249eaaceb8572bee5b24d8ed728c95f61bd6 +author Riceball LEE 1593510465 +0800 +committer Riceball LEE 1593510465 +0800 + +update rename\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593510416, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593510416, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77ChAACgkQEPFehIUs +uGj/rxAAtVD1LSNM4gfyHQQB8G/E4JWmqoTlOJlC2s+zZRzMUgKPPqItt4p4FFMs +4GstDmVhGVKNpZjCkzZUX5N2Htm6PzWDdjtI5t+yl1rLfCR73VQKA/ztdUT2w1tg +jewPYRht9VrP46MqCxbnUpdt5zYhshGa3/Q9WRy11rakvjrbF9S9jKP+qiNyS1X2 +3LGyDNQlS7XymSUFz4PSiOVTEpkSoOuGM6PnOhzmdNgl/JPY2vVCFcejO+qDq2K+ +0EbLH6Ab0r7EiFQXufOSR0m6i3SXnfg66+ttiW5Olm2yfT0H05flvHUp93aeAoYf +qOvnSR5nX4jzQaLyHBvSWlotNfAgLSgLVZlUSoShYjRm/4UuFShZn546ykEZ1vTZ +rMU5PNvu8pqhCEneHnl7WEuxrlxt10vwtzWDUalaUZgNKXoIYDWISpVfzdOEuOu3 +xNaH1GwZuGEtGZbDwOzsdTkJC5OTRzkb5c0SF/wlCUaW6rWW0J1cc/PX3bi4euwH +TdUe8v0KT2jX275FjpzvCQixduMrM9lm6vwOYSWplk6Au+v5ot2vaGob2ok5dMIP +Ai2oopT87heuC/iPcL2DKES1TItiXbRvYYu6jB3qCxD2cQUFxXgYyTuAnS3uSnhx +w89ElnO5qtr32gZ5+609hodFg8zrxZWxXxpNcIHfTgh17qHZuPg= +=iSgt +-----END PGP SIGNATURE-----`, + "message": "add rename.md\n", + "parent": [ + "2584400512051e6cb07fda5ff7e8dde556fc3124", + ], + "tree": "8ad18556d7692aef283e7cf30a287b6010c362a4", + }, + "oid": "01cd249eaaceb8572bee5b24d8ed728c95f61bd6", + "payload": +`tree 8ad18556d7692aef283e7cf30a287b6010c362a4 +parent 2584400512051e6cb07fda5ff7e8dde556fc3124 +author Riceball LEE 1593510416 +0800 +committer Riceball LEE 1593510416 +0800 + +add rename.md\n`, + }, + ] + ) + }) + + it('a rename file forced without follow', async () => { + // arrange + const { fs, dir } = await makeFsFixture(logFileFsFixtureData as FsFixtureData) + + // act + const commits = await log({ + fs, + dir, + ref: 'HEAD', + filepath: 'a/rename1.md', + force: true, + }) + + // assert + expect(commits.length).toBe(2) + expect(commits).toEqual( + [ + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593510674, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593510674, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77CxIACgkQEPFehIUs +uGhgYg//c7Add1QPUgdVP11OSH9MGAyxjLes14+g6lyf+5raDa4bvQAgRVydiqbt +yI9SKwDni7HkZUK9CrqDtGwivvDjNK7n0R+ebNXRa4LYPrm9v9Htd6AqFNpSU6LG +Fvi/AQarINtnSt7prKAExgf4Dt9Q9tZrVLqNIxi/6AMq3yQHwcDb6hKubaAkXWdw +fkjmkUKtSSzycUy2HdrDSWX04frjN9ostqZHWQRvEztI1DdStwMIGMWibDioJoi+ +xlT1I28NvRtF0hgGgjFUQoa5xN7WwVYpx2byXQdfFavhZxqfQjnR0MMyIouIBxGQ +aQGQNNEAgzVCMcnbTynLyZuG31daIS55AuoHS73RlTn+cJey32oblvnWRje9x7Vo +J52QpRJPu4CTWQM75vc43n9acZYxATNCr/tEW8SIb4PVR5q0lfh6M1+MyfHxNJrp +iRLkZaOlSsXxdU+oV5rcFg7YlpDIaqHBWTHjffqSUvBQ26S0Wot5W/kNkua35qcl +S4fomYCphl/zAxyp+O31MQYCS36MObIM3FXEGdfm1c6XWtrAhtMPTKtsk5YB2ltP +7MmLM1OwKltT6b55+RUnmQ4GyN92xIop9JMgDNDQfln/TRW73DaDFZt7OyZOZxQm +qkdT/ALm0qLz8iPf4q0zBbSd0e4RnYxD0FwfPQ7aVMAA77hzMoA= +=1cFE +-----END PGP SIGNATURE-----`, + "message": "update rename1\n", + "parent": [ + "cc9bcf734480b44d2e884ae75a11805e42c938d8", + ], + "tree": "7ab59df3bfd122ef5d24c70f9c8977f03b35e720", + }, + "oid": "1bc226bc219beea3fb177de96350d8ad2f4c57cd", + "payload": +`tree 7ab59df3bfd122ef5d24c70f9c8977f03b35e720 +parent cc9bcf734480b44d2e884ae75a11805e42c938d8 +author Riceball LEE 1593510674 +0800 +committer Riceball LEE 1593510674 +0800 + +update rename1\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593510498, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1593510498, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl77CmIACgkQEPFehIUs +uGi8fQ//VBw8UB5s5UvklkBbhhF/D6UsaH8ry1GU5fQoUZlf7ouBiKkdLv0Sqe7P +dTsohbo1FGHK/+shXddsL9fsp9yQgySt0Zck7HcG2hM8TyeHycsHIZf2jdkfqWob +3mjl2YoQLnht5z5+PoN7mHm6a4cNqFpKnQsHXuIMKjZLnvGDkgUOlxCiNrFsMmAx +sho1ROVR+TCkSi8KrR66CvA6a8sIRVib7Y93WX7QgpFQgw24ZbpZvlDR0TjullLi +df+9TBOEg89oZFtPBvpdURFSKltl6PMS7WnAoXgIFRAnwM5PnPZHkA37GanmSrj8 +awLBkCapWuTF4/K+Bhu5hfURRac6IPJi56ygQWKpThAwk3h2L/saKTJFqD9vb/Go ++FM/fmex3lOGbVbZs1EtvkKwYIAb9pWKIcsnpzH6L6PrQE7DsLX2NP23hwMsXRt6 +9vQDUuY8Dd45ttM8XPcVP0bM5C4PqmCErxXVFLcuLUtkF98RaUNnEdkDCo0yfojF +eQqn74zmQ0c3Q4WufxKM+4kQ1EflScv4uxOuBraj3hFcyac4u1CyLD0sv7InkdRB +T0iS+pLIyaJQIHV4AximpRISitVGuYnNtSuTrJJDmjmGGSMyC/jCsDrr1t0lMxdb +vdDuh3t+Ch9rvXHEPtnIokOW9U+hrVIeIGeiD0KM5QHD2CjcgwQ= +=2hns +-----END PGP SIGNATURE-----`, + "message": "rename it\n", + "parent": [ + "b9a8e7ed4e394942ba0a45f19563e8ad90b94ea9", + ], + "tree": "641ca0a41cfbccf4fb5c366840270fd25ec48b4f", + }, + "oid": "cc9bcf734480b44d2e884ae75a11805e42c938d8", + "payload": +`tree 641ca0a41cfbccf4fb5c366840270fd25ec48b4f +parent b9a8e7ed4e394942ba0a45f19563e8ad90b94ea9 +author Riceball LEE 1593510498 +0800 +committer Riceball LEE 1593510498 +0800 + +rename it\n`, + }, + ] + ) + }) + + it('a rename file with follow multi same content files', async () => { + // arrange + const { fs, dir } = await makeFsFixture(logFileFsFixtureData as FsFixtureData) + + // act + const commits = await log({ + fs, + dir, + ref: 'HEAD', + filepath: 'rename-2.md', + follow: true, + }) + + // assert + expect(commits.length).toBe(2) + expect(commits).toEqual( + [ + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1594594854, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1594594854, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl8LliYACgkQEPFehIUs +uGgGvBAAy4yXnK1dpMDe0x4fzWcNo9r5Ong/UFPBN8Wda0OMivmg7RbhmF1ZJxwS +J+IuSSVyunnFGqJPE6kF+CdNlCVC/Ol7LJV2rYIi+R+EBVLjU+eW1i6lSRCzJlPt +rwyWsLzvNWWsA8S88ndHMvNcr9NliSepsdXsF0dbbjru5aHct9Crvz9blb9q8WrN +yc2HLtE7TliPCxfNBqz5I2aLYwfjcEQbdnMYXQfseJBI1md0qzupY5YKkYTA+Yuf +1yEcPEOsACNrSalCTGooMgfKBC051HBnUVebAfdqUeR6XHjl6fVHTRsMKETsBQeH +hIHuN+dKjdX1zvzXbq3IStXTvTLAnK5f5td866FRvkuuTki3BiWYq/AfpwchpKKt +S3HkZnPhQXvOBSyYwI6fz+leZvpJDp+HjGDiNbB+H6iO1rDc7tVTzGKVniRsXVKJ +/L/OkP0B5pt+ElSGrlQ38Mk5uN0xtnbGPGCA074Tgry/rC8G5E8x9a1ZbsO5lQ1g +WuDwTuyzPlb6fxrctGPBI7yD+dxx/xIRjXkMRUo3GwcQSzTALl+x63SxOl4AfvmQ +Hyh2/osfJh8YUd67QDSQOY0tagXodZhAT4YkfXhqehHOBQ1Sc4GZI5wT/7nn0NTy +CP5jdSuA/wAIac/vGIQ89C71keAlKMgeEVrDOh6PISUGp4q8wy8= +=dlF4 +-----END PGP SIGNATURE-----`, + "message": "rename rename2 to rename-2\n", + "parent": [ + "c7a666607cd986eee187b3df2c4adef3b7e56c94", + ], + "tree": "2d8cf1942da4577aa3f205108c228e1a95b33940", + }, + "oid": "18f202dfed5cb66a295dc57f1f4ba1b7f6b74f36", + "payload": +`tree 2d8cf1942da4577aa3f205108c228e1a95b33940 +parent c7a666607cd986eee187b3df2c4adef3b7e56c94 +author Riceball LEE 1594594854 +0800 +committer Riceball LEE 1594594854 +0800 + +rename rename2 to rename-2\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1594594440, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1594594440, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl8LlIgACgkQEPFehIUs +uGjWiA/+Oda2OuPc7X9TFgDvnAwIWMRFThUebrGe2NaVstvtAAHte3Y/9FYqU062 +0IWLycCENb7EbSTlIb6Lew09KXibnB4E39WrIcWYJJx2zICETNW56yedkd+1UJKZ +XwCewsgxyOVA960awxyLa2au06aHDF8U6128lHPZDVYIVgdYzhrn+18j+TXc4anB +p1whk5vAq7nkdTS0yATbLvlbBgymKaDxsGM7RO1giFSVQxzULb0RyH1BfnvkV4Ox +QxkyMPIYuziZXBpYBZmZOdIq1E5zOVkyoQIELpXy8NrLZ4Wj+r2P9RujdlA6zitA +xaeihDikZNRQc1vPsb119psabrrgXY/dxW9+p60kSXsUGWhX5RBKuPodfmpRHJTD +XKe5lckrPTUkCwbVMGXUx2nj9jCcF5FEMDQKEd/dBFKX9QPY6JnjaimIY1E8ulAX +rwXN91oECmt5OvPI2icOYLCkPkbNMy8rW3hEu4QDj8bCfPBtgHhon9SIsWKE6Bh9 +sRLGU9cJWFPXNlyV9nj3G2w5MXrzm2SqJrxH/reuDdkB1Y2kYMM5pSNmlS1+IGk8 +mTkYjlsCT4WxHRyyMJUtGxvdTisyp2odP7BEcEjq97ZHKKgUDtTbsmD0tfo0k0eL +KBa7eI7ag4KMAJ4MWk3X70f2qAeoaSNXAsYDSI+kt/rFgFsYSH0= +=AaPG +-----END PGP SIGNATURE-----`, + "message": "add rename2\n", + "parent": [ + "9a4eb099547166c9cf28628a127cfc9e59fa4f29", + ], + "tree": "795c22aa0265ce8c2d1cd3d4bf2d62ac1605b5ca", + }, + "oid": "f44bab8dd4229486c7f6acc448cfc158bcbe5cfd", + "payload": +`tree 795c22aa0265ce8c2d1cd3d4bf2d62ac1605b5ca +parent 9a4eb099547166c9cf28628a127cfc9e59fa4f29 +author Riceball LEE 1594594440 +0800 +committer Riceball LEE 1594594440 +0800 + +add rename2\n`, + }, + ] + ) + }) + + it('a rename file2 with follow multi same content files', async () => { + // arrange + const { fs, dir } = await makeFsFixture(logFileFsFixtureData as FsFixtureData) + + // act + const commits = await log({ + fs, + dir, + ref: 'HEAD', + filepath: 'rename22.md', + follow: true, + }) + + // assert + // expect(commits.length).toBe(2) + expect(commits).toEqual( + [ + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1594594611, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1594594611, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl8LlTMACgkQEPFehIUs +uGhUxhAAl4RTZr0osT5fs+bT/X5Ru2PvWyB8MJhc7Qy3nGQmpowqqlmU5UD+BKRI +oQfzGmZ7hKNRegS51HcNsv/kPqEA7maAAFDTqCKUFbLdeMKTf0vPCx90+U5hUamd +n3sLVK9lSSkz0FF3nVD28Fmcrh6oxHY4XQ/KHVBD8PZyIJ2DB4rYpqYB1p7Mx1LO +1mlMfru1J5Nc6DF+n6tANn95opkgwDjtPJkThZTfWDHQGy6mAJXbp0TChef/Rx+G +BegdvrkkMjP/Gq/+2b5LHEZb0Anode5zAYdz2J/SeqD2OiRvvR7nG0wVZAe6z7ZD +StnVFtTa0zaAGhxps6teyWEK3dtBkmybxs/1PbEDZcyFN3LYmOSSpIpoyU4S2m19 +0Q3keZnyP2d3qajlgg25uW8ejh31TomcbQZ6n0VXqxysPpLAj394iFNt1ZKRrkFZ +rBKWTwhYYhzBAb3qMPAiOpN6UnTVzeeGrc5mN3DSh3WAPUOQmwTxFp9gkpWr7mgN +a3OZnSGg+7/fNUW8XUFyPIhud2C3BCDrm77bZPlHTZpZT31dWUxm30mIIM+wn3rF +LUmPaXY6jbCbig0Y0wAL+K+8ELs/XC7RJC70IRtYuXKnP2H9dE483cssmFALOTjF +2AikacC0uRtiJdMAe/YcFNzfYxEUo20Amkk3iutUAN+/kTlMNrM= +=WpAk +-----END PGP SIGNATURE-----`, + "message": "update rename22\n", + "parent": [ + "c87ae5071b9e674a1cfa3d853e33993c162c5def", + ], + "tree": "6ae7cfe2d19e1ab121ec7c31fac66f33f1ef9957", + }, + "oid": "c7a666607cd986eee187b3df2c4adef3b7e56c94", + "payload": +`tree 6ae7cfe2d19e1ab121ec7c31fac66f33f1ef9957 +parent c87ae5071b9e674a1cfa3d853e33993c162c5def +author Riceball LEE 1594594611 +0800 +committer Riceball LEE 1594594611 +0800 + +update rename22\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1594594590, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1594594590, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl8LlR4ACgkQEPFehIUs +uGgjuhAAxg/R9VUR69KDvtfI4dYffv/Oj36FYsEeBPTY1Gdy3p4fgXDaQ0D4KE4+ +XOPKj25EKlydR0iDu9Uc3WxsXmfON0p1YChMiO8+YZojEQVbSkfOECnznOuK8VfR +6V7nIVJr9apYCGUeU80ZN22Ax1KlpVC9mkN+7VejAGKgf374URUvGoKBXuEAEkve +Bq54EJdWhWX5wg2fN88NXLf0kHYchM2vyVC5L2cNpIq3UxZ5SK8KCQoxgr7fst2a +RymJz8sQpKJiprv+D1YYCjONX8bqtFroy0aK/3RMKZ0bDm5IQq749C6ptDjd3uSW +ojzGuWMA6W8BAuM5Dj+5rxIHH+DXv3h/Q0kFbNYfS9/dnmXR0jzQaAlf7VaGvMXT +1UfCrrvLnbqy1Sc17xaUav7QQ46Yl22VF1gN8DCfol1i8IP0z6QsOWY+53Ok3t4C +X73OgGXqijP9BBgLIS9CplefV+oQX7Tyjw/jT3YdHRThPetxbtFgknjTrZ/2UlVo +kkBdrNNEk8mGMYZC1VljCdHEEWGl/GJEqaqoN3OdkJFkCge4qFHPjo10x9n3Qv5K +Zp0JYtM/roKelfUJh75p2OZoSMCV+jT+PoVPh3mCstSNCSt+2OSwTzFqQphRbU44 +a38BGcs3PtlZIQuHDprQC93YYdRYZ7DvDbWEgGNcmOY24/4+qUY= +=7Pky +-----END PGP SIGNATURE-----`, + "message": "rename rename2-2 to rename22\n", + "parent": [ + "b3886fec49477755dcc5591c8df04f66535c0d79", + ], + "tree": "b5d1f7500bb4d6dd31b70c19c2ddf89955a3e509", + }, + "oid": "c87ae5071b9e674a1cfa3d853e33993c162c5def", + "payload": +`tree b5d1f7500bb4d6dd31b70c19c2ddf89955a3e509 +parent b3886fec49477755dcc5591c8df04f66535c0d79 +author Riceball LEE 1594594590 +0800 +committer Riceball LEE 1594594590 +0800 + +rename rename2-2 to rename22\n`, + }, + { + "commit": { + "author": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1594594501, + "timezoneOffset": -480, + }, + "committer": { + "email": "snowyu.lee@gmail.com", + "name": "Riceball LEE", + "timestamp": 1594594501, + "timezoneOffset": -480, + }, + "gpgsig": +`-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEdmCAADTKSYRxNh/nEPFehIUsuGgFAl8LlMUACgkQEPFehIUs +uGhLsBAAorySvEQFjCKL1kIi2fJyF4xWcnbzlO2xd6HWaSB6VQZZZwrGQIRFOoVX +ExiOzHrcmcXrdH2so3hlLS7XjlmI3oGSKDxryscfe/wJEvRMr9flXAVIvQdMrG7T +K/mNYKs5Pu/0oOQu+UMNZHWOjnABiW8VAhs16WwyNWndr9sE22F97cn1dmMESL/K +W5OcpSkH3JuEaZTYSwbyyO8SYeLacyyBmKvqT0NBzt7mcZa0P/qAKWRWcmV5mQn+ +pWB2EB2m7bwG09xjlyMwwDnVlbYfv7s2xz8pBLh2n+ye1d4roghTiGbCGjIe+CAy +8/lrwpARQNiXig3aaLNs7n//EaIkds8MWxygJk7tKwJTMPWF3mzM6k06XJKlKD9r +2JjTIRpmF01TdjUou8CLTNsfky1f4zCWUb5CNMReyvZellBFUDfh148Q3WlxDDVK +/XuHWIpr1mlzbYhXBWARJ4DMnqNWP6bL9Eo5ne9tbGFzh2rlitfzJdkMNwJ2QBKW +rbIy7jSEcpKDYUshg3VcbUkAKxCD4i2VWwDfTxzxwMiD6rWvP6Ig7seqj8Tfy2LU +ppVZj8VIxSQ5FH4s1MDbgHRyHz3OV+WS4MMLpdE8hhf8ZXFqlD+5b28ILEVO3EL3 +kA3hblT2W8wSVy4NLzxf+inLsQ7UcU/qAAskaEG1sryZqkEZojI= +=bJdJ +-----END PGP SIGNATURE-----`, + "message": "add rename2-2\n", + "parent": [ + "58ebbeb4ea12bf4b0bdedfdf89e3d8c8f456e094", + ], + "tree": "84230a4664bf41b53034b9cab3c823db721055eb", + }, + "oid": "6f2d819bb115a70fa9d831717d32ce2bdec3b83b", + "payload": +`tree 84230a4664bf41b53034b9cab3c823db721055eb +parent 58ebbeb4ea12bf4b0bdedfdf89e3d8c8f456e094 +author Riceball LEE 1594594501 +0800 +committer Riceball LEE 1594594501 +0800 + +add rename2-2\n`, + }, + ] + ) + }) +})