исправлены находки ревью проектной стороны
- манифест читается так, как записан: решётка внутри строки не открывает комментарий, скобка внутри комментария не закрывает массив, имя внутри комментария не становится подпиской; новый ключ встаёт после массива, а не внутрь него - всё записываемое проходит через manifest.Quote — обратный слэш в пути делал файл, который инструмент сам не читает - маркер локальной части переехал в doc и пропускает огороженные блоки: процитированный в примере маркер больше не считается границей, а копия без маркера не перезаписывается молча - лишний позиционный аргумент отсекается: flag прекращал разбор и прятал флаги после себя, из-за чего pull, list и check игнорировали --for - заведены тесты проверок копий, включая молчание на исправной копии
This commit is contained in:
@@ -28,7 +28,7 @@ const projectSkeleton = `# What this repository takes from a conventions suite.
|
||||
# Where the copies come from: a path on disk, relative to this file or absolute,
|
||||
# or a git repository over http or https. A trailing #branch, #tag or #commit
|
||||
# pins a revision.
|
||||
source = "%s"
|
||||
source = %s
|
||||
|
||||
# ─── Components ─────────────────────────────────────────────────────────────
|
||||
#
|
||||
@@ -54,6 +54,9 @@ func runInit(env Env, args []string) ExitCode {
|
||||
if err := fs.Parse(args); err != nil {
|
||||
return Usage
|
||||
}
|
||||
if code := noStrayArgs(env, "convy init", fs.Args()); code != OK {
|
||||
return code
|
||||
}
|
||||
|
||||
where := *root
|
||||
if where == "" {
|
||||
@@ -102,7 +105,7 @@ func runInit(env Env, args []string) ExitCode {
|
||||
return Failed
|
||||
}
|
||||
|
||||
entries := [][2]string{{"dir", quote(given["dir"])}}
|
||||
entries := [][2]string{{"dir", manifest.Quote(given["dir"])}}
|
||||
if list := split(given["lang"]); len(list) > 0 {
|
||||
entries = append(entries, [2]string{"lang", array(list)})
|
||||
}
|
||||
@@ -111,7 +114,7 @@ func runInit(env Env, args []string) ExitCode {
|
||||
}
|
||||
entries = append(entries, [2]string{"topics", "[]"})
|
||||
|
||||
body, err := manifest.AddTable([]byte(fmt.Sprintf(projectSkeleton, given["source"])),
|
||||
body, err := manifest.AddTable(fmt.Appendf(nil, projectSkeleton, manifest.Quote(given["source"])),
|
||||
"components."+given["component"], entries)
|
||||
if err != nil {
|
||||
fmt.Fprintln(env.Err, err)
|
||||
@@ -179,14 +182,11 @@ func initFields() []Field {
|
||||
}}
|
||||
}
|
||||
|
||||
func quote(s string) string {
|
||||
return `"` + strings.ReplaceAll(s, `"`, `\"`) + `"`
|
||||
}
|
||||
|
||||
// array writes a TOML array of strings.
|
||||
func array(values []string) string {
|
||||
parts := make([]string, len(values))
|
||||
for i, v := range values {
|
||||
parts[i] = quote(v)
|
||||
parts[i] = manifest.Quote(v)
|
||||
}
|
||||
return "[" + strings.Join(parts, ", ") + "]"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user