Skip to content

Commit 0bacc7f

Browse files
committed
resumed work on #437: simple staging post the major refactor in #438
too much stuff has changed to make a rebase/merge worthwhile, so I've started a new branch and am cherry picking lines from the previous work in #437
1 parent 98a6cc9 commit 0bacc7f

File tree

3 files changed

+117
-84
lines changed

3 files changed

+117
-84
lines changed

schema/plugin.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
"title": "History count",
1111
"description": "Number of (most recent) commits shown in the history log",
1212
"default": 25
13+
},
14+
"simpleStaging": {
15+
"type": "boolean",
16+
"title": "Simple staging flag",
17+
"description": "If true, use a simplified concept of staging. Only files with changes are shown (instead of showing staged/changed/untracked), and all files with changes will be automatically staged",
18+
"default": false
1319
}
1420
}
1521
}

src/components/FileList.tsx

Lines changed: 110 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Dialog, showDialog, showErrorMessage } from '@jupyterlab/apputils';
2+
import { ISettingRegistry } from '@jupyterlab/coreutils';
23
import { IRenderMimeRegistry } from '@jupyterlab/rendermime';
34
import { JSONObject } from '@phosphor/coreutils';
45
import { Menu } from '@phosphor/widgets';
@@ -15,7 +16,7 @@ import { openListedFile } from '../utils';
1516
import { GitAuthorForm } from '../widgets/AuthorBox';
1617
import { CommitBox } from './CommitBox';
1718
import { openDiffView } from './diff/DiffWidget';
18-
import { GitStage } from './GitStage';
19+
import { GitStage, IGitStageProps } from './GitStage';
1920

2021
export namespace CommandIDs {
2122
export const gitFileOpen = 'gf:Open';
@@ -56,6 +57,7 @@ export interface IFileListProps {
5657
untrackedFiles: Git.IStatusFileResult[];
5758
model: GitExtension;
5859
renderMime: IRenderMimeRegistry;
60+
settings: ISettingRegistry.ISettings;
5961
}
6062

6163
export class FileList extends React.Component<IFileListProps, IFileListState> {
@@ -390,93 +392,117 @@ export class FileList extends React.Component<IFileListProps, IFileListState> {
390392
};
391393

392394
render() {
395+
const sharedProps = {
396+
model: this.props.model,
397+
selectedFile: this.state.selectedFile,
398+
updateSelectedFile: this.updateSelectedFile,
399+
selectedStage: this.state.selectedStage,
400+
updateSelectedStage: this.updateSelectedStage,
401+
selectedDiscardFile: this.state.selectedDiscardFile,
402+
updateSelectedDiscardFile: this.updateSelectedDiscardFile,
403+
disableFiles: this.state.disableFiles,
404+
toggleDisableFiles: this.toggleDisableFiles,
405+
renderMime: this.props.renderMime
406+
};
407+
408+
const Staged = (props: Partial<IGitStageProps> = {}) => (
409+
<GitStage
410+
heading={'Staged'}
411+
files={this.props.stagedFiles}
412+
showFiles={this.state.showStaged}
413+
displayFiles={this.displayStaged}
414+
moveAllFiles={this.resetAllStagedFiles}
415+
discardAllFiles={null}
416+
discardFile={null}
417+
moveFile={this.resetStagedFile}
418+
moveFileIconClass={moveFileDownButtonStyle}
419+
moveFileIconSelectedClass={moveFileDownButtonSelectedStyle}
420+
moveAllFilesTitle={'Unstage all changes'}
421+
moveFileTitle={'Unstage this change'}
422+
contextMenu={this.contextMenuStaged}
423+
disableOthers={null}
424+
isDisabled={this.state.disableStaged}
425+
{...sharedProps}
426+
{...props}
427+
/>
428+
);
429+
430+
const Changed = (props: Partial<IGitStageProps> = {}) => (
431+
<GitStage
432+
heading={'Changed'}
433+
files={this.props.unstagedFiles}
434+
showFiles={this.state.showUnstaged}
435+
displayFiles={this.displayUnstaged}
436+
moveAllFiles={this.addAllUnstagedFiles}
437+
discardAllFiles={this.discardAllUnstagedFiles}
438+
discardFile={this.discardUnstagedFile}
439+
moveFile={this.addUnstagedFile}
440+
moveFileIconClass={moveFileUpButtonStyle}
441+
moveFileIconSelectedClass={moveFileUpButtonSelectedStyle}
442+
moveAllFilesTitle={'Stage all changes'}
443+
moveFileTitle={'Stage this change'}
444+
contextMenu={this.contextMenuUnstaged}
445+
disableOthers={this.disableStagesForDiscardAll}
446+
isDisabled={this.state.disableUnstaged}
447+
{...sharedProps}
448+
{...props}
449+
/>
450+
);
451+
452+
const Untracked = (props: Partial<IGitStageProps> = {}) => (
453+
<GitStage
454+
heading={'Untracked'}
455+
files={this.props.untrackedFiles}
456+
showFiles={this.state.showUntracked}
457+
displayFiles={this.displayUntracked}
458+
moveAllFiles={this.addAllUntrackedFiles}
459+
discardAllFiles={null}
460+
discardFile={null}
461+
moveFile={this.addUntrackedFile}
462+
moveFileIconClass={moveFileUpButtonStyle}
463+
moveFileIconSelectedClass={moveFileUpButtonSelectedStyle}
464+
moveAllFilesTitle={'Track all untracked files'}
465+
moveFileTitle={'Track this file'}
466+
contextMenu={this.contextMenuUntracked}
467+
disableOthers={null}
468+
isDisabled={this.state.disableUntracked}
469+
{...sharedProps}
470+
{...props}
471+
/>
472+
);
473+
474+
const allFilesExcludingUnmodified = () =>
475+
this.props.untrackedFiles.concat(
476+
this.props.unstagedFiles,
477+
this.props.stagedFiles
478+
);
479+
393480
return (
394481
<div onContextMenu={event => event.preventDefault()}>
395482
<CommitBox
396-
hasStagedFiles={this.props.stagedFiles.length > 0}
397-
commitAllStagedFiles={this.commitAllStagedFiles}
398-
/>
399-
<GitStage
400-
heading={'Staged'}
401-
files={this.props.stagedFiles}
402-
model={this.props.model}
403-
showFiles={this.state.showStaged}
404-
displayFiles={this.displayStaged}
405-
moveAllFiles={this.resetAllStagedFiles}
406-
discardAllFiles={null}
407-
discardFile={null}
408-
moveFile={this.resetStagedFile}
409-
moveFileIconClass={moveFileDownButtonStyle}
410-
moveFileIconSelectedClass={moveFileDownButtonSelectedStyle}
411-
moveAllFilesTitle={'Unstage all changes'}
412-
moveFileTitle={'Unstage this change'}
413-
contextMenu={this.contextMenuStaged}
414-
selectedFile={this.state.selectedFile}
415-
updateSelectedFile={this.updateSelectedFile}
416-
selectedStage={this.state.selectedStage}
417-
updateSelectedStage={this.updateSelectedStage}
418-
selectedDiscardFile={this.state.selectedDiscardFile}
419-
updateSelectedDiscardFile={this.updateSelectedDiscardFile}
420-
disableFiles={this.state.disableFiles}
421-
toggleDisableFiles={this.toggleDisableFiles}
422-
disableOthers={null}
423-
isDisabled={this.state.disableStaged}
424-
renderMime={this.props.renderMime}
425-
/>
426-
<GitStage
427-
heading={'Changed'}
428-
files={this.props.unstagedFiles}
429-
model={this.props.model}
430-
showFiles={this.state.showUnstaged}
431-
displayFiles={this.displayUnstaged}
432-
moveAllFiles={this.addAllUnstagedFiles}
433-
discardAllFiles={this.discardAllUnstagedFiles}
434-
discardFile={this.discardUnstagedFile}
435-
moveFile={this.addUnstagedFile}
436-
moveFileIconClass={moveFileUpButtonStyle}
437-
moveFileIconSelectedClass={moveFileUpButtonSelectedStyle}
438-
moveAllFilesTitle={'Stage all changes'}
439-
moveFileTitle={'Stage this change'}
440-
contextMenu={this.contextMenuUnstaged}
441-
selectedFile={this.state.selectedFile}
442-
updateSelectedFile={this.updateSelectedFile}
443-
selectedStage={this.state.selectedStage}
444-
updateSelectedStage={this.updateSelectedStage}
445-
selectedDiscardFile={this.state.selectedDiscardFile}
446-
updateSelectedDiscardFile={this.updateSelectedDiscardFile}
447-
disableFiles={this.state.disableFiles}
448-
toggleDisableFiles={this.toggleDisableFiles}
449-
disableOthers={this.disableStagesForDiscardAll}
450-
isDisabled={this.state.disableUnstaged}
451-
renderMime={this.props.renderMime}
452-
/>
453-
<GitStage
454-
heading={'Untracked'}
455-
files={this.props.untrackedFiles}
456-
model={this.props.model}
457-
showFiles={this.state.showUntracked}
458-
displayFiles={this.displayUntracked}
459-
moveAllFiles={this.addAllUntrackedFiles}
460-
discardAllFiles={null}
461-
discardFile={null}
462-
moveFile={this.addUntrackedFile}
463-
moveFileIconClass={moveFileUpButtonStyle}
464-
moveFileIconSelectedClass={moveFileUpButtonSelectedStyle}
465-
moveAllFilesTitle={'Track all untracked files'}
466-
moveFileTitle={'Track this file'}
467-
contextMenu={this.contextMenuUntracked}
468-
selectedFile={this.state.selectedFile}
469-
updateSelectedFile={this.updateSelectedFile}
470-
selectedStage={this.state.selectedStage}
471-
updateSelectedStage={this.updateSelectedStage}
472-
selectedDiscardFile={this.state.selectedDiscardFile}
473-
updateSelectedDiscardFile={this.updateSelectedDiscardFile}
474-
disableFiles={this.state.disableFiles}
475-
toggleDisableFiles={this.toggleDisableFiles}
476-
disableOthers={null}
477-
isDisabled={this.state.disableUntracked}
478-
renderMime={this.props.renderMime}
483+
hasFiles={this.props.stagedFiles.length > 0}
484+
commitFunc={this.commitAllStagedFiles}
479485
/>
486+
{this.props.settings.composite['simpleStaging'] ? (
487+
<div>
488+
<Changed
489+
files={allFilesExcludingUnmodified()}
490+
discardAllFiles={null}
491+
discardFile={null}
492+
moveFile={null}
493+
moveFileIconClass={null}
494+
moveFileIconSelectedClass={null}
495+
moveAllFilesTitle={null}
496+
moveFileTitle={null}
497+
/>
498+
</div>
499+
) : (
500+
<div>
501+
<Staged />
502+
<Changed />
503+
<Untracked />
504+
</div>
505+
)}
480506
</div>
481507
);
482508
}

src/components/GitPanel.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ export class GitPanel extends React.Component<
204204
untrackedFiles={this.state.untrackedFiles}
205205
model={this.props.model}
206206
renderMime={this.props.renderMime}
207+
settings={this.props.settings}
207208
/>
208209
);
209210
}

0 commit comments

Comments
 (0)