export default index; export type TreeEntry = { /** * - the 6 digit hexadecimal mode */ mode: string; /** * - the name of the file or directory */ path: string; /** * - the SHA-1 object id of the blob or tree */ oid: string; /** * - the type of object */ type: "blob" | "tree" | "commit"; }; /** * - The object returned has the following schema: */ export type ReadTreeResult = { /** * - SHA-1 object id of this tree */ oid: string; /** * - the parsed tree object */ tree: TreeEntry[]; }; /** * - The object returned has the following schema: */ export type FetchResult = { /** * - The branch that is cloned if no branch is specified */ defaultBranch: string | null; /** * - The SHA-1 object id of the fetched head commit */ fetchHead: string | null; /** * - a textual description of the branch that was fetched */ fetchHeadDescription: string | null; /** * - The HTTP response headers returned by the git server */ headers?: { [x: string]: string; }; /** * - A list of branches that were pruned, if you provided the `prune` parameter */ pruned?: string[]; }; /** * - Returns an object with a schema like this: */ export type MergeResult = { /** * - The SHA-1 object id that is now at the head of the branch. Absent only if `dryRun` was specified and `mergeCommit` is true. */ oid?: string; /** * - True if the branch was already merged so no changes were made */ alreadyMerged?: boolean; /** * - True if it was a fast-forward merge */ fastForward?: boolean; /** * - True if merge resulted in a merge commit */ mergeCommit?: boolean; /** * - The SHA-1 object id of the tree resulting from a merge commit */ tree?: string; }; /** * - The object returned has the following schema: */ export type GetRemoteInfoResult = { /** * - The list of capabilities returned by the server (part of the Git protocol) */ capabilities: string[]; refs?: any; /** * - The default branch of the remote */ HEAD?: string; /** * - The branches on the remote */ heads?: { [x: string]: string; }; /** * - The special branches representing pull requests (non-standard) */ pull?: { [x: string]: string; }; /** * - The tags on the remote */ tags?: { [x: string]: string; }; }; /** * - This object has the following schema: */ export type GetRemoteInfo2Result = { /** * - Git protocol version the server supports */ protocolVersion: 1 | 2; /** * - An object of capabilities represented as keys and values */ capabilities: { [x: string]: string | true; }; /** * - Server refs (they get returned by protocol version 1 whether you want them or not) */ refs?: ServerRef[]; }; /** * - The object returned has the following schema: */ export type HashBlobResult = { /** * - The SHA-1 object id */ oid: string; /** * - The type of the object */ type: "blob"; /** * - The wrapped git object (the thing that is hashed) */ object: Uint8Array; /** * - The format of the object */ format: "wrapped"; }; /** * - This object has the following schema: */ export type ServerRef = { /** * - The name of the ref */ ref: string; /** * - The SHA-1 object id the ref points to */ oid: string; /** * - The target ref pointed to by a symbolic ref */ target?: string; /** * - If the oid is the SHA-1 object id of an annotated tag, this is the SHA-1 object id that the annotated tag points to */ peeled?: string; }; /** * The packObjects command returns an object with two properties: */ export type PackObjectsResult = { /** * - The suggested filename for the packfile if you want to save it to disk somewhere. It includes the packfile SHA. */ filename: string; /** * - The packfile contents. Not present if `write` parameter was true, in which case the packfile was written straight to disk. */ packfile?: Uint8Array; }; /** * - The object returned has the following schema: */ export type ReadBlobResult = { oid: string; blob: Uint8Array; }; export type DeflatedObject = { oid: string; type: "deflated"; format: "deflated"; object: Uint8Array; source?: string; }; export type WrappedObject = { oid: string; type: "wrapped"; format: "wrapped"; object: Uint8Array; source?: string; }; export type RawObject = { oid: string; type: "blob" | "tree" | "commit" | "tag"; format: "content"; object: Uint8Array; source?: string; }; export type ParsedBlobObject = { oid: string; type: "blob"; format: "parsed"; object: string; source?: string; }; export type ParsedCommitObject = { oid: string; type: "commit"; format: "parsed"; object: CommitObject; source?: string; }; export type ParsedTreeObject = { oid: string; type: "tree"; format: "parsed"; object: TreeEntry[]; source?: string; }; export type ParsedTagObject = { oid: string; type: "tag"; format: "parsed"; object: TagObject; source?: string; }; export type ParsedObject = ParsedBlobObject | ParsedCommitObject | ParsedTreeObject | ParsedTagObject; export type ReadObjectResult = ParsedBlobObject | ParsedCommitObject | ParsedTreeObject | ParsedTagObject | DeflatedObject | WrappedObject | RawObject; /** * - The object returned has the following schema: */ export type ReadTagResult = { /** * - SHA-1 object id of this tag */ oid: string; /** * - the parsed tag object */ tag: TagObject; /** * - PGP signing payload */ payload: string; }; export type WalkerMap = (filename: string, entries: (WalkerEntry | null)[]) => Promise; export type WalkerReduce = (parent: any, children: any[]) => Promise; export type WalkerIterateCallback = (entries: WalkerEntry[]) => Promise; export type WalkerIterate = (walk: WalkerIterateCallback, children: any) => Promise; export type GitProgressEvent = { phase: string; loaded: number; total: number; }; export type ProgressCallback = (progress: GitProgressEvent) => void | Promise; export type GitHttpRequest = { /** * - The URL to request */ url: string; /** * - The HTTP method to use */ method?: string; /** * - Headers to include in the HTTP request */ headers?: { [x: string]: string; }; /** * - An HTTP or HTTPS agent that manages connections for the HTTP client (Node.js only) */ agent?: any; /** * - An async iterator of Uint8Arrays that make up the body of POST requests */ body?: any; /** * - Reserved for future use (emitting `GitProgressEvent`s) */ onProgress?: ProgressCallback; /** * - Reserved for future use (canceling a request) */ signal?: any; }; export type GitHttpResponse = { /** * - The final URL that was fetched after any redirects */ url: string; /** * - The HTTP method that was used */ method?: string; /** * - HTTP response headers */ headers?: { [x: string]: string; }; /** * - An async iterator of Uint8Arrays that make up the body of the response */ body?: any; /** * - The HTTP status code */ statusCode: number; /** * - The HTTP status message */ statusMessage: string; }; export type HttpFetch = (request: GitHttpRequest) => Promise; export type HttpClient = { request: HttpFetch; }; /** * A git commit object. */ export type CommitObject = { /** * Commit message */ message: string; /** * SHA-1 object id of corresponding file tree */ tree: string; /** * an array of zero or more SHA-1 object ids */ parent: string[]; author: { /** * The author's name */ name: string; /** * The author's email */ email: string; /** * UTC Unix timestamp in seconds */ timestamp: number; /** * Timezone difference from UTC in minutes */ timezoneOffset: number; }; committer: { /** * The committer's name */ name: string; /** * The committer's email */ email: string; /** * UTC Unix timestamp in seconds */ timestamp: number; /** * Timezone difference from UTC in minutes */ timezoneOffset: number; }; /** * PGP signature (if present) */ gpgsig?: string; }; /** * A git tree object. Trees represent a directory snapshot. */ export type TreeObject = TreeEntry[]; /** * A git annotated tag object. */ export type TagObject = { /** * SHA-1 object id of object being tagged */ object: string; /** * the type of the object being tagged */ type: "blob" | "tree" | "commit" | "tag"; /** * the tag name */ tag: string; tagger: { /** * the tagger's name */ name: string; /** * the tagger's email */ email: string; /** * UTC Unix timestamp in seconds */ timestamp: number; /** * timezone difference from UTC in minutes */ timezoneOffset: number; }; /** * tag message */ message: string; /** * PGP signature (if present) */ gpgsig?: string; }; export type ReadCommitResult = { /** * - SHA-1 object id of this commit */ oid: string; /** * - the parsed commit object */ commit: CommitObject; /** * - PGP signing payload */ payload: string; }; export type Walker = { /** * ('GitWalkerSymbol') */ Symbol: Symbol; }; /** * Normalized subset of filesystem `stat` data: */ export type Stat = { ctimeSeconds: number; ctimeNanoseconds: number; mtimeSeconds: number; mtimeNanoseconds: number; dev: number; ino: number; mode: number; uid: number; gid: number; size: number; }; /** * The `WalkerEntry` is an interface that abstracts computing many common tree / blob stats. */ export type WalkerEntry = { type: () => Promise<"blob" | "tree" | "commit" | "special">; mode: () => Promise; oid: () => Promise; content: () => Promise; stat: () => Promise; }; export type CallbackFsClient = { /** * - https://nodejs.org/api/fs.html#fs_fs_readfile_path_options_callback */ readFile: Function; /** * - https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback */ writeFile: Function; /** * - https://nodejs.org/api/fs.html#fs_fs_unlink_path_callback */ unlink: Function; /** * - https://nodejs.org/api/fs.html#fs_fs_readdir_path_options_callback */ readdir: Function; /** * - https://nodejs.org/api/fs.html#fs_fs_mkdir_path_mode_callback */ mkdir: Function; /** * - https://nodejs.org/api/fs.html#fs_fs_rmdir_path_callback */ rmdir: Function; /** * - https://nodejs.org/api/fs.html#fs_fs_stat_path_options_callback */ stat: Function; /** * - https://nodejs.org/api/fs.html#fs_fs_lstat_path_options_callback */ lstat: Function; /** * - https://nodejs.org/api/fs.html#fs_fs_readlink_path_options_callback */ readlink?: Function; /** * - https://nodejs.org/api/fs.html#fs_fs_symlink_target_path_type_callback */ symlink?: Function; /** * - https://nodejs.org/api/fs.html#fs_fs_chmod_path_mode_callback */ chmod?: Function; }; export type PromiseFsClient = { promises: { /** * - https://nodejs.org/api/fs.html#fs_fspromises_readfile_path_options */ readFile: Function; /** * - https://nodejs.org/api/fs.html#fs_fspromises_writefile_file_data_options */ writeFile: Function; /** * - https://nodejs.org/api/fs.html#fs_fspromises_unlink_path */ unlink: Function; /** * - https://nodejs.org/api/fs.html#fs_fspromises_readdir_path_options */ readdir: Function; /** * - https://nodejs.org/api/fs.html#fs_fspromises_mkdir_path_options */ mkdir: Function; /** * - https://nodejs.org/api/fs.html#fs_fspromises_rmdir_path */ rmdir: Function; /** * - https://nodejs.org/api/fs.html#fs_fspromises_stat_path_options */ stat: Function; /** * - https://nodejs.org/api/fs.html#fs_fspromises_lstat_path_options */ lstat: Function; /** * - https://nodejs.org/api/fs.html#fs_fspromises_readlink_path_options */ readlink?: Function; /** * - https://nodejs.org/api/fs.html#fs_fspromises_symlink_target_path_type */ symlink?: Function; /** * - https://nodejs.org/api/fs.html#fs_fspromises_chmod_path_mode */ chmod?: Function; }; }; export type FsClient = CallbackFsClient | PromiseFsClient; export type MessageCallback = (message: string) => void | Promise; export type GitAuth = { username?: string; password?: string; headers?: { [x: string]: string; }; /** * Tells git to throw a `UserCanceledError` (instead of an `HttpError`). */ cancel?: boolean; }; export type AuthCallback = (url: string, auth: GitAuth) => void | GitAuth | Promise; export type AuthFailureCallback = (url: string, auth: GitAuth) => void | GitAuth | Promise; export type AuthSuccessCallback = (url: string, auth: GitAuth) => void | Promise; export type SignParams = { /** * - a plaintext message */ payload: string; /** * - an 'ASCII armor' encoded PGP key (technically can actually contain _multiple_ keys) */ secretKey: string; }; export type SignCallback = (args: SignParams) => { signature: string; } | Promise<{ signature: string; }>; export type MergeDriverParams = { branches: string[]; contents: string[]; path: string; }; export type MergeDriverCallback = (args: MergeDriverParams) => { cleanMerge: boolean; mergedText: string; } | Promise<{ cleanMerge: boolean; mergedText: string; }>; export type RefUpdateStatus = { ok: boolean; error: string; }; export type PushResult = { ok: boolean; error: string | null; refs: { [x: string]: RefUpdateStatus; }; headers?: { [x: string]: string; }; }; export type HeadStatus = 0 | 1; export type WorkdirStatus = 0 | 1 | 2; export type StageStatus = 0 | 1 | 2 | 3; export type StatusRow = [string, 0 | 1, 0 | 1 | 2, 0 | 1 | 2 | 3]; export type types = number; declare namespace index { export { Errors }; export { STAGE }; export { TREE }; export { WORKDIR }; export { add }; export { abortMerge }; export { addNote }; export { addRemote }; export { annotatedTag }; export { branch }; export { checkout }; export { clone }; export { commit }; export { getConfig }; export { getConfigAll }; export { setConfig }; export { currentBranch }; export { deleteBranch }; export { deleteRef }; export { deleteRemote }; export { deleteTag }; export { expandOid }; export { expandRef }; export { fastForward }; export { fetch }; export { findMergeBase }; export { findRoot }; export { getRemoteInfo }; export { getRemoteInfo2 }; export { hashBlob }; export { indexPack }; export { init }; export { isDescendent }; export { isIgnored }; export { listBranches }; export { listFiles }; export { listNotes }; export { listRemotes }; export { listServerRefs }; export { listTags }; export { log }; export { merge }; export { packObjects }; export { pull }; export { push }; export { readBlob }; export { readCommit }; export { readNote }; export { readObject }; export { readTag }; export { readTree }; export { remove }; export { removeNote }; export { renameBranch }; export { resetIndex }; export { updateIndex }; export { resolveRef }; export { status }; export { statusMatrix }; export { tag }; export { version }; export { walk }; export { writeBlob }; export { writeCommit }; export { writeObject }; export { writeRef }; export { writeTag }; export { writeTree }; } export var Errors: Readonly<{ __proto__: null; AlreadyExistsError: typeof AlreadyExistsError; AmbiguousError: typeof AmbiguousError; CheckoutConflictError: typeof CheckoutConflictError; CommitNotFetchedError: typeof CommitNotFetchedError; EmptyServerResponseError: typeof EmptyServerResponseError; FastForwardError: typeof FastForwardError; GitPushError: typeof GitPushError; HttpError: typeof HttpError; InternalError: typeof InternalError; InvalidFilepathError: typeof InvalidFilepathError; InvalidOidError: typeof InvalidOidError; InvalidRefNameError: typeof InvalidRefNameError; MaxDepthError: typeof MaxDepthError; MergeNotSupportedError: typeof MergeNotSupportedError; MergeConflictError: typeof MergeConflictError; MissingNameError: typeof MissingNameError; MissingParameterError: typeof MissingParameterError; MultipleGitError: typeof MultipleGitError; NoRefspecError: typeof NoRefspecError; NotFoundError: typeof NotFoundError; ObjectTypeError: typeof ObjectTypeError; ParseError: typeof ParseError; PushRejectedError: typeof PushRejectedError; RemoteCapabilityError: typeof RemoteCapabilityError; SmartHttpError: typeof SmartHttpError; UnknownTransportError: typeof UnknownTransportError; UnsafeFilepathError: typeof UnsafeFilepathError; UrlParseError: typeof UrlParseError; UserCanceledError: typeof UserCanceledError; UnmergedPathsError: typeof UnmergedPathsError; IndexResetError: typeof IndexResetError; }>; /** * @returns {Walker} */ export function STAGE(): Walker; /** * @param {object} args * @param {string} [args.ref='HEAD'] * @returns {Walker} */ export function TREE({ ref }?: { ref?: string; }): Walker; /** * @returns {Walker} */ export function WORKDIR(): Walker; /** * Abort a merge in progress. * * Based on the behavior of git reset --merge, i.e. "Resets the index and updates the files in the working tree that are different between and HEAD, but keeps those which are different between the index and working tree (i.e. which have changes which have not been added). If a file that is different between and the index has unstaged changes, reset is aborted." * * Essentially, abortMerge will reset any files affected by merge conflicts to their last known good version at HEAD. * Any unstaged changes are saved and any staged changes are reset as well. * * NOTE: The behavior of this command differs slightly from canonical git in that an error will be thrown if a file exists in the index and nowhere else. * Canonical git will reset the file and continue aborting the merge in this case. * * **WARNING:** Running git merge with non-trivial uncommitted changes is discouraged: while possible, it may leave you in a state that is hard to back out of in the case of a conflict. * If there were uncommitted changes when the merge started (and especially if those changes were further modified after the merge was started), `git.abortMerge` will in some cases be unable to reconstruct the original (pre-merge) changes. * * @param {object} args * @param {FsClient} args.fs - a file system implementation * @param {string} args.dir - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir, '.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.commit='HEAD'] - commit to reset the index and worktree to, defaults to HEAD * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully once the git index has been updated * */ export function abortMerge({ fs: _fs, dir, gitdir, commit, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir: string; gitdir?: string; commit?: string; cache?: any; }): Promise; /** * Add a file to the git index (aka staging area) * * @param {object} args * @param {FsClient} args.fs - a file system implementation * @param {string} args.dir - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir, '.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string|string[]} args.filepath - The path to the file to add to the index * @param {object} [args.cache] - a [cache](cache.md) object * @param {boolean} [args.force=false] - add to index even if matches gitignore. Think `git add --force` * @param {boolean} [args.parallel=false] - process each input file in parallel. Parallel processing will result in more memory consumption but less process time * * @returns {Promise} Resolves successfully once the git index has been updated * * @example * await fs.promises.writeFile('/tutorial/README.md', `# TEST`) * await git.add({ fs, dir: '/tutorial', filepath: 'README.md' }) * console.log('done') * */ export function add({ fs: _fs, dir, gitdir, filepath, cache, force, parallel, }: { fs: CallbackFsClient | PromiseFsClient; dir: string; gitdir?: string; filepath: string | string[]; cache?: any; force?: boolean; parallel?: boolean; }): Promise; /** * Add or update an object note * * @param {object} args * @param {FsClient} args.fs - a file system implementation * @param {SignCallback} [args.onSign] - a PGP signing implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.ref] - The notes ref to look under * @param {string} args.oid - The SHA-1 object id of the object to add the note to. * @param {string|Uint8Array} args.note - The note to add * @param {boolean} [args.force] - Over-write note if it already exists. * @param {Object} [args.author] - The details about the author. * @param {string} [args.author.name] - Default is `user.name` config. * @param {string} [args.author.email] - Default is `user.email` config. * @param {number} [args.author.timestamp=Math.floor(Date.now()/1000)] - Set the author timestamp field. This is the integer number of seconds since the Unix epoch (1970-01-01 00:00:00). * @param {number} [args.author.timezoneOffset] - Set the author timezone offset field. This is the difference, in minutes, from the current timezone to UTC. Default is `(new Date()).getTimezoneOffset()`. * @param {Object} [args.committer = author] - The details about the note committer, in the same format as the author parameter. If not specified, the author details are used. * @param {string} [args.committer.name] - Default is `user.name` config. * @param {string} [args.committer.email] - Default is `user.email` config. * @param {number} [args.committer.timestamp=Math.floor(Date.now()/1000)] - Set the committer timestamp field. This is the integer number of seconds since the Unix epoch (1970-01-01 00:00:00). * @param {number} [args.committer.timezoneOffset] - Set the committer timezone offset field. This is the difference, in minutes, from the current timezone to UTC. Default is `(new Date()).getTimezoneOffset()`. * @param {string} [args.signingKey] - Sign the note commit using this private PGP key. * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully with the SHA-1 object id of the commit object for the added note. */ export function addNote({ fs: _fs, onSign, dir, gitdir, ref, oid, note, force, author: _author, committer: _committer, signingKey, cache, }: { fs: CallbackFsClient | PromiseFsClient; onSign?: SignCallback; dir?: string; gitdir?: string; ref?: string; oid: string; note: string | Uint8Array; force?: boolean; author?: { name?: string; email?: string; timestamp?: number; timezoneOffset?: number; }; committer?: { name?: string; email?: string; timestamp?: number; timezoneOffset?: number; }; signingKey?: string; cache?: any; }): Promise; /** * Add or update a remote * * @param {object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.remote - The name of the remote * @param {string} args.url - The URL of the remote * @param {boolean} [args.force = false] - Instead of throwing an error if a remote named `remote` already exists, overwrite the existing remote. * * @returns {Promise} Resolves successfully when filesystem operations are complete * * @example * await git.addRemote({ * fs, * dir: '/tutorial', * remote: 'upstream', * url: 'https://github.com/isomorphic-git/isomorphic-git' * }) * console.log('done') * */ export function addRemote({ fs, dir, gitdir, remote, url, force, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; remote: string; url: string; force?: boolean; }): Promise; /** * Create an annotated tag. * * @param {object} args * @param {FsClient} args.fs - a file system implementation * @param {SignCallback} [args.onSign] - a PGP signing implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.ref - What to name the tag * @param {string} [args.message = ref] - The tag message to use. * @param {string} [args.object = 'HEAD'] - The SHA-1 object id the tag points to. (Will resolve to a SHA-1 object id if value is a ref.) By default, the commit object which is referred by the current `HEAD` is used. * @param {object} [args.tagger] - The details about the tagger. * @param {string} [args.tagger.name] - Default is `user.name` config. * @param {string} [args.tagger.email] - Default is `user.email` config. * @param {number} [args.tagger.timestamp=Math.floor(Date.now()/1000)] - Set the tagger timestamp field. This is the integer number of seconds since the Unix epoch (1970-01-01 00:00:00). * @param {number} [args.tagger.timezoneOffset] - Set the tagger timezone offset field. This is the difference, in minutes, from the current timezone to UTC. Default is `(new Date()).getTimezoneOffset()`. * @param {string} [args.gpgsig] - The gpgsig attatched to the tag object. (Mutually exclusive with the `signingKey` option.) * @param {string} [args.signingKey] - Sign the tag object using this private PGP key. (Mutually exclusive with the `gpgsig` option.) * @param {boolean} [args.force = false] - Instead of throwing an error if a tag named `ref` already exists, overwrite the existing tag. Note that this option does not modify the original tag object itself. * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully when filesystem operations are complete * * @example * await git.annotatedTag({ * fs, * dir: '/tutorial', * ref: 'test-tag', * message: 'This commit is awesome', * tagger: { * name: 'Mr. Test', * email: 'mrtest@example.com' * } * }) * console.log('done') * */ export function annotatedTag({ fs: _fs, onSign, dir, gitdir, ref, tagger: _tagger, message, gpgsig, object, signingKey, force, cache, }: { fs: CallbackFsClient | PromiseFsClient; onSign?: SignCallback; dir?: string; gitdir?: string; ref: string; message?: string; object?: string; tagger?: { name?: string; email?: string; timestamp?: number; timezoneOffset?: number; }; gpgsig?: string; signingKey?: string; force?: boolean; cache?: any; }): Promise; /** * Create a branch * * @param {object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.ref - What to name the branch * @param {string} [args.object = 'HEAD'] - What oid to use as the start point. Accepts a symbolic ref. * @param {boolean} [args.checkout = false] - Update `HEAD` to point at the newly created branch * @param {boolean} [args.force = false] - Instead of throwing an error if a branched named `ref` already exists, overwrite the existing branch. * * @returns {Promise} Resolves successfully when filesystem operations are complete * * @example * await git.branch({ fs, dir: '/tutorial', ref: 'develop' }) * console.log('done') * */ export function branch({ fs, dir, gitdir, ref, object, checkout, force, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; ref: string; object?: string; checkout?: boolean; force?: boolean; }): Promise; /** * Checkout a branch * * If the branch already exists it will check out that branch. Otherwise, it will create a new remote tracking branch set to track the remote branch of that name. * * @param {object} args * @param {FsClient} args.fs - a file system implementation * @param {ProgressCallback} [args.onProgress] - optional progress event callback * @param {string} args.dir - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.ref = 'HEAD'] - Source to checkout files from * @param {string[]} [args.filepaths] - Limit the checkout to the given files and directories * @param {string} [args.remote = 'origin'] - Which remote repository to use * @param {boolean} [args.noCheckout = false] - If true, will update HEAD but won't update the working directory * @param {boolean} [args.noUpdateHead] - If true, will update the working directory but won't update HEAD. Defaults to `false` when `ref` is provided, and `true` if `ref` is not provided. * @param {boolean} [args.dryRun = false] - If true, simulates a checkout so you can test whether it would succeed. * @param {boolean} [args.force = false] - If true, conflicts will be ignored and files will be overwritten regardless of local changes. * @param {boolean} [args.track = true] - If false, will not set the remote branch tracking information. Defaults to true. * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully when filesystem operations are complete * * @example * // switch to the main branch * await git.checkout({ * fs, * dir: '/tutorial', * ref: 'main' * }) * console.log('done') * * @example * // restore the 'docs' and 'src/docs' folders to the way they were, overwriting any changes * await git.checkout({ * fs, * dir: '/tutorial', * force: true, * filepaths: ['docs', 'src/docs'] * }) * console.log('done') * * @example * // restore the 'docs' and 'src/docs' folders to the way they are in the 'develop' branch, overwriting any changes * await git.checkout({ * fs, * dir: '/tutorial', * ref: 'develop', * noUpdateHead: true, * force: true, * filepaths: ['docs', 'src/docs'] * }) * console.log('done') */ export function checkout({ fs, onProgress, dir, gitdir, remote, ref: _ref, filepaths, noCheckout, noUpdateHead, dryRun, force, track, cache, }: { fs: CallbackFsClient | PromiseFsClient; onProgress?: ProgressCallback; dir: string; gitdir?: string; ref?: string; filepaths?: string[]; remote?: string; noCheckout?: boolean; noUpdateHead?: boolean; dryRun?: boolean; force?: boolean; track?: boolean; cache?: any; }): Promise; /** * Clone a repository * * @param {object} args * @param {FsClient} args.fs - a file system implementation * @param {HttpClient} args.http - an HTTP client * @param {ProgressCallback} [args.onProgress] - optional progress event callback * @param {MessageCallback} [args.onMessage] - optional message event callback * @param {AuthCallback} [args.onAuth] - optional auth fill callback * @param {AuthFailureCallback} [args.onAuthFailure] - optional auth rejected callback * @param {AuthSuccessCallback} [args.onAuthSuccess] - optional auth approved callback * @param {string} args.dir - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.url - The URL of the remote repository * @param {string} [args.corsProxy] - Optional [CORS proxy](https://www.npmjs.com/%40isomorphic-git/cors-proxy). Value is stored in the git config file for that repo. * @param {string} [args.ref] - Which branch to checkout. By default this is the designated "main branch" of the repository. * @param {boolean} [args.singleBranch = false] - Instead of the default behavior of fetching all the branches, only fetch a single branch. * @param {boolean} [args.noCheckout = false] - If true, clone will only fetch the repo, not check out a branch. Skipping checkout can save a lot of time normally spent writing files to disk. * @param {boolean} [args.noTags = false] - By default clone will fetch all tags. `noTags` disables that behavior. * @param {string} [args.remote = 'origin'] - What to name the remote that is created. * @param {number} [args.depth] - Integer. Determines how much of the git repository's history to retrieve * @param {Date} [args.since] - Only fetch commits created after the given date. Mutually exclusive with `depth`. * @param {string[]} [args.exclude = []] - A list of branches or tags. Instructs the remote server not to send us any commits reachable from these refs. * @param {boolean} [args.relative = false] - Changes the meaning of `depth` to be measured from the current shallow depth rather than from the branch tip. * @param {Object} [args.headers = {}] - Additional headers to include in HTTP requests, similar to git's `extraHeader` config * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully when clone completes * * @example * await git.clone({ * fs, * http, * dir: '/tutorial', * corsProxy: 'https://cors.isomorphic-git.org', * url: 'https://github.com/isomorphic-git/isomorphic-git', * singleBranch: true, * depth: 1 * }) * console.log('done') * */ export function clone({ fs, http, onProgress, onMessage, onAuth, onAuthSuccess, onAuthFailure, dir, gitdir, url, corsProxy, ref, remote, depth, since, exclude, relative, singleBranch, noCheckout, noTags, headers, cache, }: { fs: CallbackFsClient | PromiseFsClient; http: HttpClient; onProgress?: ProgressCallback; onMessage?: MessageCallback; onAuth?: AuthCallback; onAuthFailure?: AuthFailureCallback; onAuthSuccess?: AuthSuccessCallback; dir: string; gitdir?: string; url: string; corsProxy?: string; ref?: string; singleBranch?: boolean; noCheckout?: boolean; noTags?: boolean; remote?: string; depth?: number; since?: Date; exclude?: string[]; relative?: boolean; headers?: { [x: string]: string; }; cache?: any; }): Promise; /** * Create a new commit * * @param {Object} args * @param {FsClient} args.fs - a file system implementation * @param {SignCallback} [args.onSign] - a PGP signing implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.message - The commit message to use. * @param {Object} [args.author] - The details about the author. * @param {string} [args.author.name] - Default is `user.name` config. * @param {string} [args.author.email] - Default is `user.email` config. * @param {number} [args.author.timestamp=Math.floor(Date.now()/1000)] - Set the author timestamp field. This is the integer number of seconds since the Unix epoch (1970-01-01 00:00:00). * @param {number} [args.author.timezoneOffset] - Set the author timezone offset field. This is the difference, in minutes, from the current timezone to UTC. Default is `(new Date()).getTimezoneOffset()`. * @param {Object} [args.committer = author] - The details about the commit committer, in the same format as the author parameter. If not specified, the author details are used. * @param {string} [args.committer.name] - Default is `user.name` config. * @param {string} [args.committer.email] - Default is `user.email` config. * @param {number} [args.committer.timestamp=Math.floor(Date.now()/1000)] - Set the committer timestamp field. This is the integer number of seconds since the Unix epoch (1970-01-01 00:00:00). * @param {number} [args.committer.timezoneOffset] - Set the committer timezone offset field. This is the difference, in minutes, from the current timezone to UTC. Default is `(new Date()).getTimezoneOffset()`. * @param {string} [args.signingKey] - Sign the tag object using this private PGP key. * @param {boolean} [args.dryRun = false] - If true, simulates making a commit so you can test whether it would succeed. Implies `noUpdateBranch`. * @param {boolean} [args.noUpdateBranch = false] - If true, does not update the branch pointer after creating the commit. * @param {string} [args.ref] - The fully expanded name of the branch to commit to. Default is the current branch pointed to by HEAD. (TODO: fix it so it can expand branch names without throwing if the branch doesn't exist yet.) * @param {string[]} [args.parent] - The SHA-1 object ids of the commits to use as parents. If not specified, the commit pointed to by `ref` is used. * @param {string} [args.tree] - The SHA-1 object id of the tree to use. If not specified, a new tree object is created from the current git index. * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully with the SHA-1 object id of the newly created commit. * * @example * let sha = await git.commit({ * fs, * dir: '/tutorial', * author: { * name: 'Mr. Test', * email: 'mrtest@example.com', * }, * message: 'Added the a.txt file' * }) * console.log(sha) * */ export function commit({ fs: _fs, onSign, dir, gitdir, message, author: _author, committer: _committer, signingKey, dryRun, noUpdateBranch, ref, parent, tree, cache, }: { fs: CallbackFsClient | PromiseFsClient; onSign?: SignCallback; dir?: string; gitdir?: string; message: string; author?: { name?: string; email?: string; timestamp?: number; timezoneOffset?: number; }; committer?: { name?: string; email?: string; timestamp?: number; timezoneOffset?: number; }; signingKey?: string; dryRun?: boolean; noUpdateBranch?: boolean; ref?: string; parent?: string[]; tree?: string; cache?: any; }): Promise; /** * Get the name of the branch currently pointed to by .git/HEAD * * @param {Object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {boolean} [args.fullname = false] - Return the full path (e.g. "refs/heads/main") instead of the abbreviated form. * @param {boolean} [args.test = false] - If the current branch doesn't actually exist (such as right after git init) then return `undefined`. * * @returns {Promise} The name of the current branch or undefined if the HEAD is detached. * * @example * // Get the current branch name * let branch = await git.currentBranch({ * fs, * dir: '/tutorial', * fullname: false * }) * console.log(branch) * */ export function currentBranch({ fs, dir, gitdir, fullname, test, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; fullname?: boolean; test?: boolean; }): Promise; /** * Delete a local branch * * > Note: This only deletes loose branches - it should be fixed in the future to delete packed branches as well. * * @param {Object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.ref - The branch to delete * * @returns {Promise} Resolves successfully when filesystem operations are complete * * @example * await git.deleteBranch({ fs, dir: '/tutorial', ref: 'local-branch' }) * console.log('done') * */ export function deleteBranch({ fs, dir, gitdir, ref, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; ref: string; }): Promise; /** * Delete a local ref * * @param {Object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.ref - The ref to delete * * @returns {Promise} Resolves successfully when filesystem operations are complete * * @example * await git.deleteRef({ fs, dir: '/tutorial', ref: 'refs/tags/test-tag' }) * console.log('done') * */ export function deleteRef({ fs, dir, gitdir, ref }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; ref: string; }): Promise; /** * Removes the local config entry for a given remote * * @param {Object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.remote - The name of the remote to delete * * @returns {Promise} Resolves successfully when filesystem operations are complete * * @example * await git.deleteRemote({ fs, dir: '/tutorial', remote: 'upstream' }) * console.log('done') * */ export function deleteRemote({ fs, dir, gitdir, remote, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; remote: string; }): Promise; /** * Delete a local tag ref * * @param {Object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.ref - The tag to delete * * @returns {Promise} Resolves successfully when filesystem operations are complete * * @example * await git.deleteTag({ fs, dir: '/tutorial', ref: 'test-tag' }) * console.log('done') * */ export function deleteTag({ fs, dir, gitdir, ref }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; ref: string; }): Promise; /** * Expand and resolve a short oid into a full oid * * @param {Object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.oid - The shortened oid prefix to expand (like "0414d2a") * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully with the full oid (like "0414d2a286d7bbc7a4a326a61c1f9f888a8ab87f") * * @example * let oid = await git.expandOid({ fs, dir: '/tutorial', oid: '0414d2a'}) * console.log(oid) * */ export function expandOid({ fs, dir, gitdir, oid, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; oid: string; cache?: any; }): Promise; /** * Expand an abbreviated ref to its full name * * @param {Object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.ref - The ref to expand (like "v1.0.0") * * @returns {Promise} Resolves successfully with a full ref name ("refs/tags/v1.0.0") * * @example * let fullRef = await git.expandRef({ fs, dir: '/tutorial', ref: 'main'}) * console.log(fullRef) * */ export function expandRef({ fs, dir, gitdir, ref }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; ref: string; }): Promise; /** * Like `pull`, but hard-coded with `fastForward: true` so there is no need for an `author` parameter. * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {HttpClient} args.http - an HTTP client * @param {ProgressCallback} [args.onProgress] - optional progress event callback * @param {MessageCallback} [args.onMessage] - optional message event callback * @param {AuthCallback} [args.onAuth] - optional auth fill callback * @param {AuthFailureCallback} [args.onAuthFailure] - optional auth rejected callback * @param {AuthSuccessCallback} [args.onAuthSuccess] - optional auth approved callback * @param {string} args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.ref] - Which branch to merge into. By default this is the currently checked out branch. * @param {string} [args.url] - (Added in 1.1.0) The URL of the remote repository. The default is the value set in the git config for that remote. * @param {string} [args.remote] - (Added in 1.1.0) If URL is not specified, determines which remote to use. * @param {string} [args.remoteRef] - (Added in 1.1.0) The name of the branch on the remote to fetch. By default this is the configured remote tracking branch. * @param {string} [args.corsProxy] - Optional [CORS proxy](https://www.npmjs.com/%40isomorphic-git/cors-proxy). Overrides value in repo config. * @param {boolean} [args.singleBranch = false] - Instead of the default behavior of fetching all the branches, only fetch a single branch. * @param {Object} [args.headers] - Additional headers to include in HTTP requests, similar to git's `extraHeader` config * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully when pull operation completes * * @example * await git.fastForward({ * fs, * http, * dir: '/tutorial', * ref: 'main', * singleBranch: true * }) * console.log('done') * */ export function fastForward({ fs, http, onProgress, onMessage, onAuth, onAuthSuccess, onAuthFailure, dir, gitdir, ref, url, remote, remoteRef, corsProxy, singleBranch, headers, cache, }: { fs: CallbackFsClient | PromiseFsClient; http: HttpClient; onProgress?: ProgressCallback; onMessage?: MessageCallback; onAuth?: AuthCallback; onAuthFailure?: AuthFailureCallback; onAuthSuccess?: AuthSuccessCallback; dir: string; gitdir?: string; ref?: string; url?: string; remote?: string; remoteRef?: string; corsProxy?: string; singleBranch?: boolean; headers?: { [x: string]: string; }; cache?: any; }): Promise; /** * * @typedef {object} FetchResult - The object returned has the following schema: * @property {string | null} defaultBranch - The branch that is cloned if no branch is specified * @property {string | null} fetchHead - The SHA-1 object id of the fetched head commit * @property {string | null} fetchHeadDescription - a textual description of the branch that was fetched * @property {Object} [headers] - The HTTP response headers returned by the git server * @property {string[]} [pruned] - A list of branches that were pruned, if you provided the `prune` parameter * */ /** * Fetch commits from a remote repository * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {HttpClient} args.http - an HTTP client * @param {ProgressCallback} [args.onProgress] - optional progress event callback * @param {MessageCallback} [args.onMessage] - optional message event callback * @param {AuthCallback} [args.onAuth] - optional auth fill callback * @param {AuthFailureCallback} [args.onAuthFailure] - optional auth rejected callback * @param {AuthSuccessCallback} [args.onAuthSuccess] - optional auth approved callback * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.url] - The URL of the remote repository. The default is the value set in the git config for that remote. * @param {string} [args.remote] - If URL is not specified, determines which remote to use. * @param {boolean} [args.singleBranch = false] - Instead of the default behavior of fetching all the branches, only fetch a single branch. * @param {string} [args.ref] - Which branch to fetch if `singleBranch` is true. By default this is the current branch or the remote's default branch. * @param {string} [args.remoteRef] - The name of the branch on the remote to fetch if `singleBranch` is true. By default this is the configured remote tracking branch. * @param {boolean} [args.tags = false] - Also fetch tags * @param {number} [args.depth] - Integer. Determines how much of the git repository's history to retrieve * @param {boolean} [args.relative = false] - Changes the meaning of `depth` to be measured from the current shallow depth rather than from the branch tip. * @param {Date} [args.since] - Only fetch commits created after the given date. Mutually exclusive with `depth`. * @param {string[]} [args.exclude = []] - A list of branches or tags. Instructs the remote server not to send us any commits reachable from these refs. * @param {boolean} [args.prune = false] - Delete local remote-tracking branches that are not present on the remote * @param {boolean} [args.pruneTags = false] - Prune local tags that don’t exist on the remote, and force-update those tags that differ * @param {string} [args.corsProxy] - Optional [CORS proxy](https://www.npmjs.com/%40isomorphic-git/cors-proxy). Overrides value in repo config. * @param {Object} [args.headers] - Additional headers to include in HTTP requests, similar to git's `extraHeader` config * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully when fetch completes * @see FetchResult * * @example * let result = await git.fetch({ * fs, * http, * dir: '/tutorial', * corsProxy: 'https://cors.isomorphic-git.org', * url: 'https://github.com/isomorphic-git/isomorphic-git', * ref: 'main', * depth: 1, * singleBranch: true, * tags: false * }) * console.log(result) * */ export function fetch({ fs, http, onProgress, onMessage, onAuth, onAuthSuccess, onAuthFailure, dir, gitdir, ref, remote, remoteRef, url, corsProxy, depth, since, exclude, relative, tags, singleBranch, headers, prune, pruneTags, cache, }: { fs: CallbackFsClient | PromiseFsClient; http: HttpClient; onProgress?: ProgressCallback; onMessage?: MessageCallback; onAuth?: AuthCallback; onAuthFailure?: AuthFailureCallback; onAuthSuccess?: AuthSuccessCallback; dir?: string; gitdir?: string; url?: string; remote?: string; singleBranch?: boolean; ref?: string; remoteRef?: string; tags?: boolean; depth?: number; relative?: boolean; since?: Date; exclude?: string[]; prune?: boolean; pruneTags?: boolean; corsProxy?: string; headers?: { [x: string]: string; }; cache?: any; }): Promise; /** * Find the merge base for a set of commits * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string[]} args.oids - Which commits * @param {object} [args.cache] - a [cache](cache.md) object * */ export function findMergeBase({ fs, dir, gitdir, oids, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; oids: string[]; cache?: any; }): Promise; /** * Find the root git directory * * Starting at `filepath`, walks upward until it finds a directory that contains a subdirectory called '.git'. * * @param {Object} args * @param {FsClient} args.fs - a file system client * @param {string} args.filepath - The file directory to start searching in. * * @returns {Promise} Resolves successfully with a root git directory path * @throws {NotFoundError} * * @example * let gitroot = await git.findRoot({ * fs, * filepath: '/tutorial/src/utils' * }) * console.log(gitroot) * */ export function findRoot({ fs, filepath }: { fs: CallbackFsClient | PromiseFsClient; filepath: string; }): Promise; /** * Read an entry from the git config files. * * *Caveats:* * - Currently only the local `$GIT_DIR/config` file can be read or written. However support for the global `~/.gitconfig` and system `$(prefix)/etc/gitconfig` will be added in the future. * - The current parser does not support the more exotic features of the git-config file format such as `[include]` and `[includeIf]`. * * @param {Object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.path - The key of the git config entry * * @returns {Promise} Resolves with the config value * * @example * // Read config value * let value = await git.getConfig({ * fs, * dir: '/tutorial', * path: 'remote.origin.url' * }) * console.log(value) * */ export function getConfig({ fs, dir, gitdir, path }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; path: string; }): Promise; /** * Read a multi-valued entry from the git config files. * * *Caveats:* * - Currently only the local `$GIT_DIR/config` file can be read or written. However support for the global `~/.gitconfig` and system `$(prefix)/etc/gitconfig` will be added in the future. * - The current parser does not support the more exotic features of the git-config file format such as `[include]` and `[includeIf]`. * * @param {Object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.path - The key of the git config entry * * @returns {Promise>} Resolves with the config value * */ export function getConfigAll({ fs, dir, gitdir, path, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; path: string; }): Promise; /** * * @typedef {Object} GetRemoteInfoResult - The object returned has the following schema: * @property {string[]} capabilities - The list of capabilities returned by the server (part of the Git protocol) * @property {Object} [refs] * @property {string} [HEAD] - The default branch of the remote * @property {Object} [refs.heads] - The branches on the remote * @property {Object} [refs.pull] - The special branches representing pull requests (non-standard) * @property {Object} [refs.tags] - The tags on the remote * */ /** * List a remote servers branches, tags, and capabilities. * * This is a rare command that doesn't require an `fs`, `dir`, or even `gitdir` argument. * It just communicates to a remote git server, using the first step of the `git-upload-pack` handshake, but stopping short of fetching the packfile. * * @param {object} args * @param {HttpClient} args.http - an HTTP client * @param {AuthCallback} [args.onAuth] - optional auth fill callback * @param {AuthFailureCallback} [args.onAuthFailure] - optional auth rejected callback * @param {AuthSuccessCallback} [args.onAuthSuccess] - optional auth approved callback * @param {string} args.url - The URL of the remote repository. Will be gotten from gitconfig if absent. * @param {string} [args.corsProxy] - Optional [CORS proxy](https://www.npmjs.com/%40isomorphic-git/cors-proxy). Overrides value in repo config. * @param {boolean} [args.forPush = false] - By default, the command queries the 'fetch' capabilities. If true, it will ask for the 'push' capabilities. * @param {Object} [args.headers] - Additional headers to include in HTTP requests, similar to git's `extraHeader` config * * @returns {Promise} Resolves successfully with an object listing the branches, tags, and capabilities of the remote. * @see GetRemoteInfoResult * * @example * let info = await git.getRemoteInfo({ * http, * url: * "https://cors.isomorphic-git.org/github.com/isomorphic-git/isomorphic-git.git" * }); * console.log(info); * */ export function getRemoteInfo({ http, onAuth, onAuthSuccess, onAuthFailure, corsProxy, url, headers, forPush, }: { http: HttpClient; onAuth?: AuthCallback; onAuthFailure?: AuthFailureCallback; onAuthSuccess?: AuthSuccessCallback; url: string; corsProxy?: string; forPush?: boolean; headers?: { [x: string]: string; }; }): Promise; /** * @typedef {Object} GetRemoteInfo2Result - This object has the following schema: * @property {1 | 2} protocolVersion - Git protocol version the server supports * @property {Object} capabilities - An object of capabilities represented as keys and values * @property {ServerRef[]} [refs] - Server refs (they get returned by protocol version 1 whether you want them or not) */ /** * List a remote server's capabilities. * * This is a rare command that doesn't require an `fs`, `dir`, or even `gitdir` argument. * It just communicates to a remote git server, determining what protocol version, commands, and features it supports. * * > The successor to [`getRemoteInfo`](./getRemoteInfo.md), this command supports Git Wire Protocol Version 2. * > Therefore its return type is more complicated as either: * > * > - v1 capabilities (and refs) or * > - v2 capabilities (and no refs) * > * > are returned. * > If you just care about refs, use [`listServerRefs`](./listServerRefs.md) * * @param {object} args * @param {HttpClient} args.http - an HTTP client * @param {AuthCallback} [args.onAuth] - optional auth fill callback * @param {AuthFailureCallback} [args.onAuthFailure] - optional auth rejected callback * @param {AuthSuccessCallback} [args.onAuthSuccess] - optional auth approved callback * @param {string} args.url - The URL of the remote repository. Will be gotten from gitconfig if absent. * @param {string} [args.corsProxy] - Optional [CORS proxy](https://www.npmjs.com/%40isomorphic-git/cors-proxy). Overrides value in repo config. * @param {boolean} [args.forPush = false] - By default, the command queries the 'fetch' capabilities. If true, it will ask for the 'push' capabilities. * @param {Object} [args.headers] - Additional headers to include in HTTP requests, similar to git's `extraHeader` config * @param {1 | 2} [args.protocolVersion = 2] - Which version of the Git Protocol to use. * * @returns {Promise} Resolves successfully with an object listing the capabilities of the remote. * @see GetRemoteInfo2Result * @see ServerRef * * @example * let info = await git.getRemoteInfo2({ * http, * corsProxy: "https://cors.isomorphic-git.org", * url: "https://github.com/isomorphic-git/isomorphic-git.git" * }); * console.log(info); * */ export function getRemoteInfo2({ http, onAuth, onAuthSuccess, onAuthFailure, corsProxy, url, headers, forPush, protocolVersion, }: { http: HttpClient; onAuth?: AuthCallback; onAuthFailure?: AuthFailureCallback; onAuthSuccess?: AuthSuccessCallback; url: string; corsProxy?: string; forPush?: boolean; headers?: { [x: string]: string; }; protocolVersion?: 1 | 2; }): Promise; /** * * @typedef {object} HashBlobResult - The object returned has the following schema: * @property {string} oid - The SHA-1 object id * @property {'blob'} type - The type of the object * @property {Uint8Array} object - The wrapped git object (the thing that is hashed) * @property {'wrapped'} format - The format of the object * */ /** * Compute what the SHA-1 object id of a file would be * * @param {object} args * @param {Uint8Array|string} args.object - The object to write. If `object` is a String then it will be converted to a Uint8Array using UTF-8 encoding. * * @returns {Promise} Resolves successfully with the SHA-1 object id and the wrapped object Uint8Array. * @see HashBlobResult * * @example * let { oid, type, object, format } = await git.hashBlob({ * object: 'Hello world!', * }) * * console.log('oid', oid) * console.log('type', type) * console.log('object', object) * console.log('format', format) * */ export function hashBlob({ object }: { object: string | Uint8Array; }): Promise; /** * Create the .idx file for a given .pack file * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {ProgressCallback} [args.onProgress] - optional progress event callback * @param {string} args.dir - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.filepath - The path to the .pack file to index * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise<{oids: string[]}>} Resolves with a list of the SHA-1 object ids contained in the packfile * * @example * let packfiles = await fs.promises.readdir('/tutorial/.git/objects/pack') * packfiles = packfiles.filter(name => name.endsWith('.pack')) * console.log('packfiles', packfiles) * * const { oids } = await git.indexPack({ * fs, * dir: '/tutorial', * filepath: `.git/objects/pack/${packfiles[0]}`, * async onProgress (evt) { * console.log(`${evt.phase}: ${evt.loaded} / ${evt.total}`) * } * }) * console.log(oids) * */ export function indexPack({ fs, onProgress, dir, gitdir, filepath, cache, }: { fs: CallbackFsClient | PromiseFsClient; onProgress?: ProgressCallback; dir: string; gitdir?: string; filepath: string; cache?: any; }): Promise<{ oids: string[]; }>; /** * Initialize a new repository * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {boolean} [args.bare = false] - Initialize a bare repository * @param {string} [args.defaultBranch = 'master'] - The name of the default branch (might be changed to a required argument in 2.0.0) * @returns {Promise} Resolves successfully when filesystem operations are complete * * @example * await git.init({ fs, dir: '/tutorial' }) * console.log('done') * */ export function init({ fs, bare, dir, gitdir, defaultBranch, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; bare?: boolean; defaultBranch?: string; }): Promise; /** * Check whether a git commit is descended from another * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.oid - The descendent commit * @param {string} args.ancestor - The (proposed) ancestor commit * @param {number} [args.depth = -1] - Maximum depth to search before giving up. -1 means no maximum depth. * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves to true if `oid` is a descendent of `ancestor` * * @example * let oid = await git.resolveRef({ fs, dir: '/tutorial', ref: 'main' }) * let ancestor = await git.resolveRef({ fs, dir: '/tutorial', ref: 'v0.20.0' }) * console.log(oid, ancestor) * await git.isDescendent({ fs, dir: '/tutorial', oid, ancestor, depth: -1 }) * */ export function isDescendent({ fs, dir, gitdir, oid, ancestor, depth, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; oid: string; ancestor: string; depth?: number; cache?: any; }): Promise; /** * Test whether a filepath should be ignored (because of .gitignore or .git/exclude) * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} args.dir - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir, '.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.filepath - The filepath to test * * @returns {Promise} Resolves to true if the file should be ignored * * @example * await git.isIgnored({ fs, dir: '/tutorial', filepath: 'docs/add.md' }) * */ export function isIgnored({ fs, dir, gitdir, filepath, }: { fs: CallbackFsClient | PromiseFsClient; dir: string; gitdir?: string; filepath: string; }): Promise; /** * List branches * * By default it lists local branches. If a 'remote' is specified, it lists the remote's branches. When listing remote branches, the HEAD branch is not filtered out, so it may be included in the list of results. * * Note that specifying a remote does not actually contact the server and update the list of branches. * If you want an up-to-date list, first do a `fetch` to that remote. * (Which branch you fetch doesn't matter - the list of branches available on the remote is updated during the fetch handshake.) * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.remote] - Instead of the branches in `refs/heads`, list the branches in `refs/remotes/${remote}`. * * @returns {Promise>} Resolves successfully with an array of branch names * * @example * let branches = await git.listBranches({ fs, dir: '/tutorial' }) * console.log(branches) * let remoteBranches = await git.listBranches({ fs, dir: '/tutorial', remote: 'origin' }) * console.log(remoteBranches) * */ export function listBranches({ fs, dir, gitdir, remote, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; remote?: string; }): Promise; /** * List all the files in the git index or a commit * * > Note: This function is efficient for listing the files in the staging area, but listing all the files in a commit requires recursively walking through the git object store. * > If you do not require a complete list of every file, better performance can be achieved by using [walk](./walk) and ignoring subdirectories you don't care about. * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.ref] - Return a list of all the files in the commit at `ref` instead of the files currently in the git index (aka staging area) * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise>} Resolves successfully with an array of filepaths * * @example * // All the files in the previous commit * let files = await git.listFiles({ fs, dir: '/tutorial', ref: 'HEAD' }) * console.log(files) * // All the files in the current staging area * files = await git.listFiles({ fs, dir: '/tutorial' }) * console.log(files) * */ export function listFiles({ fs, dir, gitdir, ref, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; ref?: string; cache?: any; }): Promise; /** * List all the object notes * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.ref] - The notes ref to look under * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise>} Resolves successfully with an array of entries containing SHA-1 object ids of the note and the object the note targets */ export function listNotes({ fs, dir, gitdir, ref, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; ref?: string; cache?: any; }): Promise<{ target: string; note: string; }[]>; /** * List remotes * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * * @returns {Promise>} Resolves successfully with an array of `{remote, url}` objects * * @example * let remotes = await git.listRemotes({ fs, dir: '/tutorial' }) * console.log(remotes) * */ export function listRemotes({ fs, dir, gitdir }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; }): Promise<{ remote: string; url: string; }[]>; /** * Fetch a list of refs (branches, tags, etc) from a server. * * This is a rare command that doesn't require an `fs`, `dir`, or even `gitdir` argument. * It just requires an `http` argument. * * ### About `protocolVersion` * * There's a rather fun trade-off between Git Protocol Version 1 and Git Protocol Version 2. * Version 2 actually requires 2 HTTP requests instead of 1, making it similar to fetch or push in that regard. * However, version 2 supports server-side filtering by prefix, whereas that filtering is done client-side in version 1. * Which protocol is most efficient therefore depends on the number of refs on the remote, the latency of the server, and speed of the network connection. * For an small repos (or fast Internet connections), the requirement to make two trips to the server makes protocol 2 slower. * But for large repos (or slow Internet connections), the decreased payload size of the second request makes up for the additional request. * * Hard numbers vary by situation, but here's some numbers from my machine: * * Using isomorphic-git in a browser, with a CORS proxy, listing only the branches (refs/heads) of https://github.com/isomorphic-git/isomorphic-git * - Protocol Version 1 took ~300ms and transfered 84 KB. * - Protocol Version 2 took ~500ms and transfered 4.1 KB. * * Using isomorphic-git in a browser, with a CORS proxy, listing only the branches (refs/heads) of https://gitlab.com/gitlab-org/gitlab * - Protocol Version 1 took ~4900ms and transfered 9.41 MB. * - Protocol Version 2 took ~1280ms and transfered 433 KB. * * Finally, there is a fun quirk regarding the `symrefs` parameter. * Protocol Version 1 will generally only return the `HEAD` symref and not others. * Historically, this meant that servers don't use symbolic refs except for `HEAD`, which is used to point at the "default branch". * However Protocol Version 2 can return *all* the symbolic refs on the server. * So if you are running your own git server, you could take advantage of that I guess. * * #### TL;DR * If you are _not_ taking advantage of `prefix` I would recommend `protocolVersion: 1`. * Otherwise, I recommend to use the default which is `protocolVersion: 2`. * * @param {object} args * @param {HttpClient} args.http - an HTTP client * @param {AuthCallback} [args.onAuth] - optional auth fill callback * @param {AuthFailureCallback} [args.onAuthFailure] - optional auth rejected callback * @param {AuthSuccessCallback} [args.onAuthSuccess] - optional auth approved callback * @param {string} args.url - The URL of the remote repository. Will be gotten from gitconfig if absent. * @param {string} [args.corsProxy] - Optional [CORS proxy](https://www.npmjs.com/%40isomorphic-git/cors-proxy). Overrides value in repo config. * @param {boolean} [args.forPush = false] - By default, the command queries the 'fetch' capabilities. If true, it will ask for the 'push' capabilities. * @param {Object} [args.headers] - Additional headers to include in HTTP requests, similar to git's `extraHeader` config * @param {1 | 2} [args.protocolVersion = 2] - Which version of the Git Protocol to use. * @param {string} [args.prefix] - Only list refs that start with this prefix * @param {boolean} [args.symrefs = false] - Include symbolic ref targets * @param {boolean} [args.peelTags = false] - Include annotated tag peeled targets * * @returns {Promise} Resolves successfully with an array of ServerRef objects * @see ServerRef * * @example * // List all the branches on a repo * let refs = await git.listServerRefs({ * http, * corsProxy: "https://cors.isomorphic-git.org", * url: "https://github.com/isomorphic-git/isomorphic-git.git", * prefix: "refs/heads/", * }); * console.log(refs); * * @example * // Get the default branch on a repo * let refs = await git.listServerRefs({ * http, * corsProxy: "https://cors.isomorphic-git.org", * url: "https://github.com/isomorphic-git/isomorphic-git.git", * prefix: "HEAD", * symrefs: true, * }); * console.log(refs); * * @example * // List all the tags on a repo * let refs = await git.listServerRefs({ * http, * corsProxy: "https://cors.isomorphic-git.org", * url: "https://github.com/isomorphic-git/isomorphic-git.git", * prefix: "refs/tags/", * peelTags: true, * }); * console.log(refs); * * @example * // List all the pull requests on a repo * let refs = await git.listServerRefs({ * http, * corsProxy: "https://cors.isomorphic-git.org", * url: "https://github.com/isomorphic-git/isomorphic-git.git", * prefix: "refs/pull/", * }); * console.log(refs); * */ export function listServerRefs({ http, onAuth, onAuthSuccess, onAuthFailure, corsProxy, url, headers, forPush, protocolVersion, prefix, symrefs, peelTags, }: { http: HttpClient; onAuth?: AuthCallback; onAuthFailure?: AuthFailureCallback; onAuthSuccess?: AuthSuccessCallback; url: string; corsProxy?: string; forPush?: boolean; headers?: { [x: string]: string; }; protocolVersion?: 1 | 2; prefix?: string; symrefs?: boolean; peelTags?: boolean; }): Promise; /** * List tags * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * * @returns {Promise>} Resolves successfully with an array of tag names * * @example * let tags = await git.listTags({ fs, dir: '/tutorial' }) * console.log(tags) * */ export function listTags({ fs, dir, gitdir }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; }): Promise; /** * Get commit descriptions from the git history * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string=} args.filepath optional get the commit for the filepath only * @param {string} [args.ref = 'HEAD'] - The commit to begin walking backwards through the history from * @param {number=} [args.depth] - Limit the number of commits returned. No limit by default. * @param {Date} [args.since] - Return history newer than the given date. Can be combined with `depth` to get whichever is shorter. * @param {boolean=} [args.force=false] do not throw error if filepath is not exist (works only for a single file). defaults to false * @param {boolean=} [args.follow=false] Continue listing the history of a file beyond renames (works only for a single file). defaults to false * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise>} Resolves to an array of ReadCommitResult objects * @see ReadCommitResult * @see CommitObject * * @example * let commits = await git.log({ * fs, * dir: '/tutorial', * depth: 5, * ref: 'main' * }) * console.log(commits) * */ export function log({ fs, dir, gitdir, filepath, ref, depth, since, force, follow, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; filepath?: string | undefined; ref?: string; depth?: number | undefined; since?: Date; force?: boolean | undefined; follow?: boolean | undefined; cache?: any; }): Promise; /** * * @typedef {Object} MergeResult - Returns an object with a schema like this: * @property {string} [oid] - The SHA-1 object id that is now at the head of the branch. Absent only if `dryRun` was specified and `mergeCommit` is true. * @property {boolean} [alreadyMerged] - True if the branch was already merged so no changes were made * @property {boolean} [fastForward] - True if it was a fast-forward merge * @property {boolean} [mergeCommit] - True if merge resulted in a merge commit * @property {string} [tree] - The SHA-1 object id of the tree resulting from a merge commit * */ /** * Merge two branches * * Currently it will fail if multiple candidate merge bases are found. (It doesn't yet implement the recursive merge strategy.) * * Currently it does not support selecting alternative merge strategies. * * Currently it is not possible to abort an incomplete merge. To restore the worktree to a clean state, you will need to checkout an earlier commit. * * Currently it does not directly support the behavior of `git merge --continue`. To complete a merge after manual conflict resolution, you will need to add and commit the files manually, and specify the appropriate parent commits. * * ## Manually resolving merge conflicts * By default, if isomorphic-git encounters a merge conflict it cannot resolve using the builtin diff3 algorithm or provided merge driver, it will abort and throw a `MergeNotSupportedError`. * This leaves the index and working tree untouched. * * When `abortOnConflict` is set to `false`, and a merge conflict cannot be automatically resolved, a `MergeConflictError` is thrown and the results of the incomplete merge will be written to the working directory. * This includes conflict markers in files with unresolved merge conflicts. * * To complete the merge, edit the conflicting files as you see fit, and then add and commit the resolved merge. * * For a proper merge commit, be sure to specify the branches or commits you are merging in the `parent` argument to `git.commit`. * For example, say we are merging the branch `feature` into the branch `main` and there is a conflict we want to resolve manually. * The flow would look like this: * * ``` * await git.merge({ * fs, * dir, * ours: 'main', * theirs: 'feature', * abortOnConflict: false, * }).catch(e => { * if (e instanceof Errors.MergeConflictError) { * console.log( * 'Automatic merge failed for the following files: ' * + `${e.data}. ` * + 'Resolve these conflicts and then commit your changes.' * ) * } else throw e * }) * * // This is the where we manually edit the files that have been written to the working directory * // ... * // Files have been edited and we are ready to commit * * await git.add({ * fs, * dir, * filepath: '.', * }) * * await git.commit({ * fs, * dir, * ref: 'main', * message: "Merge branch 'feature' into main", * parent: ['main', 'feature'], // Be sure to specify the parents when creating a merge commit * }) * ``` * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {SignCallback} [args.onSign] - a PGP signing implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.ours] - The branch receiving the merge. If undefined, defaults to the current branch. * @param {string} args.theirs - The branch to be merged * @param {boolean} [args.fastForward = true] - If false, create a merge commit in all cases. * @param {boolean} [args.fastForwardOnly = false] - If true, then non-fast-forward merges will throw an Error instead of performing a merge. * @param {boolean} [args.dryRun = false] - If true, simulates a merge so you can test whether it would succeed. * @param {boolean} [args.noUpdateBranch = false] - If true, does not update the branch pointer after creating the commit. * @param {boolean} [args.abortOnConflict = true] - If true, merges with conflicts will not update the worktree or index. * @param {string} [args.message] - Overrides the default auto-generated merge commit message * @param {Object} [args.author] - passed to [commit](commit.md) when creating a merge commit * @param {string} [args.author.name] - Default is `user.name` config. * @param {string} [args.author.email] - Default is `user.email` config. * @param {number} [args.author.timestamp=Math.floor(Date.now()/1000)] - Set the author timestamp field. This is the integer number of seconds since the Unix epoch (1970-01-01 00:00:00). * @param {number} [args.author.timezoneOffset] - Set the author timezone offset field. This is the difference, in minutes, from the current timezone to UTC. Default is `(new Date()).getTimezoneOffset()`. * @param {Object} [args.committer] - passed to [commit](commit.md) when creating a merge commit * @param {string} [args.committer.name] - Default is `user.name` config. * @param {string} [args.committer.email] - Default is `user.email` config. * @param {number} [args.committer.timestamp=Math.floor(Date.now()/1000)] - Set the committer timestamp field. This is the integer number of seconds since the Unix epoch (1970-01-01 00:00:00). * @param {number} [args.committer.timezoneOffset] - Set the committer timezone offset field. This is the difference, in minutes, from the current timezone to UTC. Default is `(new Date()).getTimezoneOffset()`. * @param {string} [args.signingKey] - passed to [commit](commit.md) when creating a merge commit * @param {object} [args.cache] - a [cache](cache.md) object * @param {MergeDriverCallback} [args.mergeDriver] - a [merge driver](mergeDriver.md) implementation * * @returns {Promise} Resolves to a description of the merge operation * @see MergeResult * * @example * let m = await git.merge({ * fs, * dir: '/tutorial', * ours: 'main', * theirs: 'remotes/origin/main' * }) * console.log(m) * */ export function merge({ fs: _fs, onSign, dir, gitdir, ours, theirs, fastForward, fastForwardOnly, dryRun, noUpdateBranch, abortOnConflict, message, author: _author, committer: _committer, signingKey, cache, mergeDriver, }: { fs: CallbackFsClient | PromiseFsClient; onSign?: SignCallback; dir?: string; gitdir?: string; ours?: string; theirs: string; fastForward?: boolean; fastForwardOnly?: boolean; dryRun?: boolean; noUpdateBranch?: boolean; abortOnConflict?: boolean; message?: string; author?: { name?: string; email?: string; timestamp?: number; timezoneOffset?: number; }; committer?: { name?: string; email?: string; timestamp?: number; timezoneOffset?: number; }; signingKey?: string; cache?: any; mergeDriver?: MergeDriverCallback; }): Promise; /** * * @typedef {Object} PackObjectsResult The packObjects command returns an object with two properties: * @property {string} filename - The suggested filename for the packfile if you want to save it to disk somewhere. It includes the packfile SHA. * @property {Uint8Array} [packfile] - The packfile contents. Not present if `write` parameter was true, in which case the packfile was written straight to disk. */ /** * Create a packfile from an array of SHA-1 object ids * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir, '.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string[]} args.oids - An array of SHA-1 object ids to be included in the packfile * @param {boolean} [args.write = false] - Whether to save the packfile to disk or not * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully when the packfile is ready with the filename and buffer * @see PackObjectsResult * * @example * // Create a packfile containing only an empty tree * let { packfile } = await git.packObjects({ * fs, * dir: '/tutorial', * oids: ['4b825dc642cb6eb9a060e54bf8d69288fbee4904'] * }) * console.log(packfile) * */ export function packObjects({ fs, dir, gitdir, oids, write, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; oids: string[]; write?: boolean; cache?: any; }): Promise; /** * Fetch and merge commits from a remote repository * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {HttpClient} args.http - an HTTP client * @param {ProgressCallback} [args.onProgress] - optional progress event callback * @param {MessageCallback} [args.onMessage] - optional message event callback * @param {AuthCallback} [args.onAuth] - optional auth fill callback * @param {AuthFailureCallback} [args.onAuthFailure] - optional auth rejected callback * @param {AuthSuccessCallback} [args.onAuthSuccess] - optional auth approved callback * @param {string} args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.ref] - Which branch to merge into. By default this is the currently checked out branch. * @param {string} [args.url] - (Added in 1.1.0) The URL of the remote repository. The default is the value set in the git config for that remote. * @param {string} [args.remote] - (Added in 1.1.0) If URL is not specified, determines which remote to use. * @param {string} [args.remoteRef] - (Added in 1.1.0) The name of the branch on the remote to fetch. By default this is the configured remote tracking branch. * @param {boolean} [args.prune = false] - Delete local remote-tracking branches that are not present on the remote * @param {boolean} [args.pruneTags = false] - Prune local tags that don’t exist on the remote, and force-update those tags that differ * @param {string} [args.corsProxy] - Optional [CORS proxy](https://www.npmjs.com/%40isomorphic-git/cors-proxy). Overrides value in repo config. * @param {boolean} [args.singleBranch = false] - Instead of the default behavior of fetching all the branches, only fetch a single branch. * @param {boolean} [args.fastForward = true] - If false, only create merge commits. * @param {boolean} [args.fastForwardOnly = false] - Only perform simple fast-forward merges. (Don't create merge commits.) * @param {Object} [args.headers] - Additional headers to include in HTTP requests, similar to git's `extraHeader` config * @param {Object} [args.author] - The details about the author. * @param {string} [args.author.name] - Default is `user.name` config. * @param {string} [args.author.email] - Default is `user.email` config. * @param {number} [args.author.timestamp=Math.floor(Date.now()/1000)] - Set the author timestamp field. This is the integer number of seconds since the Unix epoch (1970-01-01 00:00:00). * @param {number} [args.author.timezoneOffset] - Set the author timezone offset field. This is the difference, in minutes, from the current timezone to UTC. Default is `(new Date()).getTimezoneOffset()`. * @param {Object} [args.committer = author] - The details about the commit committer, in the same format as the author parameter. If not specified, the author details are used. * @param {string} [args.committer.name] - Default is `user.name` config. * @param {string} [args.committer.email] - Default is `user.email` config. * @param {number} [args.committer.timestamp=Math.floor(Date.now()/1000)] - Set the committer timestamp field. This is the integer number of seconds since the Unix epoch (1970-01-01 00:00:00). * @param {number} [args.committer.timezoneOffset] - Set the committer timezone offset field. This is the difference, in minutes, from the current timezone to UTC. Default is `(new Date()).getTimezoneOffset()`. * @param {string} [args.signingKey] - passed to [commit](commit.md) when creating a merge commit * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully when pull operation completes * * @example * await git.pull({ * fs, * http, * dir: '/tutorial', * ref: 'main', * singleBranch: true * }) * console.log('done') * */ export function pull({ fs: _fs, http, onProgress, onMessage, onAuth, onAuthSuccess, onAuthFailure, dir, gitdir, ref, url, remote, remoteRef, prune, pruneTags, fastForward, fastForwardOnly, corsProxy, singleBranch, headers, author: _author, committer: _committer, signingKey, cache, }: { fs: CallbackFsClient | PromiseFsClient; http: HttpClient; onProgress?: ProgressCallback; onMessage?: MessageCallback; onAuth?: AuthCallback; onAuthFailure?: AuthFailureCallback; onAuthSuccess?: AuthSuccessCallback; dir: string; gitdir?: string; ref?: string; url?: string; remote?: string; remoteRef?: string; prune?: boolean; pruneTags?: boolean; corsProxy?: string; singleBranch?: boolean; fastForward?: boolean; fastForwardOnly?: boolean; headers?: { [x: string]: string; }; author?: { name?: string; email?: string; timestamp?: number; timezoneOffset?: number; }; committer?: { name?: string; email?: string; timestamp?: number; timezoneOffset?: number; }; signingKey?: string; cache?: any; }): Promise; /** * Push a branch or tag * * The push command returns an object that describes the result of the attempted push operation. * *Notes:* If there were no errors, then there will be no `errors` property. There can be a mix of `ok` messages and `errors` messages. * * | param | type [= default] | description | * | ------ | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | * | ok | Array\ | The first item is "unpack" if the overall operation was successful. The remaining items are the names of refs that were updated successfully. | * | errors | Array\ | If the overall operation threw and error, the first item will be "unpack {Overall error message}". The remaining items are individual refs that failed to be updated in the format "{ref name} {error message}". | * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {HttpClient} args.http - an HTTP client * @param {ProgressCallback} [args.onProgress] - optional progress event callback * @param {MessageCallback} [args.onMessage] - optional message event callback * @param {AuthCallback} [args.onAuth] - optional auth fill callback * @param {AuthFailureCallback} [args.onAuthFailure] - optional auth rejected callback * @param {AuthSuccessCallback} [args.onAuthSuccess] - optional auth approved callback * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.ref] - Which branch to push. By default this is the currently checked out branch. * @param {string} [args.url] - The URL of the remote repository. The default is the value set in the git config for that remote. * @param {string} [args.remote] - If URL is not specified, determines which remote to use. * @param {string} [args.remoteRef] - The name of the receiving branch on the remote. By default this is the configured remote tracking branch. * @param {boolean} [args.force = false] - If true, behaves the same as `git push --force` * @param {boolean} [args.delete = false] - If true, delete the remote ref * @param {string} [args.corsProxy] - Optional [CORS proxy](https://www.npmjs.com/%40isomorphic-git/cors-proxy). Overrides value in repo config. * @param {Object} [args.headers] - Additional headers to include in HTTP requests, similar to git's `extraHeader` config * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully when push completes with a detailed description of the operation from the server. * @see PushResult * @see RefUpdateStatus * * @example * let pushResult = await git.push({ * fs, * http, * dir: '/tutorial', * remote: 'origin', * ref: 'main', * onAuth: () => ({ username: process.env.GITHUB_TOKEN }), * }) * console.log(pushResult) * */ export function push({ fs, http, onProgress, onMessage, onAuth, onAuthSuccess, onAuthFailure, dir, gitdir, ref, remoteRef, remote, url, force, delete: _delete, corsProxy, headers, cache, }: { fs: CallbackFsClient | PromiseFsClient; http: HttpClient; onProgress?: ProgressCallback; onMessage?: MessageCallback; onAuth?: AuthCallback; onAuthFailure?: AuthFailureCallback; onAuthSuccess?: AuthSuccessCallback; dir?: string; gitdir?: string; ref?: string; url?: string; remote?: string; remoteRef?: string; force?: boolean; delete?: boolean; corsProxy?: string; headers?: { [x: string]: string; }; cache?: any; }): Promise; /** * * @typedef {Object} ReadBlobResult - The object returned has the following schema: * @property {string} oid * @property {Uint8Array} blob * */ /** * Read a blob object directly * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.oid - The SHA-1 object id to get. Annotated tags, commits, and trees are peeled. * @param {string} [args.filepath] - Don't return the object with `oid` itself, but resolve `oid` to a tree and then return the blob object at that filepath. * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully with a blob object description * @see ReadBlobResult * * @example * // Get the contents of 'README.md' in the main branch. * let commitOid = await git.resolveRef({ fs, dir: '/tutorial', ref: 'main' }) * console.log(commitOid) * let { blob } = await git.readBlob({ * fs, * dir: '/tutorial', * oid: commitOid, * filepath: 'README.md' * }) * console.log(Buffer.from(blob).toString('utf8')) * */ export function readBlob({ fs, dir, gitdir, oid, filepath, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; oid: string; filepath?: string; cache?: any; }): Promise; /** * Read a commit object directly * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.oid - The SHA-1 object id to get. Annotated tags are peeled. * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully with a git commit object * @see ReadCommitResult * @see CommitObject * * @example * // Read a commit object * let sha = await git.resolveRef({ fs, dir: '/tutorial', ref: 'main' }) * console.log(sha) * let commit = await git.readCommit({ fs, dir: '/tutorial', oid: sha }) * console.log(commit) * */ export function readCommit({ fs, dir, gitdir, oid, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; oid: string; cache?: any; }): Promise; /** * Read the contents of a note * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.ref] - The notes ref to look under * @param {string} args.oid - The SHA-1 object id of the object to get the note for. * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully with note contents as a Buffer. */ export function readNote({ fs, dir, gitdir, ref, oid, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; ref?: string; oid: string; cache?: any; }): Promise; /** * * @typedef {Object} DeflatedObject * @property {string} oid * @property {'deflated'} type * @property {'deflated'} format * @property {Uint8Array} object * @property {string} [source] * */ /** * * @typedef {Object} WrappedObject * @property {string} oid * @property {'wrapped'} type * @property {'wrapped'} format * @property {Uint8Array} object * @property {string} [source] * */ /** * * @typedef {Object} RawObject * @property {string} oid * @property {'blob'|'commit'|'tree'|'tag'} type * @property {'content'} format * @property {Uint8Array} object * @property {string} [source] * */ /** * * @typedef {Object} ParsedBlobObject * @property {string} oid * @property {'blob'} type * @property {'parsed'} format * @property {string} object * @property {string} [source] * */ /** * * @typedef {Object} ParsedCommitObject * @property {string} oid * @property {'commit'} type * @property {'parsed'} format * @property {CommitObject} object * @property {string} [source] * */ /** * * @typedef {Object} ParsedTreeObject * @property {string} oid * @property {'tree'} type * @property {'parsed'} format * @property {TreeObject} object * @property {string} [source] * */ /** * * @typedef {Object} ParsedTagObject * @property {string} oid * @property {'tag'} type * @property {'parsed'} format * @property {TagObject} object * @property {string} [source] * */ /** * * @typedef {ParsedBlobObject | ParsedCommitObject | ParsedTreeObject | ParsedTagObject} ParsedObject */ /** * * @typedef {DeflatedObject | WrappedObject | RawObject | ParsedObject } ReadObjectResult */ /** * Read a git object directly by its SHA-1 object id * * Regarding `ReadObjectResult`: * * - `oid` will be the same as the `oid` argument unless the `filepath` argument is provided, in which case it will be the oid of the tree or blob being returned. * - `type` of deflated objects is `'deflated'`, and `type` of wrapped objects is `'wrapped'` * - `format` is usually, but not always, the format you requested. Packfiles do not store each object individually compressed so if you end up reading the object from a packfile it will be returned in format 'content' even if you requested 'deflated' or 'wrapped'. * - `object` will be an actual Object if format is 'parsed' and the object is a commit, tree, or annotated tag. Blobs are still formatted as Buffers unless an encoding is provided in which case they'll be strings. If format is anything other than 'parsed', object will be a Buffer. * - `source` is the name of the packfile or loose object file where the object was found. * * The `format` parameter can have the following values: * * | param | description | * | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | * | 'deflated' | Return the raw deflate-compressed buffer for an object if possible. Useful for efficiently shuffling around loose objects when you don't care about the contents and can save time by not inflating them. | * | 'wrapped' | Return the inflated object buffer wrapped in the git object header if possible. This is the raw data used when calculating the SHA-1 object id of a git object. | * | 'content' | Return the object buffer without the git header. | * | 'parsed' | Returns a parsed representation of the object. | * * The result will be in one of the following schemas: * * ## `'deflated'` format * * {@link DeflatedObject typedef} * * ## `'wrapped'` format * * {@link WrappedObject typedef} * * ## `'content'` format * * {@link RawObject typedef} * * ## `'parsed'` format * * ### parsed `'blob'` type * * {@link ParsedBlobObject typedef} * * ### parsed `'commit'` type * * {@link ParsedCommitObject typedef} * {@link CommitObject typedef} * * ### parsed `'tree'` type * * {@link ParsedTreeObject typedef} * {@link TreeObject typedef} * {@link TreeEntry typedef} * * ### parsed `'tag'` type * * {@link ParsedTagObject typedef} * {@link TagObject typedef} * * @deprecated * > This command is overly complicated. * > * > If you know the type of object you are reading, use [`readBlob`](./readBlob.md), [`readCommit`](./readCommit.md), [`readTag`](./readTag.md), or [`readTree`](./readTree.md). * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.oid - The SHA-1 object id to get * @param {'deflated' | 'wrapped' | 'content' | 'parsed'} [args.format = 'parsed'] - What format to return the object in. The choices are described in more detail below. * @param {string} [args.filepath] - Don't return the object with `oid` itself, but resolve `oid` to a tree and then return the object at that filepath. To return the root directory of a tree set filepath to `''` * @param {string} [args.encoding] - A convenience argument that only affects blobs. Instead of returning `object` as a buffer, it returns a string parsed using the given encoding. * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully with a git object description * @see ReadObjectResult * * @example * // Given a ransom SHA-1 object id, figure out what it is * let { type, object } = await git.readObject({ * fs, * dir: '/tutorial', * oid: '0698a781a02264a6f37ba3ff41d78067eaf0f075' * }) * switch (type) { * case 'commit': { * console.log(object) * break * } * case 'tree': { * console.log(object) * break * } * case 'blob': { * console.log(object) * break * } * case 'tag': { * console.log(object) * break * } * } * */ export function readObject({ fs: _fs, dir, gitdir, oid, format, filepath, encoding, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; oid: string; format?: "parsed" | "deflated" | "content" | "wrapped"; filepath?: string; encoding?: string; cache?: any; }): Promise; /** * * @typedef {Object} ReadTagResult - The object returned has the following schema: * @property {string} oid - SHA-1 object id of this tag * @property {TagObject} tag - the parsed tag object * @property {string} payload - PGP signing payload */ /** * Read an annotated tag object directly * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.oid - The SHA-1 object id to get * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully with a git object description * @see ReadTagResult * @see TagObject * */ export function readTag({ fs, dir, gitdir, oid, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; oid: string; cache?: any; }): Promise; /** * * @typedef {Object} ReadTreeResult - The object returned has the following schema: * @property {string} oid - SHA-1 object id of this tree * @property {TreeObject} tree - the parsed tree object */ /** * Read a tree object directly * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.oid - The SHA-1 object id to get. Annotated tags and commits are peeled. * @param {string} [args.filepath] - Don't return the object with `oid` itself, but resolve `oid` to a tree and then return the tree object at that filepath. * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully with a git tree object * @see ReadTreeResult * @see TreeObject * @see TreeEntry * */ export function readTree({ fs, dir, gitdir, oid, filepath, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; oid: string; filepath?: string; cache?: any; }): Promise; /** * Remove a file from the git index (aka staging area) * * Note that this does NOT delete the file in the working directory. * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir, '.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.filepath - The path to the file to remove from the index * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully once the git index has been updated * * @example * await git.remove({ fs, dir: '/tutorial', filepath: 'README.md' }) * console.log('done') * */ export function remove({ fs: _fs, dir, gitdir, filepath, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; filepath: string; cache?: any; }): Promise; /** * Remove an object note * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {SignCallback} [args.onSign] - a PGP signing implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.ref] - The notes ref to look under * @param {string} args.oid - The SHA-1 object id of the object to remove the note from. * @param {Object} [args.author] - The details about the author. * @param {string} [args.author.name] - Default is `user.name` config. * @param {string} [args.author.email] - Default is `user.email` config. * @param {number} [args.author.timestamp=Math.floor(Date.now()/1000)] - Set the author timestamp field. This is the integer number of seconds since the Unix epoch (1970-01-01 00:00:00). * @param {number} [args.author.timezoneOffset] - Set the author timezone offset field. This is the difference, in minutes, from the current timezone to UTC. Default is `(new Date()).getTimezoneOffset()`. * @param {Object} [args.committer = author] - The details about the note committer, in the same format as the author parameter. If not specified, the author details are used. * @param {string} [args.committer.name] - Default is `user.name` config. * @param {string} [args.committer.email] - Default is `user.email` config. * @param {number} [args.committer.timestamp=Math.floor(Date.now()/1000)] - Set the committer timestamp field. This is the integer number of seconds since the Unix epoch (1970-01-01 00:00:00). * @param {number} [args.committer.timezoneOffset] - Set the committer timezone offset field. This is the difference, in minutes, from the current timezone to UTC. Default is `(new Date()).getTimezoneOffset()`. * @param {string} [args.signingKey] - Sign the tag object using this private PGP key. * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully with the SHA-1 object id of the commit object for the note removal. */ export function removeNote({ fs: _fs, onSign, dir, gitdir, ref, oid, author: _author, committer: _committer, signingKey, cache, }: { fs: CallbackFsClient | PromiseFsClient; onSign?: SignCallback; dir?: string; gitdir?: string; ref?: string; oid: string; author?: { name?: string; email?: string; timestamp?: number; timezoneOffset?: number; }; committer?: { name?: string; email?: string; timestamp?: number; timezoneOffset?: number; }; signingKey?: string; cache?: any; }): Promise; /** * Rename a branch * * @param {object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.ref - What to name the branch * @param {string} args.oldref - What the name of the branch was * @param {boolean} [args.checkout = false] - Update `HEAD` to point at the newly created branch * * @returns {Promise} Resolves successfully when filesystem operations are complete * * @example * await git.renameBranch({ fs, dir: '/tutorial', ref: 'main', oldref: 'master' }) * console.log('done') * */ export function renameBranch({ fs, dir, gitdir, ref, oldref, checkout, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; ref: string; oldref: string; checkout?: boolean; }): Promise; /** * Reset a file in the git index (aka staging area) * * Note that this does NOT modify the file in the working directory. * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir, '.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.filepath - The path to the file to reset in the index * @param {string} [args.ref = 'HEAD'] - A ref to the commit to use * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully once the git index has been updated * * @example * await git.resetIndex({ fs, dir: '/tutorial', filepath: 'README.md' }) * console.log('done') * */ export function resetIndex({ fs: _fs, dir, gitdir, filepath, ref, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; filepath: string; ref?: string; cache?: any; }): Promise; /** * Get the value of a symbolic ref or resolve a ref to its SHA-1 object id * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir, '.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.ref - The ref to resolve * @param {number} [args.depth = undefined] - How many symbolic references to follow before returning * * @returns {Promise} Resolves successfully with a SHA-1 object id or the value of a symbolic ref * * @example * let currentCommit = await git.resolveRef({ fs, dir: '/tutorial', ref: 'HEAD' }) * console.log(currentCommit) * let currentBranch = await git.resolveRef({ fs, dir: '/tutorial', ref: 'HEAD', depth: 2 }) * console.log(currentBranch) * */ export function resolveRef({ fs, dir, gitdir, ref, depth, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; ref: string; depth?: number; }): Promise; /** * Write an entry to the git config files. * * *Caveats:* * - Currently only the local `$GIT_DIR/config` file can be read or written. However support for the global `~/.gitconfig` and system `$(prefix)/etc/gitconfig` will be added in the future. * - The current parser does not support the more exotic features of the git-config file format such as `[include]` and `[includeIf]`. * * @param {Object} args * @param {FsClient} args.fs - a file system implementation * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.path - The key of the git config entry * @param {string | boolean | number | void} args.value - A value to store at that path. (Use `undefined` as the value to delete a config entry.) * @param {boolean} [args.append = false] - If true, will append rather than replace when setting (use with multi-valued config options). * * @returns {Promise} Resolves successfully when operation completed * * @example * // Write config value * await git.setConfig({ * fs, * dir: '/tutorial', * path: 'user.name', * value: 'Mr. Test' * }) * * // Print out config file * let file = await fs.promises.readFile('/tutorial/.git/config', 'utf8') * console.log(file) * * // Delete a config entry * await git.setConfig({ * fs, * dir: '/tutorial', * path: 'user.name', * value: undefined * }) * * // Print out config file * file = await fs.promises.readFile('/tutorial/.git/config', 'utf8') * console.log(file) */ export function setConfig({ fs: _fs, dir, gitdir, path, value, append, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; path: string; value: string | number | boolean | void; append?: boolean; }): Promise; /** * Tell whether a file has been changed * * The possible resolve values are: * * | status | description | * | --------------------- | ------------------------------------------------------------------------------------- | * | `"ignored"` | file ignored by a .gitignore rule | * | `"unmodified"` | file unchanged from HEAD commit | * | `"*modified"` | file has modifications, not yet staged | * | `"*deleted"` | file has been removed, but the removal is not yet staged | * | `"*added"` | file is untracked, not yet staged | * | `"absent"` | file not present in HEAD commit, staging area, or working dir | * | `"modified"` | file has modifications, staged | * | `"deleted"` | file has been removed, staged | * | `"added"` | previously untracked file, staged | * | `"*unmodified"` | working dir and HEAD commit match, but index differs | * | `"*absent"` | file not present in working dir or HEAD commit, but present in the index | * | `"*undeleted"` | file was deleted from the index, but is still in the working dir | * | `"*undeletemodified"` | file was deleted from the index, but is present with modifications in the working dir | * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} args.dir - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir, '.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.filepath - The path to the file to query * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise<'ignored'|'unmodified'|'*modified'|'*deleted'|'*added'|'absent'|'modified'|'deleted'|'added'|'*unmodified'|'*absent'|'*undeleted'|'*undeletemodified'>} Resolves successfully with the file's git status * * @example * let status = await git.status({ fs, dir: '/tutorial', filepath: 'README.md' }) * console.log(status) * */ export function status({ fs: _fs, dir, gitdir, filepath, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir: string; gitdir?: string; filepath: string; cache?: any; }): Promise<"modified" | "ignored" | "unmodified" | "*modified" | "*deleted" | "*added" | "absent" | "deleted" | "added" | "*unmodified" | "*absent" | "*undeleted" | "*undeletemodified">; /** * Efficiently get the status of multiple files at once. * * The returned `StatusMatrix` is admittedly not the easiest format to read. * However it conveys a large amount of information in dense format that should make it easy to create reports about the current state of the repository; * without having to do multiple, time-consuming isomorphic-git calls. * My hope is that the speed and flexibility of the function will make up for the learning curve of interpreting the return value. * * ```js live * // get the status of all the files in 'src' * let status = await git.statusMatrix({ * fs, * dir: '/tutorial', * filter: f => f.startsWith('src/') * }) * console.log(status) * ``` * * ```js live * // get the status of all the JSON and Markdown files * let status = await git.statusMatrix({ * fs, * dir: '/tutorial', * filter: f => f.endsWith('.json') || f.endsWith('.md') * }) * console.log(status) * ``` * * The result is returned as a 2D array. * The outer array represents the files and/or blobs in the repo, in alphabetical order. * The inner arrays describe the status of the file: * the first value is the filepath, and the next three are integers * representing the HEAD status, WORKDIR status, and STAGE status of the entry. * * ```js * // example StatusMatrix * [ * ["a.txt", 0, 2, 0], // new, untracked * ["b.txt", 0, 2, 2], // added, staged * ["c.txt", 0, 2, 3], // added, staged, with unstaged changes * ["d.txt", 1, 1, 1], // unmodified * ["e.txt", 1, 2, 1], // modified, unstaged * ["f.txt", 1, 2, 2], // modified, staged * ["g.txt", 1, 2, 3], // modified, staged, with unstaged changes * ["h.txt", 1, 0, 1], // deleted, unstaged * ["i.txt", 1, 0, 0], // deleted, staged * ] * ``` * * - The HEAD status is either absent (0) or present (1). * - The WORKDIR status is either absent (0), identical to HEAD (1), or different from HEAD (2). * - The STAGE status is either absent (0), identical to HEAD (1), identical to WORKDIR (2), or different from WORKDIR (3). * * ```ts * type Filename = string * type HeadStatus = 0 | 1 * type WorkdirStatus = 0 | 1 | 2 * type StageStatus = 0 | 1 | 2 | 3 * * type StatusRow = [Filename, HeadStatus, WorkdirStatus, StageStatus] * * type StatusMatrix = StatusRow[] * ``` * * > Think of the natural progression of file modifications as being from HEAD (previous) -> WORKDIR (current) -> STAGE (next). * > Then HEAD is "version 1", WORKDIR is "version 2", and STAGE is "version 3". * > Then, imagine a "version 0" which is before the file was created. * > Then the status value in each column corresponds to the oldest version of the file it is identical to. * > (For a file to be identical to "version 0" means the file is deleted.) * * Here are some examples of queries you can answer using the result: * * #### Q: What files have been deleted? * ```js * const FILE = 0, WORKDIR = 2 * * const filenames = (await statusMatrix({ dir })) * .filter(row => row[WORKDIR] === 0) * .map(row => row[FILE]) * ``` * * #### Q: What files have unstaged changes? * ```js * const FILE = 0, WORKDIR = 2, STAGE = 3 * * const filenames = (await statusMatrix({ dir })) * .filter(row => row[WORKDIR] !== row[STAGE]) * .map(row => row[FILE]) * ``` * * #### Q: What files have been modified since the last commit? * ```js * const FILE = 0, HEAD = 1, WORKDIR = 2 * * const filenames = (await statusMatrix({ dir })) * .filter(row => row[HEAD] !== row[WORKDIR]) * .map(row => row[FILE]) * ``` * * #### Q: What files will NOT be changed if I commit right now? * ```js * const FILE = 0, HEAD = 1, STAGE = 3 * * const filenames = (await statusMatrix({ dir })) * .filter(row => row[HEAD] === row[STAGE]) * .map(row => row[FILE]) * ``` * * For reference, here are all possible combinations: * * | HEAD | WORKDIR | STAGE | `git status --short` equivalent | * | ---- | ------- | ----- | ------------------------------- | * | 0 | 0 | 0 | `` | * | 0 | 0 | 3 | `AD` | * | 0 | 2 | 0 | `??` | * | 0 | 2 | 2 | `A ` | * | 0 | 2 | 3 | `AM` | * | 1 | 0 | 0 | `D ` | * | 1 | 0 | 1 | ` D` | * | 1 | 0 | 3 | `MD` | * | 1 | 1 | 0 | `D ` + `??` | * | 1 | 1 | 1 | `` | * | 1 | 1 | 3 | `MM` | * | 1 | 2 | 0 | `D ` + `??` | * | 1 | 2 | 1 | ` M` | * | 1 | 2 | 2 | `M ` | * | 1 | 2 | 3 | `MM` | * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} args.dir - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir, '.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} [args.ref = 'HEAD'] - Optionally specify a different commit to compare against the workdir and stage instead of the HEAD * @param {string[]} [args.filepaths = ['.']] - Limit the query to the given files and directories * @param {function(string): boolean} [args.filter] - Filter the results to only those whose filepath matches a function. * @param {object} [args.cache] - a [cache](cache.md) object * @param {boolean} [args.ignored = false] - include ignored files in the result * * @returns {Promise>} Resolves with a status matrix, described below. * @see StatusRow */ export function statusMatrix({ fs: _fs, dir, gitdir, ref, filepaths, filter, cache, ignored: shouldIgnore, }: { fs: CallbackFsClient | PromiseFsClient; dir: string; gitdir?: string; ref?: string; filepaths?: string[]; filter?: (arg0: string) => boolean; cache?: any; ignored?: boolean; }): Promise<[string, 0 | 1, 0 | 1 | 2, 0 | 1 | 2 | 3][]>; /** * Create a lightweight tag * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.ref - What to name the tag * @param {string} [args.object = 'HEAD'] - What oid the tag refers to. (Will resolve to oid if value is a ref.) By default, the commit object which is referred by the current `HEAD` is used. * @param {boolean} [args.force = false] - Instead of throwing an error if a tag named `ref` already exists, overwrite the existing tag. * * @returns {Promise} Resolves successfully when filesystem operations are complete * * @example * await git.tag({ fs, dir: '/tutorial', ref: 'test-tag' }) * console.log('done') * */ export function tag({ fs: _fs, dir, gitdir, ref, object, force, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; ref: string; object?: string; force?: boolean; }): Promise; /** * Register file contents in the working tree or object database to the git index (aka staging area). * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} args.dir - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir, '.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.filepath - File to act upon. * @param {string} [args.oid] - OID of the object in the object database to add to the index with the specified filepath. * @param {number} [args.mode = 100644] - The file mode to add the file to the index. * @param {boolean} [args.add] - Adds the specified file to the index if it does not yet exist in the index. * @param {boolean} [args.remove] - Remove the specified file from the index if it does not exist in the workspace anymore. * @param {boolean} [args.force] - Remove the specified file from the index, even if it still exists in the workspace. * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} Resolves successfully with the SHA-1 object id of the object written or updated in the index, or nothing if the file was removed. * * @example * await git.updateIndex({ * fs, * dir: '/tutorial', * filepath: 'readme.md' * }) * * @example * // Manually create a blob in the object database. * let oid = await git.writeBlob({ * fs, * dir: '/tutorial', * blob: new Uint8Array([]) * }) * * // Write the object in the object database to the index. * await git.updateIndex({ * fs, * dir: '/tutorial', * add: true, * filepath: 'readme.md', * oid * }) */ export function updateIndex({ fs: _fs, dir, gitdir, cache, filepath, oid, mode, add, remove, force, }: { fs: CallbackFsClient | PromiseFsClient; dir: string; gitdir?: string; filepath: string; oid?: string; mode?: number; add?: boolean; remove?: boolean; force?: boolean; cache?: any; }): Promise; /** * Return the version number of isomorphic-git * * I don't know why you might need this. I added it just so I could check that I was getting * the correct version of the library and not a cached version. * * @returns {string} the version string taken from package.json at publication time * * @example * console.log(git.version()) * */ export function version(): string; /** * @callback WalkerMap * @param {string} filename * @param {Array} entries * @returns {Promise} */ /** * @callback WalkerReduce * @param {any} parent * @param {any[]} children * @returns {Promise} */ /** * @callback WalkerIterateCallback * @param {WalkerEntry[]} entries * @returns {Promise} */ /** * @callback WalkerIterate * @param {WalkerIterateCallback} walk * @param {IterableIterator} children * @returns {Promise} */ /** * A powerful recursive tree-walking utility. * * The `walk` API simplifies gathering detailed information about a tree or comparing all the filepaths in two or more trees. * Trees can be git commits, the working directory, or the or git index (staging area). * As long as a file or directory is present in at least one of the trees, it will be traversed. * Entries are traversed in alphabetical order. * * The arguments to `walk` are the `trees` you want to traverse, and 3 optional transform functions: * `map`, `reduce`, and `iterate`. * * ## `TREE`, `WORKDIR`, and `STAGE` * * Tree walkers are represented by three separate functions that can be imported: * * ```js * import { TREE, WORKDIR, STAGE } from 'isomorphic-git' * ``` * * These functions return opaque handles called `Walker`s. * The only thing that `Walker` objects are good for is passing into `walk`. * Here are the three `Walker`s passed into `walk` by the `statusMatrix` command for example: * * ```js * let ref = 'HEAD' * * let trees = [TREE({ ref }), WORKDIR(), STAGE()] * ``` * * For the arguments, see the doc pages for [TREE](./TREE.md), [WORKDIR](./WORKDIR.md), and [STAGE](./STAGE.md). * * `map`, `reduce`, and `iterate` allow you control the recursive walk by pruning and transforming `WalkerEntry`s into the desired result. * * ## WalkerEntry * * {@link WalkerEntry typedef} * * `map` receives an array of `WalkerEntry[]` as its main argument, one `WalkerEntry` for each `Walker` in the `trees` argument. * The methods are memoized per `WalkerEntry` so calling them multiple times in a `map` function does not adversely impact performance. * By only computing these values if needed, you build can build lean, mean, efficient walking machines. * * ### WalkerEntry#type() * * Returns the kind as a string. This is normally either `tree` or `blob`. * * `TREE`, `STAGE`, and `WORKDIR` walkers all return a string. * * Possible values: * * - `'tree'` directory * - `'blob'` file * - `'special'` used by `WORKDIR` to represent irregular files like sockets and FIFOs * - `'commit'` used by `TREE` to represent submodules * * ```js * await entry.type() * ``` * * ### WalkerEntry#mode() * * Returns the file mode as a number. Use this to distinguish between regular files, symlinks, and executable files. * * `TREE`, `STAGE`, and `WORKDIR` walkers all return a number for all `type`s of entries. * * It has been normalized to one of the 4 values that are allowed in git commits: * * - `0o40000` directory * - `0o100644` file * - `0o100755` file (executable) * - `0o120000` symlink * * Tip: to make modes more readable, you can print them to octal using `.toString(8)`. * * ```js * await entry.mode() * ``` * * ### WalkerEntry#oid() * * Returns the SHA-1 object id for blobs and trees. * * `TREE` walkers return a string for `blob` and `tree` entries. * * `STAGE` and `WORKDIR` walkers return a string for `blob` entries and `undefined` for `tree` entries. * * ```js * await entry.oid() * ``` * * ### WalkerEntry#content() * * Returns the file contents as a Buffer. * * `TREE` and `WORKDIR` walkers return a Buffer for `blob` entries and `undefined` for `tree` entries. * * `STAGE` walkers always return `undefined` since the file contents are never stored in the stage. * * ```js * await entry.content() * ``` * * ### WalkerEntry#stat() * * Returns a normalized subset of filesystem Stat data. * * `WORKDIR` walkers return a `Stat` for `blob` and `tree` entries. * * `STAGE` walkers return a `Stat` for `blob` entries and `undefined` for `tree` entries. * * `TREE` walkers return `undefined` for all entry types. * * ```js * await entry.stat() * ``` * * {@link Stat typedef} * * ## map(string, Array) => Promise * * {@link WalkerMap typedef} * * This is the function that is called once per entry BEFORE visiting the children of that node. * * If you return `null` for a `tree` entry, then none of the children of that `tree` entry will be walked. * * This is a good place for query logic, such as examining the contents of a file. * Ultimately, compare all the entries and return any values you are interested in. * If you do not return a value (or return undefined) that entry will be filtered from the results. * * Example 1: Find all the files containing the word 'foo'. * ```js * async function map(filepath, [head, workdir]) { * let content = (await workdir.content()).toString('utf8') * if (content.contains('foo')) { * return { * filepath, * content * } * } * } * ``` * * Example 2: Return the difference between the working directory and the HEAD commit * ```js * const map = async (filepath, [head, workdir]) => { * return { * filepath, * oid: await head?.oid(), * diff: diff( * (await head?.content())?.toString('utf8') || '', * (await workdir?.content())?.toString('utf8') || '' * ) * } * } * ``` * * Example 3: * ```js * let path = require('path') * // Only examine files in the directory `cwd` * let cwd = 'src/app' * async function map (filepath, [head, workdir, stage]) { * if ( * // don't skip the root directory * head.fullpath !== '.' && * // return true for 'src' and 'src/app' * !cwd.startsWith(filepath) && * // return true for 'src/app/*' * path.dirname(filepath) !== cwd * ) { * return null * } else { * return filepath * } * } * ``` * * ## reduce(parent, children) * * {@link WalkerReduce typedef} * * This is the function that is called once per entry AFTER visiting the children of that node. * * Default: `async (parent, children) => parent === undefined ? children.flat() : [parent, children].flat()` * * The default implementation of this function returns all directories and children in a giant flat array. * You can define a different accumulation method though. * * Example: Return a hierarchical structure * ```js * async function reduce (parent, children) { * return Object.assign(parent, { children }) * } * ``` * * ## iterate(walk, children) * * {@link WalkerIterate typedef} * * {@link WalkerIterateCallback typedef} * * Default: `(walk, children) => Promise.all([...children].map(walk))` * * The default implementation recurses all children concurrently using Promise.all. * However you could use a custom function to traverse children serially or use a global queue to throttle recursion. * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {Walker[]} args.trees - The trees you want to traverse * @param {WalkerMap} [args.map] - Transform `WalkerEntry`s into a result form * @param {WalkerReduce} [args.reduce] - Control how mapped entries are combined with their parent result * @param {WalkerIterate} [args.iterate] - Fine-tune how entries within a tree are iterated over * @param {object} [args.cache] - a [cache](cache.md) object * * @returns {Promise} The finished tree-walking result */ export function walk({ fs, dir, gitdir, trees, map, reduce, iterate, cache, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; trees: Walker[]; map?: WalkerMap; reduce?: WalkerReduce; iterate?: WalkerIterate; cache?: any; }): Promise; /** * Write a blob object directly * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {Uint8Array} args.blob - The blob object to write * * @returns {Promise} Resolves successfully with the SHA-1 object id of the newly written object * * @example * // Manually create a blob. * let oid = await git.writeBlob({ * fs, * dir: '/tutorial', * blob: new Uint8Array([]) * }) * * console.log('oid', oid) // should be 'e69de29bb2d1d6434b8b29ae775ad8c2e48c5391' * */ export function writeBlob({ fs, dir, gitdir, blob }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; blob: Uint8Array; }): Promise; /** * Write a commit object directly * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {CommitObject} args.commit - The object to write * * @returns {Promise} Resolves successfully with the SHA-1 object id of the newly written object * @see CommitObject * */ export function writeCommit({ fs, dir, gitdir, commit, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; commit: CommitObject; }): Promise; /** * Write a git object directly * * `format` can have the following values: * * | param | description | * | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | * | 'deflated' | Treat `object` as the raw deflate-compressed buffer for an object, meaning can be written to `.git/objects/**` as-is. | * | 'wrapped' | Treat `object` as the inflated object buffer wrapped in the git object header. This is the raw buffer used when calculating the SHA-1 object id of a git object. | * | 'content' | Treat `object` as the object buffer without the git header. | * | 'parsed' | Treat `object` as a parsed representation of the object. | * * If `format` is `'parsed'`, then `object` must match one of the schemas for `CommitObject`, `TreeObject`, `TagObject`, or a `string` (for blobs). * * {@link CommitObject typedef} * * {@link TreeObject typedef} * * {@link TagObject typedef} * * If `format` is `'content'`, `'wrapped'`, or `'deflated'`, `object` should be a `Uint8Array`. * * @deprecated * > This command is overly complicated. * > * > If you know the type of object you are writing, use [`writeBlob`](./writeBlob.md), [`writeCommit`](./writeCommit.md), [`writeTag`](./writeTag.md), or [`writeTree`](./writeTree.md). * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string | Uint8Array | CommitObject | TreeObject | TagObject} args.object - The object to write. * @param {'blob'|'tree'|'commit'|'tag'} [args.type] - The kind of object to write. * @param {'deflated' | 'wrapped' | 'content' | 'parsed'} [args.format = 'parsed'] - What format the object is in. The possible choices are listed below. * @param {string} [args.oid] - If `format` is `'deflated'` then this param is required. Otherwise it is calculated. * @param {string} [args.encoding] - If `type` is `'blob'` then `object` will be converted to a Uint8Array using `encoding`. * * @returns {Promise} Resolves successfully with the SHA-1 object id of the newly written object. * * @example * // Manually create an annotated tag. * let sha = await git.resolveRef({ fs, dir: '/tutorial', ref: 'HEAD' }) * console.log('commit', sha) * * let oid = await git.writeObject({ * fs, * dir: '/tutorial', * type: 'tag', * object: { * object: sha, * type: 'commit', * tag: 'my-tag', * tagger: { * name: 'your name', * email: 'email@example.com', * timestamp: Math.floor(Date.now()/1000), * timezoneOffset: new Date().getTimezoneOffset() * }, * message: 'Optional message' * } * }) * * console.log('tag', oid) * */ export function writeObject({ fs: _fs, dir, gitdir, type, object, format, oid, encoding, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; object: string | Uint8Array | TreeEntry[] | CommitObject | TagObject; type?: "blob" | "tree" | "commit" | "tag"; format?: "parsed" | "deflated" | "content" | "wrapped"; oid?: string; encoding?: string; }): Promise; /** * Write a ref which refers to the specified SHA-1 object id, or a symbolic ref which refers to the specified ref. * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {string} args.ref - The name of the ref to write * @param {string} args.value - When `symbolic` is false, a ref or an SHA-1 object id. When true, a ref starting with `refs/`. * @param {boolean} [args.force = false] - Instead of throwing an error if a ref named `ref` already exists, overwrite the existing ref. * @param {boolean} [args.symbolic = false] - Whether the ref is symbolic or not. * * @returns {Promise} Resolves successfully when filesystem operations are complete * * @example * await git.writeRef({ * fs, * dir: '/tutorial', * ref: 'refs/heads/another-branch', * value: 'HEAD' * }) * await git.writeRef({ * fs, * dir: '/tutorial', * ref: 'HEAD', * value: 'refs/heads/another-branch', * force: true, * symbolic: true * }) * console.log('done') * */ export function writeRef({ fs: _fs, dir, gitdir, ref, value, force, symbolic, }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; ref: string; value: string; force?: boolean; symbolic?: boolean; }): Promise; /** * Write an annotated tag object directly * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {TagObject} args.tag - The object to write * * @returns {Promise} Resolves successfully with the SHA-1 object id of the newly written object * @see TagObject * * @example * // Manually create an annotated tag. * let sha = await git.resolveRef({ fs, dir: '/tutorial', ref: 'HEAD' }) * console.log('commit', sha) * * let oid = await git.writeTag({ * fs, * dir: '/tutorial', * tag: { * object: sha, * type: 'commit', * tag: 'my-tag', * tagger: { * name: 'your name', * email: 'email@example.com', * timestamp: Math.floor(Date.now()/1000), * timezoneOffset: new Date().getTimezoneOffset() * }, * message: 'Optional message' * } * }) * * console.log('tag', oid) * */ export function writeTag({ fs, dir, gitdir, tag }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; tag: TagObject; }): Promise; /** * Write a tree object directly * * @param {object} args * @param {FsClient} args.fs - a file system client * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path * @param {TreeObject} args.tree - The object to write * * @returns {Promise} Resolves successfully with the SHA-1 object id of the newly written object. * @see TreeObject * @see TreeEntry * */ export function writeTree({ fs, dir, gitdir, tree }: { fs: CallbackFsClient | PromiseFsClient; dir?: string; gitdir?: string; tree: TreeEntry[]; }): Promise; declare class AlreadyExistsError extends BaseError { /** * @param {'note'|'remote'|'tag'|'branch'} noun * @param {string} where * @param {boolean} canForce */ constructor(noun: "tag" | "remote" | "note" | "branch", where: string, canForce?: boolean); code: "AlreadyExistsError"; name: "AlreadyExistsError"; data: { noun: "tag" | "remote" | "note" | "branch"; where: string; canForce: boolean; }; } declare namespace AlreadyExistsError { export const code: 'AlreadyExistsError'; } declare class AmbiguousError extends BaseError { /** * @param {'oids'|'refs'} nouns * @param {string} short * @param {string[]} matches */ constructor(nouns: "refs" | "oids", short: string, matches: string[]); code: "AmbiguousError"; name: "AmbiguousError"; data: { nouns: "refs" | "oids"; short: string; matches: string[]; }; } declare namespace AmbiguousError { const code_1: 'AmbiguousError'; export { code_1 as code }; } declare class CheckoutConflictError extends BaseError { /** * @param {string[]} filepaths */ constructor(filepaths: string[]); code: "CheckoutConflictError"; name: "CheckoutConflictError"; data: { filepaths: string[]; }; } declare namespace CheckoutConflictError { const code_2: 'CheckoutConflictError'; export { code_2 as code }; } declare class CommitNotFetchedError extends BaseError { /** * @param {string} ref * @param {string} oid */ constructor(ref: string, oid: string); code: "CommitNotFetchedError"; name: "CommitNotFetchedError"; data: { ref: string; oid: string; }; } declare namespace CommitNotFetchedError { const code_3: 'CommitNotFetchedError'; export { code_3 as code }; } declare class EmptyServerResponseError extends BaseError { code: "EmptyServerResponseError"; name: "EmptyServerResponseError"; data: {}; } declare namespace EmptyServerResponseError { const code_4: 'EmptyServerResponseError'; export { code_4 as code }; } declare class FastForwardError extends BaseError { code: "FastForwardError"; name: "FastForwardError"; data: {}; } declare namespace FastForwardError { const code_5: 'FastForwardError'; export { code_5 as code }; } declare class GitPushError extends BaseError { /** * @param {string} prettyDetails * @param {PushResult} result */ constructor(prettyDetails: string, result: PushResult); code: "GitPushError"; name: "GitPushError"; data: { prettyDetails: string; result: PushResult; }; } declare namespace GitPushError { const code_6: 'GitPushError'; export { code_6 as code }; } declare class HttpError extends BaseError { /** * @param {number} statusCode * @param {string} statusMessage * @param {string} response */ constructor(statusCode: number, statusMessage: string, response: string); code: "HttpError"; name: "HttpError"; data: { statusCode: number; statusMessage: string; response: string; }; } declare namespace HttpError { const code_7: 'HttpError'; export { code_7 as code }; } declare class InternalError extends BaseError { /** * @param {string} message */ constructor(message: string); code: "InternalError"; name: "InternalError"; data: { message: string; }; } declare namespace InternalError { const code_8: 'InternalError'; export { code_8 as code }; } declare class InvalidFilepathError extends BaseError { /** * @param {'leading-slash'|'trailing-slash'|'directory'} [reason] */ constructor(reason?: "leading-slash" | "trailing-slash" | "directory" | undefined); code: "InvalidFilepathError"; name: "InvalidFilepathError"; data: { reason: "leading-slash" | "trailing-slash" | "directory" | undefined; }; } declare namespace InvalidFilepathError { const code_9: 'InvalidFilepathError'; export { code_9 as code }; } declare class InvalidOidError extends BaseError { /** * @param {string} value */ constructor(value: string); code: "InvalidOidError"; name: "InvalidOidError"; data: { value: string; }; } declare namespace InvalidOidError { const code_10: 'InvalidOidError'; export { code_10 as code }; } declare class InvalidRefNameError extends BaseError { /** * @param {string} ref * @param {string} suggestion * @param {boolean} canForce */ constructor(ref: string, suggestion: string); code: "InvalidRefNameError"; name: "InvalidRefNameError"; data: { ref: string; suggestion: string; }; } declare namespace InvalidRefNameError { const code_11: 'InvalidRefNameError'; export { code_11 as code }; } declare class MaxDepthError extends BaseError { /** * @param {number} depth */ constructor(depth: number); code: "MaxDepthError"; name: "MaxDepthError"; data: { depth: number; }; } declare namespace MaxDepthError { const code_12: 'MaxDepthError'; export { code_12 as code }; } declare class MergeNotSupportedError extends BaseError { code: "MergeNotSupportedError"; name: "MergeNotSupportedError"; data: {}; } declare namespace MergeNotSupportedError { const code_13: 'MergeNotSupportedError'; export { code_13 as code }; } declare class MergeConflictError extends BaseError { /** * @param {Array} filepaths */ constructor(filepaths: string[]); code: "MergeConflictError"; name: "MergeConflictError"; data: { filepaths: string[]; }; } declare namespace MergeConflictError { const code_14: 'MergeConflictError'; export { code_14 as code }; } declare class MissingNameError extends BaseError { /** * @param {'author'|'committer'|'tagger'} role */ constructor(role: "author" | "committer" | "tagger"); code: "MissingNameError"; name: "MissingNameError"; data: { role: "author" | "committer" | "tagger"; }; } declare namespace MissingNameError { const code_15: 'MissingNameError'; export { code_15 as code }; } declare class MissingParameterError extends BaseError { /** * @param {string} parameter */ constructor(parameter: string); code: "MissingParameterError"; name: "MissingParameterError"; data: { parameter: string; }; } declare namespace MissingParameterError { const code_16: 'MissingParameterError'; export { code_16 as code }; } declare class MultipleGitError extends BaseError { /** * @param {Error[]} errors * @param {string} message */ constructor(errors: Error[]); code: "MultipleGitError"; name: "MultipleGitError"; data: { errors: Error[]; }; errors: Error[]; } declare namespace MultipleGitError { const code_17: 'MultipleGitError'; export { code_17 as code }; } declare class NoRefspecError extends BaseError { /** * @param {string} remote */ constructor(remote: string); code: "NoRefspecError"; name: "NoRefspecError"; data: { remote: string; }; } declare namespace NoRefspecError { const code_18: 'NoRefspecError'; export { code_18 as code }; } declare class NotFoundError extends BaseError { /** * @param {string} what */ constructor(what: string); code: "NotFoundError"; name: "NotFoundError"; data: { what: string; }; } declare namespace NotFoundError { const code_19: 'NotFoundError'; export { code_19 as code }; } declare class ObjectTypeError extends BaseError { /** * @param {string} oid * @param {'blob'|'commit'|'tag'|'tree'} actual * @param {'blob'|'commit'|'tag'|'tree'} expected * @param {string} [filepath] */ constructor(oid: string, actual: "blob" | "tree" | "commit" | "tag", expected: "blob" | "tree" | "commit" | "tag", filepath?: string | undefined); code: "ObjectTypeError"; name: "ObjectTypeError"; data: { oid: string; actual: "blob" | "tree" | "commit" | "tag"; expected: "blob" | "tree" | "commit" | "tag"; filepath: string | undefined; }; } declare namespace ObjectTypeError { const code_20: 'ObjectTypeError'; export { code_20 as code }; } declare class ParseError extends BaseError { /** * @param {string} expected * @param {string} actual */ constructor(expected: string, actual: string); code: "ParseError"; name: "ParseError"; data: { expected: string; actual: string; }; } declare namespace ParseError { const code_21: 'ParseError'; export { code_21 as code }; } declare class PushRejectedError extends BaseError { /** * @param {'not-fast-forward'|'tag-exists'} reason */ constructor(reason: "not-fast-forward" | "tag-exists"); code: "PushRejectedError"; name: "PushRejectedError"; data: { reason: "not-fast-forward" | "tag-exists"; }; } declare namespace PushRejectedError { const code_22: 'PushRejectedError'; export { code_22 as code }; } declare class RemoteCapabilityError extends BaseError { /** * @param {'shallow'|'deepen-since'|'deepen-not'|'deepen-relative'} capability * @param {'depth'|'since'|'exclude'|'relative'} parameter */ constructor(capability: "shallow" | "deepen-since" | "deepen-not" | "deepen-relative", parameter: "depth" | "since" | "exclude" | "relative"); code: "RemoteCapabilityError"; name: "RemoteCapabilityError"; data: { capability: "shallow" | "deepen-since" | "deepen-not" | "deepen-relative"; parameter: "depth" | "since" | "exclude" | "relative"; }; } declare namespace RemoteCapabilityError { const code_23: 'RemoteCapabilityError'; export { code_23 as code }; } declare class SmartHttpError extends BaseError { /** * @param {string} preview * @param {string} response */ constructor(preview: string, response: string); code: "SmartHttpError"; name: "SmartHttpError"; data: { preview: string; response: string; }; } declare namespace SmartHttpError { const code_24: 'SmartHttpError'; export { code_24 as code }; } declare class UnknownTransportError extends BaseError { /** * @param {string} url * @param {string} transport * @param {string} [suggestion] */ constructor(url: string, transport: string, suggestion?: string | undefined); code: "UnknownTransportError"; name: "UnknownTransportError"; data: { url: string; transport: string; suggestion: string | undefined; }; } declare namespace UnknownTransportError { const code_25: 'UnknownTransportError'; export { code_25 as code }; } declare class UnsafeFilepathError extends BaseError { /** * @param {string} filepath */ constructor(filepath: string); code: "UnsafeFilepathError"; name: "UnsafeFilepathError"; data: { filepath: string; }; } declare namespace UnsafeFilepathError { const code_26: 'UnsafeFilepathError'; export { code_26 as code }; } declare class UrlParseError extends BaseError { /** * @param {string} url */ constructor(url: string); code: "UrlParseError"; name: "UrlParseError"; data: { url: string; }; } declare namespace UrlParseError { const code_27: 'UrlParseError'; export { code_27 as code }; } declare class UserCanceledError extends BaseError { code: "UserCanceledError"; name: "UserCanceledError"; data: {}; } declare namespace UserCanceledError { const code_28: 'UserCanceledError'; export { code_28 as code }; } declare class UnmergedPathsError extends BaseError { /** * @param {Array} filepaths */ constructor(filepaths: string[]); code: "UnmergedPathsError"; name: "UnmergedPathsError"; data: { filepaths: string[]; }; } declare namespace UnmergedPathsError { const code_29: 'UnmergedPathsError'; export { code_29 as code }; } declare class IndexResetError extends BaseError { /** * @param {Array} filepaths */ constructor(filepath: any); code: "IndexResetError"; name: "IndexResetError"; data: { filepath: any; }; } declare namespace IndexResetError { const code_30: 'IndexResetError'; export { code_30 as code }; } /** * @typedef {Object} GitProgressEvent * @property {string} phase * @property {number} loaded * @property {number} total */ /** * @callback ProgressCallback * @param {GitProgressEvent} progress * @returns {void | Promise} */ /** * @typedef {Object} GitHttpRequest * @property {string} url - The URL to request * @property {string} [method='GET'] - The HTTP method to use * @property {Object} [headers={}] - Headers to include in the HTTP request * @property {Object} [agent] - An HTTP or HTTPS agent that manages connections for the HTTP client (Node.js only) * @property {AsyncIterableIterator} [body] - An async iterator of Uint8Arrays that make up the body of POST requests * @property {ProgressCallback} [onProgress] - Reserved for future use (emitting `GitProgressEvent`s) * @property {object} [signal] - Reserved for future use (canceling a request) */ /** * @typedef {Object} GitHttpResponse * @property {string} url - The final URL that was fetched after any redirects * @property {string} [method] - The HTTP method that was used * @property {Object} [headers] - HTTP response headers * @property {AsyncIterableIterator} [body] - An async iterator of Uint8Arrays that make up the body of the response * @property {number} statusCode - The HTTP status code * @property {string} statusMessage - The HTTP status message */ /** * @callback HttpFetch * @param {GitHttpRequest} request * @returns {Promise} */ /** * @typedef {Object} HttpClient * @property {HttpFetch} request */ /** * A git commit object. * * @typedef {Object} CommitObject * @property {string} message Commit message * @property {string} tree SHA-1 object id of corresponding file tree * @property {string[]} parent an array of zero or more SHA-1 object ids * @property {Object} author * @property {string} author.name The author's name * @property {string} author.email The author's email * @property {number} author.timestamp UTC Unix timestamp in seconds * @property {number} author.timezoneOffset Timezone difference from UTC in minutes * @property {Object} committer * @property {string} committer.name The committer's name * @property {string} committer.email The committer's email * @property {number} committer.timestamp UTC Unix timestamp in seconds * @property {number} committer.timezoneOffset Timezone difference from UTC in minutes * @property {string} [gpgsig] PGP signature (if present) */ /** * An entry from a git tree object. Files are called 'blobs' and directories are called 'trees'. * * @typedef {Object} TreeEntry * @property {string} mode the 6 digit hexadecimal mode * @property {string} path the name of the file or directory * @property {string} oid the SHA-1 object id of the blob or tree * @property {'commit'|'blob'|'tree'} type the type of object */ /** * A git tree object. Trees represent a directory snapshot. * * @typedef {TreeEntry[]} TreeObject */ /** * A git annotated tag object. * * @typedef {Object} TagObject * @property {string} object SHA-1 object id of object being tagged * @property {'blob' | 'tree' | 'commit' | 'tag'} type the type of the object being tagged * @property {string} tag the tag name * @property {Object} tagger * @property {string} tagger.name the tagger's name * @property {string} tagger.email the tagger's email * @property {number} tagger.timestamp UTC Unix timestamp in seconds * @property {number} tagger.timezoneOffset timezone difference from UTC in minutes * @property {string} message tag message * @property {string} [gpgsig] PGP signature (if present) */ /** * @typedef {Object} ReadCommitResult * @property {string} oid - SHA-1 object id of this commit * @property {CommitObject} commit - the parsed commit object * @property {string} payload - PGP signing payload */ /** * @typedef {Object} ServerRef - This object has the following schema: * @property {string} ref - The name of the ref * @property {string} oid - The SHA-1 object id the ref points to * @property {string} [target] - The target ref pointed to by a symbolic ref * @property {string} [peeled] - If the oid is the SHA-1 object id of an annotated tag, this is the SHA-1 object id that the annotated tag points to */ /** * @typedef Walker * @property {Symbol} Symbol('GitWalkerSymbol') */ /** * Normalized subset of filesystem `stat` data: * * @typedef {Object} Stat * @property {number} ctimeSeconds * @property {number} ctimeNanoseconds * @property {number} mtimeSeconds * @property {number} mtimeNanoseconds * @property {number} dev * @property {number} ino * @property {number} mode * @property {number} uid * @property {number} gid * @property {number} size */ /** * The `WalkerEntry` is an interface that abstracts computing many common tree / blob stats. * * @typedef {Object} WalkerEntry * @property {function(): Promise<'tree'|'blob'|'special'|'commit'>} type * @property {function(): Promise} mode * @property {function(): Promise} oid * @property {function(): Promise} content * @property {function(): Promise} stat */ /** * @typedef {Object} CallbackFsClient * @property {function} readFile - https://nodejs.org/api/fs.html#fs_fs_readfile_path_options_callback * @property {function} writeFile - https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback * @property {function} unlink - https://nodejs.org/api/fs.html#fs_fs_unlink_path_callback * @property {function} readdir - https://nodejs.org/api/fs.html#fs_fs_readdir_path_options_callback * @property {function} mkdir - https://nodejs.org/api/fs.html#fs_fs_mkdir_path_mode_callback * @property {function} rmdir - https://nodejs.org/api/fs.html#fs_fs_rmdir_path_callback * @property {function} stat - https://nodejs.org/api/fs.html#fs_fs_stat_path_options_callback * @property {function} lstat - https://nodejs.org/api/fs.html#fs_fs_lstat_path_options_callback * @property {function} [readlink] - https://nodejs.org/api/fs.html#fs_fs_readlink_path_options_callback * @property {function} [symlink] - https://nodejs.org/api/fs.html#fs_fs_symlink_target_path_type_callback * @property {function} [chmod] - https://nodejs.org/api/fs.html#fs_fs_chmod_path_mode_callback */ /** * @typedef {Object} PromiseFsClient * @property {Object} promises * @property {function} promises.readFile - https://nodejs.org/api/fs.html#fs_fspromises_readfile_path_options * @property {function} promises.writeFile - https://nodejs.org/api/fs.html#fs_fspromises_writefile_file_data_options * @property {function} promises.unlink - https://nodejs.org/api/fs.html#fs_fspromises_unlink_path * @property {function} promises.readdir - https://nodejs.org/api/fs.html#fs_fspromises_readdir_path_options * @property {function} promises.mkdir - https://nodejs.org/api/fs.html#fs_fspromises_mkdir_path_options * @property {function} promises.rmdir - https://nodejs.org/api/fs.html#fs_fspromises_rmdir_path * @property {function} promises.stat - https://nodejs.org/api/fs.html#fs_fspromises_stat_path_options * @property {function} promises.lstat - https://nodejs.org/api/fs.html#fs_fspromises_lstat_path_options * @property {function} [promises.readlink] - https://nodejs.org/api/fs.html#fs_fspromises_readlink_path_options * @property {function} [promises.symlink] - https://nodejs.org/api/fs.html#fs_fspromises_symlink_target_path_type * @property {function} [promises.chmod] - https://nodejs.org/api/fs.html#fs_fspromises_chmod_path_mode */ /** * @typedef {CallbackFsClient | PromiseFsClient} FsClient */ /** * @callback MessageCallback * @param {string} message * @returns {void | Promise} */ /** * @typedef {Object} GitAuth * @property {string} [username] * @property {string} [password] * @property {Object} [headers] * @property {boolean} [cancel] Tells git to throw a `UserCanceledError` (instead of an `HttpError`). */ /** * @callback AuthCallback * @param {string} url * @param {GitAuth} auth Might have some values if the URL itself originally contained a username or password. * @returns {GitAuth | void | Promise} */ /** * @callback AuthFailureCallback * @param {string} url * @param {GitAuth} auth The credentials that failed * @returns {GitAuth | void | Promise} */ /** * @callback AuthSuccessCallback * @param {string} url * @param {GitAuth} auth * @returns {void | Promise} */ /** * @typedef {Object} SignParams * @property {string} payload - a plaintext message * @property {string} secretKey - an 'ASCII armor' encoded PGP key (technically can actually contain _multiple_ keys) */ /** * @callback SignCallback * @param {SignParams} args * @return {{signature: string} | Promise<{signature: string}>} - an 'ASCII armor' encoded "detached" signature */ /** * @typedef {Object} MergeDriverParams * @property {Array} branches * @property {Array} contents * @property {string} path */ /** * @callback MergeDriverCallback * @param {MergeDriverParams} args * @return {{cleanMerge: boolean, mergedText: string} | Promise<{cleanMerge: boolean, mergedText: string}>} */ /** * @callback WalkerMap * @param {string} filename * @param {WalkerEntry[]} entries * @returns {Promise} */ /** * @callback WalkerReduce * @param {any} parent * @param {any[]} children * @returns {Promise} */ /** * @callback WalkerIterateCallback * @param {WalkerEntry[]} entries * @returns {Promise} */ /** * @callback WalkerIterate * @param {WalkerIterateCallback} walk * @param {IterableIterator} children * @returns {Promise} */ /** * @typedef {Object} RefUpdateStatus * @property {boolean} ok * @property {string} error */ /** * @typedef {Object} PushResult * @property {boolean} ok * @property {?string} error * @property {Object} refs * @property {Object} [headers] */ /** * @typedef {0|1} HeadStatus */ /** * @typedef {0|1|2} WorkdirStatus */ /** * @typedef {0|1|2|3} StageStatus */ /** * @typedef {[string, HeadStatus, WorkdirStatus, StageStatus]} StatusRow */ declare class BaseError extends Error { constructor(message: any); caller: string; toJSON(): { code: any; data: any; caller: string; message: string; stack: string | undefined; }; fromJSON(json: any): BaseError; get isIsomorphicGitError(): boolean; }