From d88068992401966803970b5260eb4e2c89a1636b Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Wed, 12 Sep 2018 16:20:48 +0200 Subject: [PATCH] git: fetch from all remotes fixes #56463 --- extensions/git/package.json | 9 +++++++++ extensions/git/package.nls.json | 1 + extensions/git/src/commands.ts | 10 ++++++++++ extensions/git/src/git.ts | 14 ++++++++------ extensions/git/src/repository.ts | 7 ++++++- 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/extensions/git/package.json b/extensions/git/package.json index 78e72a5d137..c0adf72fc88 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -260,6 +260,11 @@ "title": "%command.fetch%", "category": "Git" }, + { + "command": "git.fetchAll", + "title": "%command.fetchAll%", + "category": "Git" + }, { "command": "git.pull", "title": "%command.pull%", @@ -494,6 +499,10 @@ "command": "git.fetch", "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, + { + "command": "git.fetchAll", + "when": "config.git.enabled && gitOpenRepositoryCount != 0" + }, { "command": "git.push", "when": "config.git.enabled && gitOpenRepositoryCount != 0" diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json index cc7be0e63a8..546bea28b64 100644 --- a/extensions/git/package.nls.json +++ b/extensions/git/package.nls.json @@ -36,6 +36,7 @@ "command.merge": "Merge Branch...", "command.createTag": "Create Tag", "command.fetch": "Fetch", + "command.fetchAll": "Fetch From All Remotes", "command.pull": "Pull", "command.pullRebase": "Pull (Rebase)", "command.pullFrom": "Pull from...", diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index 316d6fb6a5e..473ecbe1c19 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -1397,6 +1397,16 @@ export class CommandCenter { await repository.fetchDefault(); } + @command('git.fetchAll', { repository: true }) + async fetchAll(repository: Repository): Promise { + if (repository.remotes.length === 0) { + window.showWarningMessage(localize('no remotes to fetch', "This repository has no remotes configured to fetch from.")); + return; + } + + await repository.fetchAll(); + } + @command('git.pullFrom', { repository: true }) async pullFrom(repository: Repository): Promise { const remotes = repository.remotes; diff --git a/extensions/git/src/git.ts b/extensions/git/src/git.ts index 8167b2e5714..4b3f71964af 100644 --- a/extensions/git/src/git.ts +++ b/extensions/git/src/git.ts @@ -1142,19 +1142,21 @@ export class Repository { await this.run(args); } - async fetch(remote?: string, ref?: string): Promise { + async fetch(options: { remote?: string, ref?: string, all?: boolean } = {}): Promise { const args = ['fetch']; - if (remote) { - args.push(remote); + if (options.remote) { + args.push(options.remote); - if (ref) { - args.push(ref); + if (options.ref) { + args.push(options.ref); } + } else if (options.all) { + args.push('--all'); } try { - await this.run(['fetch']); + await this.run(args); } catch (err) { if (/No remote repository specified\./.test(err.stderr || '')) { err.gitErrorCode = GitErrorCodes.NoRemoteRepositorySpecified; diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index d55478e3d55..4ef9e178d65 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -900,8 +900,13 @@ export class Repository implements Disposable { await this.run(Operation.Fetch, () => this.repository.fetch()); } + @throttle + async fetchAll(): Promise { + await this.run(Operation.Fetch, () => this.repository.fetch({ all: true })); + } + async fetch(remote?: string, ref?: string): Promise { - await this.run(Operation.Fetch, () => this.repository.fetch()); + await this.run(Operation.Fetch, () => this.repository.fetch({ remote, ref })); } @throttle -- GitLab