mirror of
https://github.com/Microsoft/vscode
synced 2024-10-01 08:50:48 +00:00
Git - empty commit should not include unstaged changes (#214587)
This commit is contained in:
parent
9548a679f5
commit
3d7e352d2d
|
@ -2068,69 +2068,71 @@ export class CommandCenter {
|
|||
let noStagedChanges = repository.indexGroup.resourceStates.length === 0;
|
||||
let noUnstagedChanges = repository.workingTreeGroup.resourceStates.length === 0;
|
||||
|
||||
if (promptToSaveFilesBeforeCommit !== 'never') {
|
||||
let documents = workspace.textDocuments
|
||||
.filter(d => !d.isUntitled && d.isDirty && isDescendant(repository.root, d.uri.fsPath));
|
||||
if (!opts.empty) {
|
||||
if (promptToSaveFilesBeforeCommit !== 'never') {
|
||||
let documents = workspace.textDocuments
|
||||
.filter(d => !d.isUntitled && d.isDirty && isDescendant(repository.root, d.uri.fsPath));
|
||||
|
||||
if (promptToSaveFilesBeforeCommit === 'staged' || repository.indexGroup.resourceStates.length > 0) {
|
||||
documents = documents
|
||||
.filter(d => repository.indexGroup.resourceStates.some(s => pathEquals(s.resourceUri.fsPath, d.uri.fsPath)));
|
||||
}
|
||||
|
||||
if (documents.length > 0) {
|
||||
const message = documents.length === 1
|
||||
? l10n.t('The following file has unsaved changes which won\'t be included in the commit if you proceed: {0}.\n\nWould you like to save it before committing?', path.basename(documents[0].uri.fsPath))
|
||||
: l10n.t('There are {0} unsaved files.\n\nWould you like to save them before committing?', documents.length);
|
||||
const saveAndCommit = l10n.t('Save All & Commit Changes');
|
||||
const commit = l10n.t('Commit Changes');
|
||||
const pick = await window.showWarningMessage(message, { modal: true }, saveAndCommit, commit);
|
||||
|
||||
if (pick === saveAndCommit) {
|
||||
await Promise.all(documents.map(d => d.save()));
|
||||
|
||||
// After saving the dirty documents, if there are any documents that are part of the
|
||||
// index group we have to add them back in order for the saved changes to be committed
|
||||
if (promptToSaveFilesBeforeCommit === 'staged' || repository.indexGroup.resourceStates.length > 0) {
|
||||
documents = documents
|
||||
.filter(d => repository.indexGroup.resourceStates.some(s => pathEquals(s.resourceUri.fsPath, d.uri.fsPath)));
|
||||
await repository.add(documents.map(d => d.uri));
|
||||
}
|
||||
|
||||
noStagedChanges = repository.indexGroup.resourceStates.length === 0;
|
||||
noUnstagedChanges = repository.workingTreeGroup.resourceStates.length === 0;
|
||||
} else if (pick !== commit) {
|
||||
if (documents.length > 0) {
|
||||
const message = documents.length === 1
|
||||
? l10n.t('The following file has unsaved changes which won\'t be included in the commit if you proceed: {0}.\n\nWould you like to save it before committing?', path.basename(documents[0].uri.fsPath))
|
||||
: l10n.t('There are {0} unsaved files.\n\nWould you like to save them before committing?', documents.length);
|
||||
const saveAndCommit = l10n.t('Save All & Commit Changes');
|
||||
const commit = l10n.t('Commit Changes');
|
||||
const pick = await window.showWarningMessage(message, { modal: true }, saveAndCommit, commit);
|
||||
|
||||
if (pick === saveAndCommit) {
|
||||
await Promise.all(documents.map(d => d.save()));
|
||||
|
||||
// After saving the dirty documents, if there are any documents that are part of the
|
||||
// index group we have to add them back in order for the saved changes to be committed
|
||||
documents = documents
|
||||
.filter(d => repository.indexGroup.resourceStates.some(s => pathEquals(s.resourceUri.fsPath, d.uri.fsPath)));
|
||||
await repository.add(documents.map(d => d.uri));
|
||||
|
||||
noStagedChanges = repository.indexGroup.resourceStates.length === 0;
|
||||
noUnstagedChanges = repository.workingTreeGroup.resourceStates.length === 0;
|
||||
} else if (pick !== commit) {
|
||||
return; // do not commit on cancel
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// no changes, and the user has not configured to commit all in this case
|
||||
if (!noUnstagedChanges && noStagedChanges && !enableSmartCommit && !opts.all) {
|
||||
const suggestSmartCommit = config.get<boolean>('suggestSmartCommit') === true;
|
||||
|
||||
if (!suggestSmartCommit) {
|
||||
return;
|
||||
}
|
||||
|
||||
// prompt the user if we want to commit all or not
|
||||
const message = l10n.t('There are no staged changes to commit.\n\nWould you like to stage all your changes and commit them directly?');
|
||||
const yes = l10n.t('Yes');
|
||||
const always = l10n.t('Always');
|
||||
const never = l10n.t('Never');
|
||||
const pick = await window.showWarningMessage(message, { modal: true }, yes, always, never);
|
||||
|
||||
if (pick === always) {
|
||||
config.update('enableSmartCommit', true, true);
|
||||
} else if (pick === never) {
|
||||
config.update('suggestSmartCommit', false, true);
|
||||
return;
|
||||
} else if (pick !== yes) {
|
||||
return; // do not commit on cancel
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// no changes, and the user has not configured to commit all in this case
|
||||
if (!noUnstagedChanges && noStagedChanges && !enableSmartCommit && !opts.empty && !opts.all) {
|
||||
const suggestSmartCommit = config.get<boolean>('suggestSmartCommit') === true;
|
||||
|
||||
if (!suggestSmartCommit) {
|
||||
return;
|
||||
if (opts.all === undefined) {
|
||||
opts = { ...opts, all: noStagedChanges };
|
||||
} else if (!opts.all && noStagedChanges) {
|
||||
opts = { ...opts, all: true };
|
||||
}
|
||||
|
||||
// prompt the user if we want to commit all or not
|
||||
const message = l10n.t('There are no staged changes to commit.\n\nWould you like to stage all your changes and commit them directly?');
|
||||
const yes = l10n.t('Yes');
|
||||
const always = l10n.t('Always');
|
||||
const never = l10n.t('Never');
|
||||
const pick = await window.showWarningMessage(message, { modal: true }, yes, always, never);
|
||||
|
||||
if (pick === always) {
|
||||
config.update('enableSmartCommit', true, true);
|
||||
} else if (pick === never) {
|
||||
config.update('suggestSmartCommit', false, true);
|
||||
return;
|
||||
} else if (pick !== yes) {
|
||||
return; // do not commit on cancel
|
||||
}
|
||||
}
|
||||
|
||||
if (opts.all === undefined) {
|
||||
opts = { ...opts, all: noStagedChanges };
|
||||
} else if (!opts.all && noStagedChanges && !opts.empty) {
|
||||
opts = { ...opts, all: true };
|
||||
}
|
||||
|
||||
// enable signing of commits if configured
|
||||
|
|
Loading…
Reference in a new issue