private async Task PackOneReferenceAsync(string file) { var currentPackage = Path.ChangeExtension(Path.GetFileName(file), "rpk"); lock (_currentPackages) { _currentPackages[Array.IndexOf(_currentPackages, null)] = currentPackage; } using (var writer = ExternalReferencePackageWriter.Append(Path.Combine(_packageDirectory, currentPackage), new Uri("https://msdn.microsoft.com/"))) { await GetItems(file).ForEachAsync(pair => { lock (writer) { writer.AddOrUpdateEntry(pair.EntryName + ".yml", pair.ViewModel); _entryCount++; _apiCount += pair.ViewModel.Count; } }); } lock (_currentPackages) { _currentPackages[Array.IndexOf(_currentPackages, currentPackage)] = null; } }
public static void AddFiles(ExternalReferencePackageWriter writer, Uri baseUri, string urlPattern, string relativePath, IEnumerable <string> docPaths) { var uri = string.IsNullOrEmpty(relativePath) ? baseUri : new Uri(baseUri, relativePath); foreach (var item in from doc in docPaths let vm = LoadViewModelNoThrow(doc) where vm != null let extRef = ToExternalReferenceViewModel(vm.Item2, uri, urlPattern).ToList() select new { EntryName = vm.Item1, Refs = extRef }) { writer.AddOrUpdateEntry(item.EntryName, item.Refs); } }
public ParseResult Exec(RunningContext context) { var outputFile = Path.Combine(_options.OutputFolder ?? Environment.CurrentDirectory, _options.Name ?? "externalreference.rpk"); try { var baseUri = new Uri(_options.BaseUrl); if (!baseUri.IsAbsoluteUri) { return(new ParseResult(ResultLevel.Error, "BaseUrl should be absolute url.")); } var source = _options.Source.TrimEnd('/', '\\'); using (var package = _options.AppendMode ? ExternalReferencePackageWriter.Append(outputFile, baseUri) : ExternalReferencePackageWriter.Create(outputFile, baseUri)) { var files = FileGlob.GetFiles(source, new string[] { _options.Glob }, null).ToList(); if (_options.FlatMode) { package.AddFiles(string.Empty, files); } else { foreach (var g in from f in files group f by Path.GetDirectoryName(f) into g select new { Folder = g.Key.Substring(source.Length).Replace('\\', '/').Trim('/'), Files = g.ToList(), }) { if (g.Folder.Length == 0) { package.AddFiles(string.Empty, g.Files); } else { package.AddFiles(g.Folder + "/", g.Files); } } } } return(ParseResult.SuccessResult); } catch (Exception ex) { return(new ParseResult(ResultLevel.Error, ex.ToString())); } }
public ParseResult Exec(RunningContext context) { if (_helpMessage != null) { Console.WriteLine(_helpMessage); return(ParseResult.SuccessResult); } var extractMetadataResult = _metadataCommand.Exec(context); Logger.Log(extractMetadataResult); if (extractMetadataResult.ResultLevel == ResultLevel.Error) { return(extractMetadataResult); } // 2. convert. var inputModels = _metadataCommand.InputModels; var outputFile = Path.Combine(_options.OutputFolder ?? Environment.CurrentDirectory, _options.Name ?? "externalreference.rpk"); if (string.IsNullOrWhiteSpace(_options.BaseUrl)) { return(new ParseResult(ResultLevel.Error, "BaseUrl cannot be empty.")); } try { var baseUri = new Uri(_options.BaseUrl); if (!baseUri.IsAbsoluteUri) { return(new ParseResult(ResultLevel.Error, "BaseUrl should be absolute url.")); } using (var package = _options.AppendMode ? ExternalReferencePackageWriter.Append(outputFile, baseUri) : ExternalReferencePackageWriter.Create(outputFile, baseUri)) { package.AddProjects(inputModels.SelectMany(s => s.Items).Select(s => s.Key).ToList()); } return(ParseResult.SuccessResult); } catch (Exception ex) { return(new ParseResult(ResultLevel.Error, ex.ToString())); } }
public void Exec(SubCommandRunningContext context) { var outputFile = Path.Combine(_options.OutputFolder ?? Environment.CurrentDirectory, _options.Name ?? "externalreference.rpk"); var baseUri = new Uri(_options.BaseUrl); if (!baseUri.IsAbsoluteUri) { throw new InvalidOptionException("BaseUrl should be absolute url.", "BaseUrl"); } var source = _options.Source.TrimEnd('/', '\\'); using (var package = _options.AppendMode ? ExternalReferencePackageWriter.Append(outputFile, baseUri) : ExternalReferencePackageWriter.Create(outputFile, baseUri)) { var files = FileGlob.GetFiles(source, new string[] { _options.Glob }, null).ToList(); if (_options.FlatMode) { ExternalReferencePackageHelper.AddFiles(package, baseUri, _options.UrlPattern, string.Empty, files); } else { foreach (var g in from f in files group f by Path.GetDirectoryName(f) into g select new { Folder = g.Key.Substring(source.Length).Replace('\\', '/').Trim('/'), Files = g.ToList(), }) { if (g.Folder.Length == 0) { ExternalReferencePackageHelper.AddFiles(package, baseUri, _options.UrlPattern, string.Empty, g.Files); } else { ExternalReferencePackageHelper.AddFiles(package, baseUri, _options.UrlPattern, g.Folder + "/", g.Files); } } } } }
public void AddProjects(ExternalReferencePackageWriter writer, IReadOnlyList <string> projectPaths) { if (projectPaths == null) { throw new ArgumentNullException(nameof(projectPaths)); } if (projectPaths.Count == 0) { throw new ArgumentException("Empty collection is not allowed.", nameof(projectPaths)); } for (int i = 0; i < projectPaths.Count; i++) { var name = Path.GetFileName(projectPaths[i]); ExternalReferencePackageHelper.AddFiles( writer, new Uri(_options.BaseUrl), _options.UrlPattern, string.Empty, Directory.GetFiles(Path.Combine(projectPaths[i], "api"), "*.yml", SearchOption.TopDirectoryOnly)); } }
public void Exec(SubCommandRunningContext context) { _metadataCommand.Exec(context); // 2. convert. var inputModels = _metadataCommand.InputModels; var outputFile = Path.Combine(_options.OutputFolder ?? Environment.CurrentDirectory, _options.Name ?? "externalreference.rpk"); if (string.IsNullOrWhiteSpace(_options.BaseUrl)) { throw new InvalidOptionException("BaseUrl cannot be empty.", "BaseUrl"); } var baseUri = new Uri(_options.BaseUrl); if (!baseUri.IsAbsoluteUri) { throw new InvalidOptionException("BaseUrl should be absolute url.", "BaseUrl"); } using (var package = _options.AppendMode ? ExternalReferencePackageWriter.Append(outputFile, baseUri) : ExternalReferencePackageWriter.Create(outputFile, baseUri)) { package.AddProjects(inputModels.SelectMany(s => s.Items).Select(s => s.Key).ToList()); } }