UNPKG

atom-nuclide

Version:

A unified developer experience for web and mobile development, built as a suite of features on top of Atom to provide hackability and the support of an active community.

149 lines (127 loc) 6.39 kB
Object.defineProperty(exports, '__esModule', { value: true }); /* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the license found in the LICENSE file in * the root directory of this source tree. */ var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })(); var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } var _MercurialConflictContext2; function _MercurialConflictContext() { return _MercurialConflictContext2 = require('./MercurialConflictContext'); } var _atom2; function _atom() { return _atom2 = require('atom'); } var _nuclideLogging2; function _nuclideLogging() { return _nuclideLogging2 = require('../../nuclide-logging'); } var _nuclideAnalytics2; function _nuclideAnalytics() { return _nuclideAnalytics2 = require('../../nuclide-analytics'); } var MercurialConflictDetector = (function () { function MercurialConflictDetector() { _classCallCheck(this, MercurialConflictDetector); this._subscriptions = new (_atom2 || _atom()).CompositeDisposable(); this._repositorySubscriptions = new Map(); this._mercurialConflictContext = new (_MercurialConflictContext2 || _MercurialConflictContext()).MercurialConflictContext(); this._subscriptions.add(atom.project.onDidChangePaths(this._updateRepositories.bind(this))); } _createClass(MercurialConflictDetector, [{ key: 'setConflictsApi', value: function setConflictsApi(conflictsApi) { var _this = this; this._conflictsApi = conflictsApi; conflictsApi.registerContextApi({ getContext: function getContext() { return Promise.resolve(_this._mercurialConflictContext); } }); this._updateRepositories(); } }, { key: '_updateRepositories', value: function _updateRepositories() { var repositories = new Set(atom.project.getRepositories().filter(function (repository) { return repository != null && repository.getType() === 'hg'; })); // Dispose removed projects repositories, if any. for (var _ref3 of this._repositorySubscriptions) { var _ref2 = _slicedToArray(_ref3, 2); var repository = _ref2[0]; var repositorySubscription = _ref2[1]; if (repositories.has(repository)) { continue; } repositorySubscription.dispose(); this._repositorySubscriptions.delete(repository); } // Add the new project repositories, if any. for (var repository of repositories) { if (this._repositorySubscriptions.has(repository)) { continue; } this._watchRepository(repository); } } }, { key: '_watchRepository', value: function _watchRepository(repository) { var _this2 = this; var subscriptions = new (_atom2 || _atom()).CompositeDisposable(); this._conflictStateChanged(repository); subscriptions.add(repository.onDidChangeConflictState(function () { return _this2._conflictStateChanged(repository); })); this._repositorySubscriptions.set(repository, subscriptions); } }, { key: '_conflictStateChanged', value: function _conflictStateChanged(repository) { var conflictsApi = this._conflictsApi; if (conflictsApi == null || conflictsApi.showForContext == null) { (0, (_nuclideLogging2 || _nuclideLogging()).getLogger)().info('No compatible "merge-conflicts" API found.'); return; } if (repository.isInConflict()) { (0, (_nuclideAnalytics2 || _nuclideAnalytics()).track)('hg-conflict-detctor.detected-conflicts'); this._mercurialConflictContext.setConflictingRepository(repository); conflictsApi.showForContext(this._mercurialConflictContext); atom.notifications.addWarning('Nuclide detected merge conflicts in your active project\'s repository', { detail: 'Use the conflicts resolver UI below to help resolve them', nativeFriendly: true }); } else { var toClear = this._mercurialConflictContext.getConflictingRepository() === repository; if (toClear) { (0, (_nuclideAnalytics2 || _nuclideAnalytics()).track)('hg-conflict-detctor.resolved-outside-nuclide'); this._mercurialConflictContext.clearConflictState(); conflictsApi.hideForContext(this._mercurialConflictContext); atom.notifications.addInfo('Conflicts resolved outside of Nuclide'); (0, (_nuclideLogging2 || _nuclideLogging()).getLogger)().info('Conflicts resolved outside of Nuclide'); } else { (0, (_nuclideAnalytics2 || _nuclideAnalytics()).track)('hg-conflict-detctor.resolved-in-nuclide'); } } } }, { key: 'dispose', value: function dispose() { this._subscriptions.dispose(); for (var repositorySubscription of this._repositorySubscriptions.values()) { repositorySubscription.dispose(); } this._repositorySubscriptions.clear(); } }]); return MercurialConflictDetector; })(); exports.MercurialConflictDetector = MercurialConflictDetector;