diff --git a/extensions/git/src/git.ts b/extensions/git/src/git.ts index af536fe6c533884b61362cb93de937ffe2afb249..34eb1ab677a066d3d60ead67d57cf6819669e993 100644 --- a/extensions/git/src/git.ts +++ b/extensions/git/src/git.ts @@ -311,6 +311,7 @@ export class GitError { export interface IGitOptions { gitPath: string; + userAgent: string; version: string; env?: any; } @@ -362,6 +363,8 @@ export interface ICloneOptions { export class Git { readonly path: string; + readonly userAgent: string; + readonly version: string; private env: any; private _onOutput = new EventEmitter(); @@ -369,6 +372,8 @@ export class Git { constructor(options: IGitOptions) { this.path = options.gitPath; + this.version = options.version; + this.userAgent = options.userAgent; this.env = options.env || {}; } @@ -1689,6 +1694,8 @@ export class Repository { args.push(name); } + args.splice(0, 0, '-c', `http.userAgent="${this.git.userAgent}"`); + try { await this.run(args); } catch (err) { diff --git a/extensions/git/src/main.ts b/extensions/git/src/main.ts index b9b525203dbb014a4e5daef76710e9a6eff24abb..d5c81c8891f48cae91322917f92679769388e7c5 100644 --- a/extensions/git/src/main.ts +++ b/extensions/git/src/main.ts @@ -6,7 +6,7 @@ import * as nls from 'vscode-nls'; const localize = nls.loadMessageBundle(); -import { ExtensionContext, workspace, window, Disposable, commands, Uri, OutputChannel, WorkspaceFolder } from 'vscode'; +import { env, ExtensionContext, workspace, window, Disposable, commands, Uri, OutputChannel, version as vscodeVersion, WorkspaceFolder } from 'vscode'; import { findGit, Git, IGit } from './git'; import { Model } from './model'; import { CommandCenter } from './commands'; @@ -20,6 +20,7 @@ import { GitProtocolHandler } from './protocolHandler'; import { GitExtensionImpl } from './api/extension'; import * as path from 'path'; import * as fs from 'fs'; +import * as os from 'os'; import { GitTimelineProvider } from './timelineProvider'; import { registerAPICommands } from './api/api1'; import { TerminalEnvironmentManager } from './terminal'; @@ -39,11 +40,17 @@ async function createModel(context: ExtensionContext, outputChannel: OutputChann const askpass = await Askpass.create(outputChannel, context.storagePath); disposables.push(askpass); - const env = askpass.getEnv(); - const terminalEnvironmentManager = new TerminalEnvironmentManager(context, env); + const environment = askpass.getEnv(); + const terminalEnvironmentManager = new TerminalEnvironmentManager(context, environment); disposables.push(terminalEnvironmentManager); - const git = new Git({ gitPath: info.path, version: info.version, env }); + + const git = new Git({ + gitPath: info.path, + userAgent: `git/${info.version} (${(os as any).version?.() ?? os.type()} ${os.release()}; ${os.platform()} ${os.arch()}) vscode/${vscodeVersion} (${env.appName})`, + version: info.version, + env: environment, + }); const model = new Model(git, askpass, context.globalState, outputChannel); disposables.push(model);