/* * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. */ // eslint-disable-next-line import { Uri, SourceControlInputBox, Event, CancellationToken } from 'vscode'; export interface Git { readonly path: string; } export interface InputBox { value: string; } export const enum RefType { Head, RemoteHead, Tag, } export interface Ref { readonly type: RefType; readonly name?: string; readonly commit?: string; readonly remote?: string; } export interface UpstreamRef { readonly remote: string; readonly name: string; } export interface Branch extends Ref { readonly upstream?: UpstreamRef; readonly ahead?: number; readonly behind?: number; } export interface Commit { readonly hash: string; readonly message: string; readonly parents: string[]; readonly authorEmail?: string | undefined; } export interface Submodule { readonly name: string; readonly path: string; readonly url: string; } export interface Remote { readonly name: string; readonly fetchUrl?: string; readonly pushUrl?: string; readonly isReadOnly: boolean; } export const enum Status { INDEX_MODIFIED, INDEX_ADDED, INDEX_DELETED, INDEX_RENAMED, INDEX_COPIED, MODIFIED, DELETED, UNTRACKED, IGNORED, INTENT_TO_ADD, ADDED_BY_US, ADDED_BY_THEM, DELETED_BY_US, DELETED_BY_THEM, BOTH_ADDED, BOTH_DELETED, BOTH_MODIFIED, } export interface Change { /** * Returns either `originalUri` or `renameUri`, depending * on whether this change is a rename change. When * in doubt always use `uri` over the other two alternatives. */ readonly uri: Uri; readonly originalUri: Uri; readonly renameUri: Uri | undefined; readonly status: Status; } export interface RepositoryState { readonly HEAD: Branch | undefined; readonly refs: Ref[]; readonly remotes: Remote[]; readonly submodules: Submodule[]; readonly rebaseCommit: Commit | undefined; readonly mergeChanges: Change[]; readonly indexChanges: Change[]; readonly workingTreeChanges: Change[]; readonly onDidChange: Event; } export interface RepositoryUIState { readonly selected: boolean; readonly onDidChange: Event; } /** * Log options. */ export interface LogOptions { /** Max number of log entries to retrieve. If not specified, the default is 32. */ readonly maxEntries?: number; } export interface Repository { readonly rootUri: Uri; readonly inputBox: InputBox; readonly state: RepositoryState; readonly ui: RepositoryUIState; getConfigs(): Promise<{ key: string; value: string }[]>; getConfig(key: string): Promise; setConfig(key: string, value: string): Promise; getGlobalConfig(key: string): Promise; getObjectDetails(treeish: string, path: string): Promise<{ mode: string; object: string; size: number }>; detectObjectType(object: string): Promise<{ mimetype: string; encoding?: string }>; buffer(ref: string, path: string): Promise; show(ref: string, path: string): Promise; getCommit(ref: string): Promise; clean(paths: string[]): Promise; apply(patch: string, reverse?: boolean): Promise; diff(cached?: boolean): Promise; diffWithHEAD(): Promise; diffWithHEAD(path: string): Promise; diffWith(ref: string): Promise; diffWith(ref: string, path: string): Promise; diffIndexWithHEAD(): Promise; diffIndexWithHEAD(path: string): Promise; diffIndexWith(ref: string): Promise; diffIndexWith(ref: string, path: string): Promise; diffBlobs(object1: string, object2: string): Promise; diffBetween(ref1: string, ref2: string): Promise; diffBetween(ref1: string, ref2: string, path: string): Promise; hashObject(data: string): Promise; createBranch(name: string, checkout: boolean, ref?: string): Promise; deleteBranch(name: string, force?: boolean): Promise; getBranch(name: string): Promise; setBranchUpstream(name: string, upstream: string): Promise; getMergeBase(ref1: string, ref2: string): Promise; status(): Promise; checkout(treeish: string): Promise; addRemote(name: string, url: string): Promise; removeRemote(name: string): Promise; fetch(remote?: string, ref?: string, depth?: number): Promise; pull(unshallow?: boolean): Promise; push(remoteName?: string, branchName?: string, setUpstream?: boolean): Promise; blame(path: string): Promise; log(options?: LogOptions): Promise; } export type APIState = 'uninitialized' | 'initialized'; export interface API { readonly state: APIState; readonly onDidChangeState: Event; readonly git: Git; readonly repositories: Repository[]; readonly onDidOpenRepository: Event; readonly onDidCloseRepository: Event; } export interface GitExtension { readonly enabled: boolean; readonly onDidChangeEnablement: Event; /** * Returns a specific API version. * * Throws error if git extension is disabled. You can listed to the * [GitExtension.onDidChangeEnablement](#GitExtension.onDidChangeEnablement) event * to know when the extension becomes enabled/disabled. * * @param version Version number. * @returns API instance */ getAPI(version: 1): API; } export const enum GitErrorCodes { BadConfigFile = 'BadConfigFile', AuthenticationFailed = 'AuthenticationFailed', NoUserNameConfigured = 'NoUserNameConfigured', NoUserEmailConfigured = 'NoUserEmailConfigured', NoRemoteRepositorySpecified = 'NoRemoteRepositorySpecified', NotAGitRepository = 'NotAGitRepository', NotAtRepositoryRoot = 'NotAtRepositoryRoot', Conflict = 'Conflict', StashConflict = 'StashConflict', UnmergedChanges = 'UnmergedChanges', PushRejected = 'PushRejected', RemoteConnectionError = 'RemoteConnectionError', DirtyWorkTree = 'DirtyWorkTree', CantOpenResource = 'CantOpenResource', GitNotFound = 'GitNotFound', CantCreatePipe = 'CantCreatePipe', CantAccessRemote = 'CantAccessRemote', RepositoryNotFound = 'RepositoryNotFound', RepositoryIsLocked = 'RepositoryIsLocked', BranchNotFullyMerged = 'BranchNotFullyMerged', NoRemoteReference = 'NoRemoteReference', InvalidBranchName = 'InvalidBranchName', BranchAlreadyExists = 'BranchAlreadyExists', NoLocalChanges = 'NoLocalChanges', NoStashFound = 'NoStashFound', LocalChangesOverwritten = 'LocalChangesOverwritten', NoUpstreamBranch = 'NoUpstreamBranch', IsInSubmodule = 'IsInSubmodule', WrongCase = 'WrongCase', CantLockRef = 'CantLockRef', CantRebaseMultipleBranches = 'CantRebaseMultipleBranches', PatchDoesNotApply = 'PatchDoesNotApply', NoPathFound = 'NoPathFound', UnknownPath = 'UnknownPath', }