public void LoadFileMetadataChanges()
        {
            if (CurrentBuildVersionInfo.FileMetadataHash == LastBuildVersionInfo.FileMetadataHash)
            {
                return;
            }
            var changedGlobs = CurrentBuildVersionInfo.FileMetadata.GetChangedGlobs(LastBuildVersionInfo.FileMetadata).ToArray();

            if (changedGlobs.Length > 0)
            {
                var lastSrcFiles = from p in LastBuildVersionInfo.Attributes
                                   where p.Value.IsFromSource
                                   select p.Key;

                foreach (var key in lastSrcFiles)
                {
                    var path = RelativePath.GetPathWithoutWorkingFolderChar(key);
                    if (changedGlobs.Any(g => g.Match(path)))
                    {
                        if (_changeDict[key] == ChangeKindWithDependency.None)
                        {
                            _changeDict[key] = ChangeKindWithDependency.Updated;
                        }
                    }
                }
            }
        }
 private static List <HomepageInfo> GetHomepages(DocumentBuildContext context)
 {
     return((from s in context.GetTocInfo()
             where !string.IsNullOrEmpty(s.Homepage)
             select new HomepageInfo
     {
         Homepage = RelativePath.GetPathWithoutWorkingFolderChar(s.Homepage),
         TocPath = RelativePath.GetPathWithoutWorkingFolderChar(context.GetFilePath(s.TocFileKey))
     }).ToList());
 }
        private void UpdateHref(HtmlNode link, string attribute, IDocumentBuildContext context, string sourceFilePath, string destFilePath)
        {
            var originalHref = link.GetAttributeValue(attribute, null);
            var anchor       = link.GetAttributeValue("anchor", null);

            link.Attributes.Remove("anchor");
            var originalPath = UriUtility.GetPath(originalHref);
            var path         = RelativePath.TryParse(originalPath);

            if (path == null)
            {
                if (!string.IsNullOrEmpty(anchor))
                {
                    link.SetAttributeValue(attribute, originalHref + anchor);
                }

                return;
            }

            var fli = new FileLinkInfo
            {
                FromFileInSource = sourceFilePath,
                FromFileInDest   = destFilePath,
            };

            if (path.IsFromWorkingFolder())
            {
                var targetInSource = path.UrlDecode();
                fli.ToFileInSource   = targetInSource.RemoveWorkingFolder();
                fli.ToFileInDest     = RelativePath.GetPathWithoutWorkingFolderChar(context.GetFilePath(targetInSource));
                fli.FileLinkInSource = targetInSource - (RelativePath)sourceFilePath;
                if (fli.ToFileInDest != null)
                {
                    var resolved = (RelativePath)fli.ToFileInDest - (RelativePath)destFilePath;
                    fli.FileLinkInDest = resolved;
                    fli.Href           = resolved.UrlEncode();
                }
                else
                {
                    fli.Href = (targetInSource.RemoveWorkingFolder() - ((RelativePath)sourceFilePath).RemoveWorkingFolder()).UrlEncode();
                }
            }
            else
            {
                fli.FileLinkInSource = path.UrlDecode();
                fli.ToFileInSource   = ((RelativePath)sourceFilePath + path).RemoveWorkingFolder();
                fli.FileLinkInDest   = fli.FileLinkInSource;
                fli.Href             = originalPath;
            }
            var href = _settings.HrefGenerator?.GenerateHref(fli) ?? fli.Href;

            link.SetAttributeValue(attribute, href + UriUtility.GetQueryString(originalHref) + (anchor ?? UriUtility.GetFragment(originalHref)));
        }
Exemple #4
0
        public void LoadFileMetadataChanges()
        {
            var changedGlobs = CurrentBuildVersionInfo.FileMetadata.GetChangedGlobs(LastBuildVersionInfo.FileMetadata).ToArray();

            foreach (var key in LastBuildVersionInfo.Attributes.Keys)
            {
                var path = RelativePath.GetPathWithoutWorkingFolderChar(key);
                if (changedGlobs.Any(g => g.Match(path)))
                {
                    if (_changeDict[key] == ChangeKindWithDependency.None)
                    {
                        _changeDict[key] = ChangeKindWithDependency.Updated;
                    }
                }
            }
        }
Exemple #5
0
        private static Manifest GenerateManifest(IDocumentBuildContext context, List <TemplateManifestItem> items)
        {
            var toc       = context.GetTocInfo();
            var homepages = toc
                            .Where(s => !string.IsNullOrEmpty(s.Homepage))
                            .Select(s => new HomepageInfo
            {
                Homepage = RelativePath.GetPathWithoutWorkingFolderChar(s.Homepage),
                TocPath  = RelativePath.GetPathWithoutWorkingFolderChar(context.GetFilePath(s.TocFileKey))
            }).ToList();

            return(new Manifest
            {
                Homepages = homepages,
                Files = items,
            });
        }
        private FileModel GenerateNewFileModel(FileModel model, RestApiRootItemViewModel tagModel)
        {
            var originalFile  = model.FileAndType.File;
            var fileExtension = Path.GetExtension(originalFile);

            // When handling tags in petstore.swagger.json, the tag file path should be petstore/tag.json, to prevent tag name conflict
            var originalFileName = Path.GetFileName(originalFile);
            var subDirectory     = originalFileName.Remove(originalFileName.IndexOf('.'));
            var directory        = Path.GetDirectoryName(originalFile);
            var filePath         = Path.Combine(directory, subDirectory, tagModel.Name + fileExtension).ToNormalizedPath();

            var newFileAndType = new FileAndType(model.FileAndType.BaseDir, filePath, model.FileAndType.Type, model.FileAndType.SourceDir, model.FileAndType.DestinationDir);
            var newKey         = "~/" + RelativePath.GetPathWithoutWorkingFolderChar(filePath);
            var newModel       = new FileModel(newFileAndType, tagModel, model.OriginalFileAndType, model.Serializer, newKey)
            {
                LocalPathFromRoot = model.LocalPathFromRoot,
                Uids = CalculateUids(tagModel).Select(i => new UidDefinition(i, model.LocalPathFromRoot)).ToImmutableArray()
            };

            return(newModel);
        }
        private FileModel GenerateNewFileModel(FileModel model, PageViewModel newPage, string fileNameWithoutExtension, Dictionary <string, int> existingFileNames)
        {
            var initialFile = model.FileAndType.File;
            var extension   = Path.GetExtension(initialFile);
            var directory   = Path.GetDirectoryName(initialFile);

            // encode file name to clean url so that without server hosting, href can work with file:/// navigation
            var cleanUrlFileName = fileNameWithoutExtension.ToCleanUrlFileName();
            var actualFileName   = GetUniqueFileNameWithSuffix(cleanUrlFileName, existingFileNames);
            var newFileName      = actualFileName + extension;
            var filePath         = Path.Combine(directory, newFileName).ToNormalizedPath();

            var newFileAndType = new FileAndType(model.FileAndType.BaseDir, filePath, model.FileAndType.Type, model.FileAndType.SourceDir, model.FileAndType.DestinationDir);
            var keyForModel    = "~/" + RelativePath.GetPathWithoutWorkingFolderChar(filePath);

            return(new FileModel(newFileAndType, newPage, model.OriginalFileAndType, model.Serializer, keyForModel)
            {
                LocalPathFromRoot = model.LocalPathFromRoot,
                Uids = CalculateUids(newPage, model.LocalPathFromRoot)
            });
        }
Exemple #8
0
        private FileModel GenerateNewFileModel(FileModel model, RestApiRootItemViewModel operationModel)
        {
            var originalFile  = model.FileAndType.File;
            var fileExtension = Path.GetExtension(originalFile);

            // When split into operation for petstore.swagger.json, the operation file path should be petstore/{operationName}.json, to prevent operation name confliction
            var originalFileName = Path.GetFileName(originalFile);
            var subDirectory     = originalFileName.Remove(originalFileName.IndexOf('.'));
            var directory        = Path.GetDirectoryName(originalFile);
            var filePath         = Path.Combine(directory, subDirectory, operationModel.Name + fileExtension).ToNormalizedPath();

            var newFileAndType = new FileAndType(model.FileAndType.BaseDir, filePath, model.FileAndType.Type, model.FileAndType.SourceDir, model.FileAndType.DestinationDir);
            var newKey         = "~/" + RelativePath.GetPathWithoutWorkingFolderChar(filePath);
            var newModel       = new FileModel(newFileAndType, operationModel, model.OriginalFileAndType, model.Serializer, newKey)
            {
                LocalPathFromRoot = model.LocalPathFromRoot,
                Uids = new[] { new UidDefinition(operationModel.Uid, model.LocalPathFromRoot) }.ToImmutableArray()
            };

            return(newModel);
        }