IEnumerable<ICommandOutput> AddRemote() { var repositories = ConfigurationManager.LoadRemoteRepositories(); int position = GetNewRemotePosition(repositories); repositories[Name] = new RemoteRepository { Href = Href, Name = Name, Priority = position }; ConfigurationManager.SaveRemoteRepositories(repositories); yield return new GenericMessage(string.Format("Remote repository '{0}' added.", Name)); }
void HandlePrioritySetting(RemoteRepositories repositories, RemoteRepository remote) { if (!_position.HasValue || remote.Priority == _position) return; var prioHasIncreased = remote.Priority > _position; var otherRepositories = repositories.Values.Except(remote.ToEnumerable()); var vars = prioHasIncreased ? new { RelevantRepositories = otherRepositories.OrderBy(r => r.Priority).ToList(), SkipCondition = new Func<RemoteRepository, bool>(r => r.Priority < _position), PriorityMutator = new Func<int, int>(i => i + 1) } : new { RelevantRepositories = otherRepositories.OrderByDescending(r => r.Priority).ToList(), SkipCondition = new Func<RemoteRepository, bool>(r => r.Priority > _position), PriorityMutator = new Func<int, int>(i => i - 1) }; if (!vars.RelevantRepositories.Any(r => r.Priority == _position)) return; var lastPriority = (int)_position; foreach (var repository in vars.RelevantRepositories.SkipWhile(vars.SkipCondition)) { if (repository.Priority == lastPriority) repository.Priority = (lastPriority = vars.PriorityMutator(lastPriority)); else break; } remote.Priority = _position.Value; }
public RemoteRepositoryMessage(ICommand sourceCommand, string name, RemoteRepository remoteRepository) { Name = name; RemoteRepository = remoteRepository; Source = sourceCommand; }