From 1168ef6073f17eeeff1608ba06fb99d157a1ff34 Mon Sep 17 00:00:00 2001 From: Bartlomiej Plotka Date: Wed, 19 May 2021 21:33:55 +0200 Subject: [PATCH] Added support for modifying links in image URLs. Fixed linking when adding extra files from outside. Signed-off-by: Bartlomiej Plotka --- main.go | 1 - pkg/mdformatter/testdata/formatted.md | 2 + .../testdata/formatted_and_transformed.md | 2 + pkg/mdformatter/testdata/not_formatted.md | 2 + .../testdata/not_formatted.md.diff | 16 +-- pkg/mdformatter/transformer.go | 9 ++ pkg/transform/config.go | 15 ++- pkg/transform/testdata/mdox1.yaml | 2 +- pkg/transform/testdata/mdox2.yaml | 10 +- pkg/transform/testdata/test.md | 11 ++ .../testdata/testproj/Proposals/README.md | 4 +- .../testproj/{README2.md => README.md} | 4 +- .../testdata/testproj/images/logo2.png | Bin 0 -> 80338 bytes pkg/transform/transform.go | 102 +++++++++++------- 14 files changed, 121 insertions(+), 59 deletions(-) create mode 100644 pkg/transform/testdata/test.md rename pkg/transform/testdata/testproj/{README2.md => README.md} (63%) create mode 100644 pkg/transform/testdata/testproj/images/logo2.png diff --git a/main.go b/main.go index f5b67d2..3766e97 100644 --- a/main.go +++ b/main.go @@ -133,7 +133,6 @@ This directive runs executable with arguments and put its stderr and stdout outp if !*disableGenCodeBlocksDirectives { opts = append(opts, mdformatter.WithCodeBlockTransformer(mdgen.NewCodeBlockTransformer())) } - if len(*files) == 0 { return errors.New("no files to format") } diff --git a/pkg/mdformatter/testdata/formatted.md b/pkg/mdformatter/testdata/formatted.md index 4656fe8..29303af 100644 --- a/pkg/mdformatter/testdata/formatted.md +++ b/pkg/mdformatter/testdata/formatted.md @@ -51,6 +51,8 @@ See those components on this diagram: architecture overview +![img](img/arch.jpg) + ### [Sidecar](components/sidecar.md) Thanos integrates with existing Prometheus servers through a [Sidecar process](https://docs.microsoft.com/en-us/azure/architecture/patterns/sidecar#solution), which runs on the same machine or in the same pod as the Prometheus server. diff --git a/pkg/mdformatter/testdata/formatted_and_transformed.md b/pkg/mdformatter/testdata/formatted_and_transformed.md index b7f3c60..e9d2263 100644 --- a/pkg/mdformatter/testdata/formatted_and_transformed.md +++ b/pkg/mdformatter/testdata/formatted_and_transformed.md @@ -51,6 +51,8 @@ See those components on this diagram: architecture overview +![img]($$-img/arch.jpg-testdata/not_formatted.md-$$) + ### [Sidecar]($$-components/sidecar.md-testdata/not_formatted.md-$$) Thanos integrates with existing Prometheus servers through a [Sidecar process]($$-https://docs.microsoft.com/en-us/azure/architecture/patterns/sidecar#solution-testdata/not_formatted.md-$$), which runs on the same machine or in the same pod as the Prometheus server. diff --git a/pkg/mdformatter/testdata/not_formatted.md b/pkg/mdformatter/testdata/not_formatted.md index 860ecac..fb1bcfa 100644 --- a/pkg/mdformatter/testdata/not_formatted.md +++ b/pkg/mdformatter/testdata/not_formatted.md @@ -53,6 +53,8 @@ See those components on this diagram: architecture overview +![img](img/arch.jpg) + ### [Sidecar](components/sidecar.md) Thanos integrates with existing Prometheus servers through a [Sidecar process](https://docs.microsoft.com/en-us/azure/architecture/patterns/sidecar#solution), which runs on the same machine or in the same pod as the Prometheus server. diff --git a/pkg/mdformatter/testdata/not_formatted.md.diff b/pkg/mdformatter/testdata/not_formatted.md.diff index 295ce0c..7d5664b 100644 --- a/pkg/mdformatter/testdata/not_formatted.md.diff +++ b/pkg/mdformatter/testdata/not_formatted.md.diff @@ -37,7 +37,7 @@ Thanos bases itself on vanilla [Prometheus](https://prometheus.io/) (v2.2.1+). We plan to support *all* Prometheus version beyond this version. -@@ -77,4 +75,4 @@ +@@ -79,4 +77,4 @@ If you are not interested in backing up any data, the `--objstore.config-file` flag can simply be omitted. @@ -55,7 +55,7 @@ Let's extend the Sidecar in the previous section to connect to a Prometheus server, and expose the Store API. -@@ -96,4 +94,2 @@ +@@ -98,4 +96,2 @@ --grpc-address 0.0.0.0:19090 # GRPC endpoint for StoreAPI ``` @@ -71,7 +71,7 @@ #### External Labels -@@ -168,5 +164,3 @@ +@@ -170,5 +166,3 @@ Go to the configured HTTP address, and you should now be able to query across all Prometheus instances and receive de-duplicated data. @@ -90,7 +90,7 @@ ```bash thanos query \ -@@ -189,4 +183,2 @@ +@@ -191,4 +185,2 @@ Read more details [here](service-discovery.md). @@ -106,7 +106,7 @@ ```bash thanos store \ -@@ -207,1 +199,1 @@ +@@ -209,1 +201,1 @@ The store gateway occupies small amounts of disk space for caching basic information about data in the object storage. This will rarely exceed more than a few gigabytes and is used to improve restart times. It is useful but not required to preserve it across restarts. @@ -115,7 +115,7 @@ ### [Compactor](components/compact.md) -@@ -224,8 +216,4 @@ +@@ -226,8 +218,4 @@ The compactor is not in the critical path of querying or data backup. It can either be run as a periodic batch job or be left running to always compact data as soon as possible. It is recommended to provide 100-300GB of local disk space for data processing. @@ -140,7 +140,7 @@ ```$ usage: thanos rule [] -@@ -412,1 +400,0 @@ +@@ -414,1 +402,0 @@ The configuration format is the following: @@ -148,7 +148,7 @@ ```yaml alertmanagers: - http_config: -@@ -438,1 +425,4 @@ +@@ -440,1 +427,4 @@ timeout: 10s api_version: v1 ``` diff --git a/pkg/mdformatter/transformer.go b/pkg/mdformatter/transformer.go index 0831578..b1f4599 100644 --- a/pkg/mdformatter/transformer.go +++ b/pkg/mdformatter/transformer.go @@ -40,6 +40,7 @@ func (t *transformer) Render(w io.Writer, source []byte, node ast.Node) error { if err := ast.Walk(node, func(n ast.Node, entering bool) (ast.WalkStatus, error) { var err error switch typedNode := n.(type) { + // TODO(bwplotka): Add support for links inside HTML. case *ast.Link: if !entering || t.link == nil { return ast.WalkSkipChildren, nil @@ -62,6 +63,14 @@ func (t *transformer) Render(w io.Writer, source []byte, node ast.Node) error { repl := ast.NewString(dest) repl.SetParent(n) n.Parent().ReplaceChild(n.Parent(), n, repl) + case *ast.Image: + if !entering || t.link == nil { + return ast.WalkSkipChildren, nil + } + typedNode.Destination, err = t.link.TransformDestination(t.sourceCtx, typedNode.Destination) + if err != nil { + return ast.WalkStop, err + } case *ast.FencedCodeBlock: if !entering || t.cb == nil || typedNode.Info == nil { return ast.WalkSkipChildren, nil diff --git a/pkg/transform/config.go b/pkg/transform/config.go index 551ea4a..522fcc6 100644 --- a/pkg/transform/config.go +++ b/pkg/transform/config.go @@ -31,12 +31,12 @@ const ( type Config struct { Version int - // InputDir is a relative path that assumes input directory for markdown files and assets. + // InputDir is a relative (to PWD) path that assumes input directory for markdown files and assets. InputDir string `yaml:"inputDir"` - // OutputDir is a relative output directory that we expect all files to land in. Typically that can be `content` dir + // OutputDir is a relative (to PWD) output directory that we expect all files to land in. Typically that can be `content` dir // which hugo uses as an input. OutputDir string `yaml:"outputDir"` - // OutputStaticDir is relative output directory for all non markdown files. + // OutputStaticDir is relative (to PWD) output directory for all non markdown files. OutputStaticDir string `yaml:"outputStaticDir"` // ExtraInputGlobs allows to bring files from outside of input dir. @@ -57,11 +57,18 @@ type TransformationConfig struct { _glob glob.Glob // Glob matches files using https://github.com/gobwas/glob. + // Glob is matched against the relative path of the file in the input directory in + // relation to the input directory. For example: + // InputDir: dir1, File found in dir1/a/b/c/file.md, the given glob will be matched + // against a/b/c/file.md. // After first match, file is no longer matching other elements. Glob string // Path is an optional different path for the file to be moved. - // NOTE: All relative links will be moved accordingly. + // If not specified, file will be moved to the exact same position as in input directory. + // Use absolute path to point the absolute structure where `/` means output directory. + // If relative path is used, it will start in the directory the file is in the input directory. + // NOTE: All relative links will be moved accordingly inside such file. Path string // FrontMatter holds front matter transformations. diff --git a/pkg/transform/testdata/mdox1.yaml b/pkg/transform/testdata/mdox1.yaml index 201fd26..e66e399 100644 --- a/pkg/transform/testdata/mdox1.yaml +++ b/pkg/transform/testdata/mdox1.yaml @@ -7,7 +7,7 @@ outputStaticDir: "testdata/tmp/1static" gitIgnored: true transformations: - - glob: "/README.md" + - glob: "README.md" path: _index.md frontMatter: template: | diff --git a/pkg/transform/testdata/mdox2.yaml b/pkg/transform/testdata/mdox2.yaml index 264b8f3..48b1132 100644 --- a/pkg/transform/testdata/mdox2.yaml +++ b/pkg/transform/testdata/mdox2.yaml @@ -3,14 +3,14 @@ version: 1 inputDir: "testdata/testproj" outputDir: "testdata/tmp/2" extraInputGlobs: - - "../../README.md" + - "testdata/test.md" gitIgnored: true localLinksStyle: hugo transformations: - - glob: "/../../../../README.md" - path: _index.md + - glob: "../test.md" + path: /_index.md frontMatter: template: | title: "{{ .Origin.FirstHeader }}" @@ -20,13 +20,13 @@ transformations: _target: path: "/**" - - glob: "/doc.md" + - glob: "doc.md" frontMatter: template: | title: "{{ .Origin.FirstHeader }}" slug: "{{ .Target.FileName }}" - - glob: "/Team/doc.md" + - glob: "Team/doc.md" path: inner/doc.md frontMatter: template: | diff --git a/pkg/transform/testdata/test.md b/pkg/transform/testdata/test.md new file mode 100644 index 0000000..a8a5160 --- /dev/null +++ b/pkg/transform/testdata/test.md @@ -0,0 +1,11 @@ +# Test + +Yolo + +[RelLink](testproj/Proposals/README.md) + +[RelLink](testproj/Team/doc.md) + +![Image](testproj/logo.png) + +![Image](testproj/images/logo2.png) \ No newline at end of file diff --git a/pkg/transform/testdata/testproj/Proposals/README.md b/pkg/transform/testdata/testproj/Proposals/README.md index c68c4da..f0987bf 100644 --- a/pkg/transform/testdata/testproj/Proposals/README.md +++ b/pkg/transform/testdata/testproj/Proposals/README.md @@ -2,4 +2,6 @@ [RelLink](../README.md) -[RelLink](../Team/doc.md) \ No newline at end of file +[RelLink](../Team/doc.md) + +This should not work: [RelLink](../../test.md) \ No newline at end of file diff --git a/pkg/transform/testdata/testproj/README2.md b/pkg/transform/testdata/testproj/README.md similarity index 63% rename from pkg/transform/testdata/testproj/README2.md rename to pkg/transform/testdata/testproj/README.md index 829659b..c720344 100644 --- a/pkg/transform/testdata/testproj/README2.md +++ b/pkg/transform/testdata/testproj/README.md @@ -6,4 +6,6 @@ Yolo [RelLink](Team/doc.md) -![Image](logo.png) \ No newline at end of file +![Image](logo.png) + +![Image](images/logo2.png) \ No newline at end of file diff --git a/pkg/transform/testdata/testproj/images/logo2.png b/pkg/transform/testdata/testproj/images/logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..77b2562b47f6c6de732114b1f9c11afdb7faf845 GIT binary patch literal 80338 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 z

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 literal 0 HcmV?d00001 diff --git a/pkg/transform/transform.go b/pkg/transform/transform.go index 0c90693..89295cc 100644 --- a/pkg/transform/transform.go +++ b/pkg/transform/transform.go @@ -61,9 +61,11 @@ func Dir(ctx context.Context, logger log.Logger, configFile string) error { logger: logger, linkTransformer: &relLinkTransformer{ - localLinksStyle: c.LocalLinksStyle, - outputDir: c.OutputDir, - newAbsRelPathByOldAbsRelPath: map[string]string{}, + localLinksStyle: c.LocalLinksStyle, + inputDir: c.InputDir, + outputDir: c.OutputDir, + oldRelPath: map[string]string{}, + newAbsRelPath: map[string]string{}, }, } @@ -107,28 +109,28 @@ func (t *transformer) transformFile(path string, info os.FileInfo, err error) er return nil } - // absRelPath is an absolute path, but relatively to input dir (has `/` upfront). - absRelPath, err := filepath.Rel(t.c.InputDir, path) + // All relative paths are in relation to either input or output dirs. + relPath, err := filepath.Rel(t.c.InputDir, path) if err != nil { return errors.Wrap(err, "rel path to input dir") } - absRelPath = "/" + absRelPath if filepath.Ext(path) != ".md" { out := t.c.OutputStaticDir if out == "" { out = t.c.OutputDir } - level.Debug(t.logger).Log("msg", "copying static file", "in", path, "target", filepath.Join(out, absRelPath)) - return copyFiles(path, filepath.Join(out, absRelPath)) + level.Debug(t.logger).Log("msg", "copying static file", "in", path, "target", filepath.Join(out, relPath)) + return copyFiles(path, filepath.Join(out, relPath)) } // Copy while preserving structure and tolerating custom mapping. - target := filepath.Join(t.c.OutputDir, absRelPath) - tr, ok := firstMatch(absRelPath, t.c.Transformations) + target := filepath.Join(t.c.OutputDir, relPath) + + tr, ok := firstMatch(relPath, t.c.Transformations) if !ok { t.filesToLinkAdjust = append(t.filesToLinkAdjust, target) - level.Debug(t.logger).Log("msg", "copying without transformation", "in", path, "absRelPath", absRelPath, "target", target) + level.Debug(t.logger).Log("msg", "copying without transformation", "in", path, "absRelPath", relPath, "target", target) return copyFiles(path, target) } @@ -137,13 +139,14 @@ func (t *transformer) transformFile(path string, info os.FileInfo, err error) er }() var opts []mdformatter.Option - newAbsRelPath := newTargetAbsRelPath(absRelPath, tr) - if newAbsRelPath != absRelPath { - t.linkTransformer.newAbsRelPathByOldAbsRelPath[absRelPath] = newAbsRelPath + newAbsRelPath := newTargetAbsRelPath(relPath, tr) + if newAbsRelPath != "/"+relPath { + t.linkTransformer.oldRelPath[newAbsRelPath] = relPath + t.linkTransformer.newAbsRelPath[relPath] = newAbsRelPath } target = filepath.Join(t.c.OutputDir, newAbsRelPath) - level.Debug(t.logger).Log("msg", "copying with transformation", "in", path, "absRelPath", absRelPath, "target", target) + level.Debug(t.logger).Log("msg", "copying with transformation", "in", path, "absRelPath", relPath, "target", target) if err := copyFiles(path, target); err != nil { return err } @@ -178,18 +181,21 @@ func (t *transformer) transformFile(path string, info os.FileInfo, err error) er type relLinkTransformer struct { localLinksStyle LinksStyle - outputDir string - newAbsRelPathByOldAbsRelPath map[string]string + inputDir string + outputDir string + oldRelPath map[string]string + newAbsRelPath map[string]string } func (r *relLinkTransformer) TransformDestination(ctx mdformatter.SourceContext, destination []byte) ([]byte, error) { split := strings.Split(string(destination), "#") dest := split[0] + if strings.Contains(dest, "://") || filepath.IsAbs(dest) || strings.HasPrefix(string(destination), "#") { return destination, nil } - // TODO(bwplotka): Check if links are outside? + // absRelPath is an absolute path, but relatively to output dir (has `/` upfront). currentAbsRelPath := strings.TrimPrefix(ctx.Filepath, r.outputDir) if filepath.Join(currentAbsRelPath, dest) == ctx.Filepath { // Pointing to self. @@ -202,36 +208,56 @@ func (r *relLinkTransformer) TransformDestination(ctx mdformatter.SourceContext, currentAbsRelDir := filepath.Dir(currentAbsRelPath) - // Do we changed? - change := "" - for n, old := range r.newAbsRelPathByOldAbsRelPath { - if old != currentAbsRelPath { - continue - } - c, err := filepath.Rel(filepath.Dir(old), filepath.Dir(n)) + // Do we changed. Try to navigate from current, transformed path into what was before. + oldRelDir := currentAbsRelDir + if old, ok := r.oldRelPath[currentAbsRelPath]; ok { + // Remove absoluteness for proper relation check. + currRelPath := strings.TrimPrefix(currentAbsRelPath, "/") + change, err := filepath.Rel(filepath.Dir(old), filepath.Dir(currRelPath)) if err != nil { - return nil, err + // Possible error: old path is before currRelPath. This can happen if the input file was grabbed from outside. + // Try otherwise. + change, err = filepath.Rel(filepath.Dir(currRelPath), filepath.Join(filepath.Dir(old))) + if err != nil { + return nil, err + } + oldRelDir = filepath.Join(change, currentAbsRelDir) + } else { + oldRelDir = filepath.Join(currentAbsRelDir, change) } - change = c - break + } + oldRelDestination := filepath.Join(oldRelDir, dest) + + // Evaluate this path to make sure we cover case when we go outside of our "absolute" root which is output dir. + absOldDest, err := filepath.Abs(filepath.Join(r.inputDir, oldRelDestination)) + if err != nil { + return nil, err } - adjustedAbsRelDir := filepath.Join(currentAbsRelDir, change) - adjustedAbsRelDest := filepath.Join(adjustedAbsRelDir, dest) + wd, err := os.Getwd() + if err != nil { + return nil, err + } + oldRelDestination, err = filepath.Rel(filepath.Join(wd, r.inputDir), absOldDest) + if err != nil { + return nil, err + } + + oldAbsDestination := "/" + oldRelDestination // Does the link points to something that changed? - if absNewRelPath, ok := r.newAbsRelPathByOldAbsRelPath[adjustedAbsRelDest]; ok { - adjustedAbsRelDest = absNewRelPath + if absNewRelPath, ok := r.newAbsRelPath[oldRelDestination]; ok { + oldAbsDestination = absNewRelPath } - newDest, err := filepath.Rel(currentAbsRelDir, adjustedAbsRelDest) + newDest, err := filepath.Rel(currentAbsRelDir, oldAbsDestination) if err != nil { - return nil, err + return nil, errors.Wrap(err, "relation between new and old file path") } if newDest == "." { newDest = "" - } else if r.localLinksStyle == Hugo { + } else if r.localLinksStyle == Hugo && filepath.Ext(dest) == ".md" { // Because all links are normally files, in Hugo those are literally URL paths (kind of "dirs"). // This is why we need to add ../ to them. newDest = filepath.Join("..", newDest) + "/" @@ -306,16 +332,16 @@ func firstMatch(absRelPath string, trs []*TransformationConfig) (*Transformation return nil, false } -func newTargetAbsRelPath(absRelPath string, tr *TransformationConfig) string { +func newTargetAbsRelPath(relPath string, tr *TransformationConfig) string { if tr.Path == "" { - return absRelPath + return "/" + relPath } if filepath.IsAbs(tr.Path) { return tr.Path } - return filepath.Join(filepath.Dir(absRelPath), tr.Path) + return "/" + filepath.Join(filepath.Dir(relPath), tr.Path) } func copyFiles(src, dst string) (err error) {