提交 39f33ae2 编写于 作者: B Bugra Cuhadaroglu

Git: Pull from specific branch

上级 a49a4268
...@@ -187,6 +187,11 @@ ...@@ -187,6 +187,11 @@
"title": "%command.pullRebase%", "title": "%command.pullRebase%",
"category": "Git" "category": "Git"
}, },
{
"command": "git.pullFromRemoteBranch",
"title": "%command.pullFromRemoteBranch%",
"category": "Git"
},
{ {
"command": "git.push", "command": "git.push",
"title": "%command.push%", "title": "%command.push%",
...@@ -311,6 +316,10 @@ ...@@ -311,6 +316,10 @@
"command": "git.pull", "command": "git.pull",
"when": "config.git.enabled && scmProvider == git && gitState == idle" "when": "config.git.enabled && scmProvider == git && gitState == idle"
}, },
{
"command": "git.pullFromRemoteBranch",
"when": "config.git.enabled && scmProvider == git && gitState == idle"
},
{ {
"command": "git.pullRebase", "command": "git.pullRebase",
"when": "config.git.enabled && scmProvider == git && gitState == idle" "when": "config.git.enabled && scmProvider == git && gitState == idle"
...@@ -367,6 +376,11 @@ ...@@ -367,6 +376,11 @@
"group": "1_sync", "group": "1_sync",
"when": "config.git.enabled && scmProvider == git && gitState == idle" "when": "config.git.enabled && scmProvider == git && gitState == idle"
}, },
{
"command": "git.pullFromRemoteBranch",
"group": "1_sync",
"when": "config.git.enabled && scmProvider == git && gitState == idle"
},
{ {
"command": "git.push", "command": "git.push",
"group": "1_sync", "group": "1_sync",
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
"command.deleteBranch": "Delete Branch...", "command.deleteBranch": "Delete Branch...",
"command.pull": "Pull", "command.pull": "Pull",
"command.pullRebase": "Pull (Rebase)", "command.pullRebase": "Pull (Rebase)",
"command.pullFromRemoteBranch": "Pull From...",
"command.push": "Push", "command.push": "Push",
"command.pushTo": "Push to...", "command.pushTo": "Push to...",
"command.sync": "Sync", "command.sync": "Sync",
......
...@@ -764,6 +764,37 @@ export class CommandCenter { ...@@ -764,6 +764,37 @@ export class CommandCenter {
} }
} }
@command('git.pullFromRemoteBranch')
async pullFrom(): Promise<void> {
const remotes = this.model.remotes;
if (remotes.length === 0) {
window.showWarningMessage(localize('no remotes to pull', "Your repository has no remotes configured to pull from."));
return;
}
const picks = remotes.map(r => ({ label: r.name, description: r.url }));
const placeHolder = localize('pick remote pull repo', "Pick a remote to pull the branch from");
const pick = await window.showQuickPick(picks, { placeHolder });
if (!pick) {
return;
}
const branchName = await window.showInputBox({
placeHolder: localize('branch name', "Branch name"),
prompt: localize('provide branch name', "Please provide a branch name"),
ignoreFocusOut: true
});
if (!branchName) {
return;
}
this.model.pull(false, pick.label, branchName);
}
@command('git.pull') @command('git.pull')
async pull(): Promise<void> { async pull(): Promise<void> {
const remotes = this.model.remotes; const remotes = this.model.remotes;
......
...@@ -270,7 +270,8 @@ export const GitErrorCodes = { ...@@ -270,7 +270,8 @@ export const GitErrorCodes = {
CantAccessRemote: 'CantAccessRemote', CantAccessRemote: 'CantAccessRemote',
RepositoryNotFound: 'RepositoryNotFound', RepositoryNotFound: 'RepositoryNotFound',
RepositoryIsLocked: 'RepositoryIsLocked', RepositoryIsLocked: 'RepositoryIsLocked',
BranchNotFullyMerged: 'BranchNotFullyMerged' BranchNotFullyMerged: 'BranchNotFullyMerged',
NoRemoteReference: 'NoRemoteReference'
}; };
function getGitErrorCode(stderr: string): string | undefined { function getGitErrorCode(stderr: string): string | undefined {
...@@ -290,6 +291,8 @@ function getGitErrorCode(stderr: string): string | undefined { ...@@ -290,6 +291,8 @@ function getGitErrorCode(stderr: string): string | undefined {
return GitErrorCodes.CantAccessRemote; return GitErrorCodes.CantAccessRemote;
} else if (/branch '.+' is not fully merged/.test(stderr)) { } else if (/branch '.+' is not fully merged/.test(stderr)) {
return GitErrorCodes.BranchNotFullyMerged; return GitErrorCodes.BranchNotFullyMerged;
} else if (/Couldn\'t find remote ref/.test(stderr)) {
return GitErrorCodes.NoRemoteReference;
} }
return void 0; return void 0;
...@@ -734,13 +737,21 @@ export class Repository { ...@@ -734,13 +737,21 @@ export class Repository {
} }
} }
async pull(rebase?: boolean): Promise<void> { async pull(rebase?: boolean, remote?: string, name?: string): Promise<void> {
const args = ['pull']; const args = ['pull'];
if (rebase) { if (rebase) {
args.push('-r'); args.push('-r');
} }
if (remote) {
args.push(remote);
}
if (name) {
args.push(name);
}
try { try {
await this.run(args); await this.run(args);
} catch (err) { } catch (err) {
......
...@@ -480,13 +480,13 @@ export class Model implements Disposable { ...@@ -480,13 +480,13 @@ export class Model implements Disposable {
} }
@throttle @throttle
async pull(): Promise<void> { async pullWithRebase(): Promise<void> {
await this.run(Operation.Pull, () => this.repository.pull()); await this.run(Operation.Pull, () => this.repository.pull(true));
} }
@throttle @throttle
async pullWithRebase(): Promise<void> { async pull(rebase?: boolean, remote?: string, name?: string): Promise<void> {
await this.run(Operation.Pull, () => this.repository.pull(true)); await this.run(Operation.Pull, () => this.repository.pull(rebase, remote, name));
} }
@throttle @throttle
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册