57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package core
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func GetEnvs(db DB, source string) ([]string, error) {
|
|
rows, err := db.Query(`
|
|
select name, value
|
|
from envs
|
|
where source = ?
|
|
`, source)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var envs []string
|
|
for rows.Next() {
|
|
var name string
|
|
var value string
|
|
if err := rows.Scan(&name, &value); err != nil {
|
|
return nil, err
|
|
}
|
|
envs = append(envs, fmt.Sprintf("%s=%s", name, value))
|
|
}
|
|
return envs, nil
|
|
}
|
|
|
|
func SetEnvs(db DB, source string, envs []string) error {
|
|
return db.Transact(func(tx DB) error {
|
|
for _, env := range envs {
|
|
parts := strings.SplitN(env, "=", 2)
|
|
if len(parts) != 2 {
|
|
return fmt.Errorf("invalid env format: %s", env)
|
|
}
|
|
if parts[1] == "" {
|
|
_, err := tx.Exec(`
|
|
delete from envs
|
|
where source = ? and name = ?
|
|
`, source, parts[0])
|
|
if err != nil {
|
|
return fmt.Errorf("failed to clear source %s env %s: %v", source, parts[0], err)
|
|
}
|
|
} else {
|
|
_, err := tx.Exec(`
|
|
insert into envs (source, name, value)
|
|
values (?, ?, ?)
|
|
`, source, parts[0], parts[1])
|
|
if err != nil {
|
|
return fmt.Errorf("failed to set source %s env %s = %s: %v", source, parts[0], parts[1], err)
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
}
|