mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 04:49:35 +00:00
add git.smartCommitChanges
This commit is contained in:
parent
3dc34be7ae
commit
181759fe6a
|
@ -1148,6 +1148,20 @@
|
|||
"description": "%config.enableSmartCommit%",
|
||||
"default": false
|
||||
},
|
||||
"git.smartCommitChanges": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"all",
|
||||
"tracked"
|
||||
],
|
||||
"enumDescriptions": [
|
||||
"%config.smartCommitChanges.all%",
|
||||
"%config.smartCommitChanges.tracked%"
|
||||
],
|
||||
"scope": "resource",
|
||||
"description": "%config.smartCommitChanges%",
|
||||
"default": "all"
|
||||
},
|
||||
"git.suggestSmartCommit": {
|
||||
"type": "boolean",
|
||||
"scope": "resource",
|
||||
|
@ -1254,12 +1268,6 @@
|
|||
"default": false,
|
||||
"description": "%config.alwaysShowStagedChangesResourceGroup%"
|
||||
},
|
||||
"git.onlyTrackedFilesCanBeAutoStaged": {
|
||||
"type": "boolean",
|
||||
"scope": "resource",
|
||||
"default": false,
|
||||
"description": "%config.onlyTrackedFilesCanBeAutoStaged%"
|
||||
},
|
||||
"git.alwaysSignOff": {
|
||||
"type": "boolean",
|
||||
"scope": "resource",
|
||||
|
|
|
@ -89,6 +89,9 @@
|
|||
"config.ignoreLimitWarning": "Ignores the warning when there are too many changes in a repository.",
|
||||
"config.defaultCloneDirectory": "The default location to clone a git repository.",
|
||||
"config.enableSmartCommit": "Commit all changes when there are no staged changes.",
|
||||
"config.smartCommitChanges": "Control which changes are automatically staged by Smart Commit.",
|
||||
"config.smartCommitChanges.all": "Automatically stage all changes.",
|
||||
"config.smartCommitChanges.tracked": "Automatically staged tracked changes only.",
|
||||
"config.suggestSmartCommit": "Suggests to enable smart commit (commit all changes when there are no staged changes).",
|
||||
"config.enableCommitSigning": "Enables commit signing with GPG.",
|
||||
"config.discardAllScope": "Controls what changes are discarded by the `Discard all changes` command. `all` discards all changes. `tracked` discards only tracked files. `prompt` shows a prompt dialog every time the action is run.",
|
||||
|
@ -109,7 +112,6 @@
|
|||
"config.detectSubmodules": "Controls whether to automatically detect git submodules.",
|
||||
"config.detectSubmodulesLimit": "Controls the limit of git submodules detected.",
|
||||
"config.alwaysShowStagedChangesResourceGroup": "Always show the Staged Changes resource group.",
|
||||
"config.onlyTrackedFilesCanBeAutoStaged": "Only tracked files can be auto staged",
|
||||
"config.alwaysSignOff": "Controls the signoff flag for all commits.",
|
||||
"config.ignoredRepositories": "List of git repositories to ignore.",
|
||||
"config.scanRepositories": "List of paths to search for git repositories in.",
|
||||
|
|
|
@ -1275,8 +1275,8 @@ export class CommandCenter {
|
|||
|
||||
// no changes, and the user has not configured to commit all in this case
|
||||
if (!noUnstagedChanges && noStagedChanges && !enableSmartCommit) {
|
||||
|
||||
const suggestSmartCommit = config.get<boolean>('suggestSmartCommit') === true;
|
||||
|
||||
if (!suggestSmartCommit) {
|
||||
return false;
|
||||
}
|
||||
|
@ -1330,6 +1330,10 @@ export class CommandCenter {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (opts.all && config.get<'all' | 'tracked'>('smartCommitChanges') === 'tracked') {
|
||||
opts.all = 'tracked';
|
||||
}
|
||||
|
||||
await repository.commit(message, opts);
|
||||
|
||||
const postCommitCommand = config.get<'none' | 'push' | 'sync'>('postCommitCommand');
|
||||
|
|
|
@ -642,7 +642,7 @@ export function parseLsFiles(raw: string): LsFilesElement[] {
|
|||
}
|
||||
|
||||
export interface CommitOptions {
|
||||
all?: boolean;
|
||||
all?: boolean | 'tracked';
|
||||
amend?: boolean;
|
||||
signoff?: boolean;
|
||||
signCommit?: boolean;
|
||||
|
@ -1081,8 +1081,16 @@ export class Repository {
|
|||
return result.stdout.trim();
|
||||
}
|
||||
|
||||
async add(paths: string[]): Promise<void> {
|
||||
const args = ['add', '-A', '--'];
|
||||
async add(paths: string[], opts?: { update?: boolean }): Promise<void> {
|
||||
const args = ['add'];
|
||||
|
||||
if (opts && opts.update) {
|
||||
args.push('-u');
|
||||
} else {
|
||||
args.push('-A');
|
||||
}
|
||||
|
||||
args.push('--');
|
||||
|
||||
if (paths && paths.length) {
|
||||
args.push.apply(args, paths);
|
||||
|
|
|
@ -907,22 +907,11 @@ export class Repository implements Disposable {
|
|||
}
|
||||
|
||||
async commit(message: string, opts: CommitOptions = Object.create(null)): Promise<void> {
|
||||
const config = workspace.getConfiguration('git');
|
||||
const onlyTrackStagedFile = config.get<boolean>('onlyTrackedFilesCanBeAutoStaged');
|
||||
|
||||
if (this.rebaseCommit) {
|
||||
await this.run(Operation.RebaseContinue, async () => {
|
||||
if (opts.all) {
|
||||
if (onlyTrackStagedFile) {
|
||||
const unstageFiles = await this.trackedUnstagedFiles();
|
||||
if (unstageFiles.length === 0) {
|
||||
window.showInformationMessage(localize('no changes', "There are no changes to commit."));
|
||||
return false;
|
||||
}
|
||||
await this.repository.add(unstageFiles);
|
||||
} else {
|
||||
await this.repository.add([]);
|
||||
}
|
||||
const addOpts = opts.all === 'tracked' ? { update: true } : {};
|
||||
await this.repository.add([], addOpts);
|
||||
}
|
||||
|
||||
await this.repository.rebaseContinue();
|
||||
|
@ -930,18 +919,11 @@ export class Repository implements Disposable {
|
|||
} else {
|
||||
await this.run(Operation.Commit, async () => {
|
||||
if (opts.all) {
|
||||
if (onlyTrackStagedFile) {
|
||||
const unstageFiles = await this.trackedUnstagedFiles();
|
||||
if (unstageFiles.length === 0) {
|
||||
window.showInformationMessage(localize('no changes', "There are no changes to commit."));
|
||||
return false;
|
||||
}
|
||||
await this.repository.add(unstageFiles);
|
||||
} else {
|
||||
await this.repository.add([]);
|
||||
}
|
||||
const addOpts = opts.all === 'tracked' ? { update: true } : {};
|
||||
await this.repository.add([], addOpts);
|
||||
}
|
||||
|
||||
delete opts.all;
|
||||
await this.repository.commit(message, opts);
|
||||
});
|
||||
}
|
||||
|
@ -1601,12 +1583,6 @@ export class Repository implements Disposable {
|
|||
this.eventuallyUpdateWhenIdleAndWait();
|
||||
}
|
||||
|
||||
private async trackedUnstagedFiles(): Promise<string[]> {
|
||||
const rawChangedFiles = await this.repository.run(['ls-files', '.', '-m']);
|
||||
const parsedFiles = rawChangedFiles.stdout.split('\n').filter(l => !!l);
|
||||
return parsedFiles;
|
||||
}
|
||||
|
||||
@debounce(1000)
|
||||
private eventuallyUpdateWhenIdleAndWait(): void {
|
||||
this.updateWhenIdleAndWait();
|
||||
|
|
Loading…
Reference in a new issue