diff --git a/lib/controllers/git-tab-controller.js b/lib/controllers/git-tab-controller.js index d001cbee97..1cdde65f9a 100644 --- a/lib/controllers/git-tab-controller.js +++ b/lib/controllers/git-tab-controller.js @@ -7,6 +7,7 @@ import etch from 'etch'; import GitTabView from '../views/git-tab-view'; import ModelObserver from '../models/model-observer'; import {autobind} from 'core-decorators'; +import yubikiri from 'yubikiri'; export default class GitTabController { constructor(props) { @@ -91,8 +92,8 @@ export default class GitTabController { } @autobind - async fetchRepositoryData(repository) { - const dataPromises = { + fetchRepositoryData(repository) { + return yubikiri({ mergeConflicts: repository.getMergeConflicts(), lastCommit: repository.getLastCommit(), isMerging: repository.isMerging(), @@ -102,33 +103,20 @@ export default class GitTabController { remoteName: repository.getRemoteForBranch(this.branchName), unstagedChanges: repository.getUnstagedChanges(), stagedChanges: this.fetchStagedChanges(repository), - }; - const data = { - unstagedChanges: await dataPromises.unstagedChanges, - stagedChanges: await dataPromises.stagedChanges, - mergeConflicts: await dataPromises.mergeConflicts, - lastCommit: await dataPromises.lastCommit, - isMerging: await dataPromises.isMerging, - isRebasing: await dataPromises.isRebasing, - branchName: await dataPromises.branchName, - branches: await dataPromises.branches, - mergeMessage: null, - aheadCount: null, - behindCount: null, - remoteName: await dataPromises.remoteName, workingDirectoryPath: repository.getWorkingDirectoryPath(), - }; - - if (data.remoteName) { - data.aheadCount = await repository.getAheadCount(data.branchName); - data.behindCount = await repository.getBehindCount(this.branchName); - } - - if (data.isMerging) { - data.mergeMessage = await repository.getMergeMessage(); - } - - return data; + aheadCount: async query => { + const remoteName = await query.remoteName; + return remoteName ? repository.getAheadCount(await query.branchName) : null; + }, + behindCount: async query => { + const remoteName = await query.remoteName; + return remoteName ? repository.getBehindCount(await query.branchName) : null; + }, + mergeMessage: async query => { + const isMerging = await query.isMerging; + return isMerging ? repository.getMergeMessage() : null; + }, + }); } fetchStagedChanges(repository) { diff --git a/lib/controllers/github-tab-controller.js b/lib/controllers/github-tab-controller.js index 7ae7210327..08f3d5649d 100644 --- a/lib/controllers/github-tab-controller.js +++ b/lib/controllers/github-tab-controller.js @@ -1,5 +1,6 @@ import React from 'react'; import {autobind} from 'core-decorators'; +import yubikiri from 'yubikiri'; import RemotePrController from './remote-pr-controller'; import Repository from '../models/repository'; @@ -39,13 +40,15 @@ class RemoteSelector extends React.Component { @ObserveModel({ getModel: props => props.repository, - fetchData: async repo => { - let remotes = await repo.getRemotes(); - const currentBranch = await repo.getCurrentBranch(); - const selectedRemote = await repo.getConfig('atomGithub.currentRemote'); - remotes = remotes.map(({name, url}) => ({name, url, info: Repository.githubInfoFromRemote(url)})) - .filter(remote => remote.info.githubRepo); - return {remotes, currentBranch, selectedRemote}; + fetchData: repo => { + return yubikiri({ + remotes: repo.getRemotes().then(remotes => { + return remotes.map(({name, url}) => ({name, url, info: Repository.githubInfoFromRemote(url)})) + .filter(remote => remote.info.githubRepo); + }), + currentBranch: repo.getCurrentBranch(), + selectedRemote: repo.getConfig('atomGithub.currentRemote'), + }); }, }) export default class GithubTabController extends React.Component { diff --git a/lib/controllers/remote-pr-controller.js b/lib/controllers/remote-pr-controller.js index a4dd968c64..dec723969d 100644 --- a/lib/controllers/remote-pr-controller.js +++ b/lib/controllers/remote-pr-controller.js @@ -1,5 +1,6 @@ import React from 'react'; import {autobind} from 'core-decorators'; +import yubikiri from 'yubikiri'; import {RemotePropType} from '../prop-types'; import ObserveModel from '../decorators/observe-model'; @@ -8,10 +9,10 @@ import PrInfoController from './pr-info-controller'; @ObserveModel({ getModel: props => props.loginModel, - fetchData: async (loginModel, {instance}) => { - return { - token: await loginModel.getToken(instance), - }; + fetchData: (loginModel, {instance}) => { + return yubikiri({ + token: loginModel.getToken(instance), + }); }, }) export default class RemotePrController extends React.Component { diff --git a/lib/controllers/repository-conflict-controller.js b/lib/controllers/repository-conflict-controller.js index 228a653dc7..6e4a122133 100644 --- a/lib/controllers/repository-conflict-controller.js +++ b/lib/controllers/repository-conflict-controller.js @@ -1,5 +1,6 @@ import path from 'path'; import React from 'react'; +import yubikiri from 'yubikiri'; import {CompositeDisposable} from 'atom'; import ObserveModel from '../decorators/observe-model'; @@ -11,17 +12,12 @@ import EditorConflictController from './editor-conflict-controller'; */ @ObserveModel({ getModel: props => props.repository, - fetchData: async (r, props) => { - const promises = { - mergeConflicts: r.getMergeConflicts(), - isRebasing: r.isRebasing(), - }; - - return { + fetchData: (r, props) => { + return yubikiri({ workingDirectoryPath: r.getWorkingDirectoryPath(), - mergeConflictPaths: (await promises.mergeConflicts).map(conflict => conflict.filePath), - isRebasing: await promises.isRebasing, - }; + mergeConflictPaths: r.getMergeConflicts().then(conflicts => conflicts.map(conflict => conflict.filePath)), + isRebasing: r.isRebasing(), + }); }, }) export default class RepositoryConflictController extends React.Component { diff --git a/lib/controllers/status-bar-tile-controller.js b/lib/controllers/status-bar-tile-controller.js index 7502dd5f64..beacb74012 100644 --- a/lib/controllers/status-bar-tile-controller.js +++ b/lib/controllers/status-bar-tile-controller.js @@ -8,12 +8,13 @@ import PushPullMenuView from '../views/push-pull-menu-view'; import ChangedFilesCountView from '../views/changed-files-count-view'; import Tooltip from '../views/tooltip'; import Commands, {Command} from '../views/commands'; +import yubikiri from 'yubikiri'; import {autobind} from 'core-decorators'; @ObserveModel({ getModel: props => props.repository, - fetchData: async repository => { - const promises = { + fetchData: repository => { + return yubikiri({ branchName: repository.getCurrentBranch(), branches: repository.getBranches(), changedFilesCount: repository.getStatusesForChangedFiles().then(statuses => { @@ -32,24 +33,11 @@ import {autobind} from 'core-decorators'; return changedFiles.size; }), - }; - - const branchName = await promises.branchName; - const branchPromises = { - remoteName: repository.getRemoteForBranch(branchName), - aheadCount: repository.getAheadCount(branchName), - behindCount: repository.getBehindCount(branchName), - }; - - return { - branchName, - changedFilesCount: await promises.changedFilesCount, - branches: await promises.branches, - remoteName: await branchPromises.remoteName, - aheadCount: await branchPromises.aheadCount, - behindCount: await branchPromises.behindCount, - pullDisabled: (await promises.changedFilesCount) > 0, - }; + remoteName: async query => repository.getRemoteForBranch(await query.branchName), + aheadCount: async query => repository.getAheadCount(await query.branchName), + behindCount: async query => repository.getBehindCount(await query.branchName), + pullDisabled: async query => (await query.changedFilesCount) > 0, + }); }, }) export default class StatusBarTileController extends React.Component { diff --git a/package.json b/package.json index c853dfd5fb..1063f89a93 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,8 @@ "recursive-readdir": "^2.0.0", "semver": "^5.3.0", "tree-kill": "^1.1.0", - "what-the-diff": "^0.3.0" + "what-the-diff": "^0.3.0", + "yubikiri": "0.0.2" }, "devDependencies": { "atom-mocha-test-runner": "^1.0.0", diff --git a/test/views/staging-view.test.js b/test/views/staging-view.test.js index 8123650f74..753109f106 100644 --- a/test/views/staging-view.test.js +++ b/test/views/staging-view.test.js @@ -398,6 +398,7 @@ describe('StagingView', function() { view.mouseup(); assertEqualSets(view.selection.getSelectedItems(), new Set(unstagedChanges.slice(0, 2))); assert.equal(view.props.didSelectFilePath.callCount, 0); + view.element.remove(); }); }); @@ -542,6 +543,7 @@ describe('StagingView', function() { await view.mousedownOnItem({button: 0}, unstagedChanges[2]); assertEqualSets(view.selection.getSelectedItems(), new Set([unstagedChanges[2]])); + view.element.remove(); }); if (process.platform !== 'win32') { @@ -565,6 +567,7 @@ describe('StagingView', function() { assert.isFalse(view.selection.addOrSubtractSelection.called); assert.isFalse(view.selection.selectItem.called); assert.isFalse(view.mouseSelectionInProgress); + view.element.remove(); }); }); }