public IEnumerable <RepositoryInformation> GetRepositoryInformation(string queryString) { if (_repositoryNames != null) { return(_repositoryNames); //for now, there's no way to get an updated list except by making a new client } const string genericUrl = "scheme://path?"; var finalUrl = string.IsNullOrEmpty(queryString) ? queryString : genericUrl + queryString; var binding = new NetTcpBinding { Security = { Mode = SecurityMode.None } }; var factory = new ChannelFactory <IChorusHubService>(binding, _chorusHubServerInfo.ServiceUri); var channel = factory.CreateChannel(); try { var jsonStrings = channel.GetRepositoryInformation(finalUrl); _repositoryNames = ImitationHubJSONService.ParseJsonStringsToChorusHubRepoInfos(jsonStrings); } finally { var comChannel = (ICommunicationObject)channel; if (comChannel.State != CommunicationState.Faulted) { comChannel.Close(); } } return(_repositoryNames); }
/// <summary> /// /// </summary> /// <param name="name"></param> /// <param name="id"></param> /// <returns>true if client should wait for hg to notice</returns> public bool PrepareToReceiveRepository(string name, string id) { if (!string.IsNullOrEmpty(id)) { var jsonStrings = GetRepositoryInformation(string.Empty); var hubInfo = ImitationHubJSONService.ParseJsonStringsToChorusHubRepoInfos(jsonStrings); if (hubInfo.Any(info => info.RepoID == id)) { return(false); } } // since the repository doesn't exist, create it var directory = Path.Combine(ChorusHubOptions.RootDirectory, name); var uniqueDir = DirectoryUtilities.GetUniqueFolderPath(directory); //EventLog.WriteEntry("Application", string.Format("PrepareToReceiveRepository() is preparing a place for '{0}'.", name), EventLogEntryType.Information); if (uniqueDir != directory) { //EventLog.WriteEntry("Application", string.Format("{0} already exists! Creating repository for {1} at {2}.", directory, name, uniqueDir), EventLogEntryType.Warning); } Directory.CreateDirectory(uniqueDir); HgRepository.CreateRepositoryInExistingDir(uniqueDir, new ConsoleProgress()); return(true); }
/// <summary> /// Returns information about the Hg repositories that the ChorusHub knows about. /// /// Similar to GetRepositoryInformation except the value of the id field is the id /// of the tip revision of the repository. /// /// For the returned tip to be accurate, clients using this method have to call /// PutFile(IChorusHubService.tipIdFolder, projectName, tipId) after doing a push. /// </summary> public string GetRepositoryInformationWithTipIds(string searchUrl) { List <RepositoryInformation> results = new List <RepositoryInformation>(); foreach (RepositoryInformation repoInfo in ImitationHubJSONService.ParseJsonStringsToChorusHubRepoInfos(GetRepositoryInformation(searchUrl, false))) { string tipId = GetFileAsText(TipIdFolder, repoInfo.RepoName); if (tipId == null) { tipId = GetTipId(repoInfo.RepoName); PutFileFromText(TipIdFolder, repoInfo.RepoName, tipId); } results.Add(new RepositoryInformation(repoInfo.RepoName, tipId)); } return(string.Join("/", results.Select(r => ImitationHubJSONService.MakeJsonString(r.RepoName, r.RepoID)))); }