From 34ea4c973030996f04f48a4dcef8a9b961a8a68e Mon Sep 17 00:00:00 2001 From: Ryota Date: Tue, 28 Sep 2021 14:22:25 +0100 Subject: [PATCH] Add generated notice at the top of generated file (#55) * Add generated notice at the top of generated file * Reword variable name --- internal/file/write.go | 45 +++++++++++++++++++++++++++++--- testdata/other/demo-generated.md | 9 +++++++ 2 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 testdata/other/demo-generated.md diff --git a/internal/file/write.go b/internal/file/write.go index c7cadcd..8ba3e7a 100644 --- a/internal/file/write.go +++ b/internal/file/write.go @@ -1,15 +1,52 @@ package file -import "os" +import ( + "fmt" + "os" + "path/filepath" +) // WriteAfterTo writes the processed content to the provided filepath. -func (f *File) WriteAfterTo(filepath string) error { - file, err := os.OpenFile(filepath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) +func (f *File) WriteAfterTo(targetFilePath string) error { + file, err := os.OpenFile(targetFilePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) if err != nil { return err } defer file.Close() - _, err = file.Write(f.ContentAfter) + content := []byte{} + content = append(content, f.prepareGeneratedHeader(targetFilePath)...) + content = append(content, f.ContentAfter...) + + _, err = file.Write(content) return err } + +func (f *File) prepareGeneratedHeader(targetFilePath string) []byte { + fileType := filepath.Ext(f.FileName) + + comment := `# == %s ==` + switch fileType { + case ".md": + comment = `` + case ".yaml", ".yml": + comment = `# == %s ==` + default: + } + + // Compare directories of each file, rather than file itself, so that we + // don't end up with an extra "../". + relDir, err := filepath.Rel(filepath.Dir(targetFilePath), filepath.Dir(f.FileName)) + if err != nil { + // This shouldn't happen, but when it does, simply ignore and return an + // empty slice. + return nil + } + + baseFile := fmt.Sprintf("%s/%s", relDir, filepath.Base(f.FileName)) + note := fmt.Sprintf(`improter-generated-from: %s`, baseFile) + + x := fmt.Sprintf(comment+"\n", note) + + return []byte(x) +} diff --git a/testdata/other/demo-generated.md b/testdata/other/demo-generated.md new file mode 100644 index 0000000..0fc691a --- /dev/null +++ b/testdata/other/demo-generated.md @@ -0,0 +1,9 @@ + +# Markdown Demo + + +This demonstrates how a markdown can import other file content. + +Importer is a CLI tool to read and process Importer and Exporter markers. +This can be easily integrated into CI/CD and automation setup. +