From f4418920fb67e75bb666630e19d698a36424ccda Mon Sep 17 00:00:00 2001
From: Simon Howe <footless@gmail.com>
Date: Fri, 11 Feb 2022 17:58:45 +0100
Subject: [PATCH] Adds support for dot-prefixed paths in git

- in `flux bootstrap` and `flux create kustomization` etc.
- E.g. for example `--path=.flux` should work now
- Previous behaviour is to strip off any leading "." and leave you with
  "./flux" in the kustomizations / folder structure generated by `flux
  bootstrap`

Signed-off-by: Simon Howe <footless@gmail.com>
---
 internal/flags/safe_relative_path.go      | 5 ++++-
 internal/flags/safe_relative_path_test.go | 4 ++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/internal/flags/safe_relative_path.go b/internal/flags/safe_relative_path.go
index 4a5f78df..dfd3b9ea 100644
--- a/internal/flags/safe_relative_path.go
+++ b/internal/flags/safe_relative_path.go
@@ -41,7 +41,10 @@ func (p *SafeRelativePath) Set(str string) error {
 		return fmt.Errorf("invalid relative path '%s': %w", cleanP, err)
 	}
 	// NB: required, as a secure join of "./" will result in "."
-	cleanP = fmt.Sprintf("./%s", strings.TrimPrefix(cleanP, "."))
+	if cleanP == "." {
+		cleanP = ""
+	}
+	cleanP = fmt.Sprintf("./%s", cleanP)
 	*p = SafeRelativePath(cleanP)
 	return nil
 }
diff --git a/internal/flags/safe_relative_path_test.go b/internal/flags/safe_relative_path_test.go
index 325bd658..5c74ca28 100644
--- a/internal/flags/safe_relative_path_test.go
+++ b/internal/flags/safe_relative_path_test.go
@@ -37,6 +37,10 @@ func TestRelativePath_Set(t *testing.T) {
 		{"traversing absolute path", "/foo/../bar", "./bar", false},
 		{"traversing overflowing absolute path", "/foo/../../../bar", "./bar", false},
 		{"empty", "", "./", false},
+		{"relative empty path", "./", "./", false},
+		{"double relative empty path", "././", "./", false},
+		{"dot path", ".foo", "./.foo", false},
+		{"relative dot path", "./.foo", "./.foo", false},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-- 
GitLab