Initial commit

This commit is contained in:
NortPerm
2023-10-30 15:21:12 +03:00
committed by GitHub
commit 13e2575b4e
149 changed files with 3961 additions and 0 deletions

0
hw08_envdir_tool/.sync Normal file
View File

View File

@@ -0,0 +1,48 @@
## Домашнее задание №8 «Утилита envdir»
Необходимо реализовать утилиту `envdir` на Go.
Эта утилита позволяет запускать программы, получая переменные окружения из определенной директории:
- если директория содержит файл с именем `S`, первой строкой которого является `T`, то
`envdir` удаляет переменную среды с именем `S`, если таковая существует, а затем добавляет
переменную среды с именем `S` и значением `T`;
- имя `S` не должно содержать `=`; пробелы и табуляция в конце `T` удаляются; терминальные нули (`0x00`) заменяются на перевод строки (`\n`);
- если файл полностью пустой (длина - 0 байт), то `envdir` удаляет переменную окружения с именем `S`.
---
Пример использования:
```bash
$ go-envdir /path/to/env/dir command arg1 arg2
```
Если в директории `/path/to/env/dir` содержатся файлы:
* `FOO` с содержимым `123`;
* `BAR` с содержимым `value`,
то вызов выше эквивалентен вызову
```bash
$ FOO=123 BAR=value command arg1 arg2
```
---
Также необходимо, чтобы:
* стандартные потоки ввода/вывода/ошибок пробрасывались в вызываемую программу;
* код выхода утилиты совпадал с кодом выхода программы.
При необходимости можно выделять дополнительные функции / ошибки.
Юнит-тесты могут использовать файлы из `testdata` или создавать свои директории / файлы,
которые **обязаны** подчищать после своего выполнения.
### Критерии оценки
- Пайплайн зелёный - 4 балла
- Добавлены юнит-тесты - до 4 баллов
- Понятность и чистота кода - до 2 баллов
#### Зачёт от 7 баллов
### Подсказки
- https://www.unix.com/man-page/debian/8/envdir/
- `os.Args`
- `ioutil.ReadDir`
- `bytes.Replace`, `strings.TrimRight`
- `exec.Command`

View File

@@ -0,0 +1,16 @@
package main
type Environment map[string]EnvValue
// EnvValue helps to distinguish between empty files and files with the first empty line.
type EnvValue struct {
Value string
NeedRemove bool
}
// ReadDir reads a specified directory and returns map of env variables.
// Variables represented as files where filename is name of variable, file first line is a value.
func ReadDir(dir string) (Environment, error) {
// Place your code here
return nil, nil
}

View File

@@ -0,0 +1,7 @@
package main
import "testing"
func TestReadDir(t *testing.T) {
// Place your code here
}

View File

@@ -0,0 +1,7 @@
package main
// RunCmd runs a command + arguments (cmd) with environment variables from env.
func RunCmd(cmd []string, env Environment) (returnCode int) {
// Place your code here.
return
}

View File

@@ -0,0 +1,7 @@
package main
import "testing"
func TestRunCmd(t *testing.T) {
// Place your code here
}

3
hw08_envdir_tool/go.mod Normal file
View File

@@ -0,0 +1,3 @@
module github.com/fixme_my_friend/hw08_envdir_tool
go 1.19

5
hw08_envdir_tool/main.go Normal file
View File

@@ -0,0 +1,5 @@
package main
func main() {
// Place your code here.
}

25
hw08_envdir_tool/test.sh Executable file
View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -xeuo pipefail
go build -o go-envdir
export HELLO="SHOULD_REPLACE"
export FOO="SHOULD_REPLACE"
export UNSET="SHOULD_REMOVE"
export ADDED="from original env"
export EMPTY="SHOULD_BE_EMPTY"
result=$(./go-envdir "$(pwd)/testdata/env" "/bin/bash" "$(pwd)/testdata/echo.sh" arg1=1 arg2=2)
expected='HELLO is ("hello")
BAR is (bar)
FOO is ( foo
with new line)
UNSET is ()
ADDED is (from original env)
EMPTY is ()
arguments are arg1=1 arg2=2'
[ "${result}" = "${expected}" ] || (echo -e "invalid output: ${result}" && exit 1)
rm -f go-envdir
echo "PASS"

9
hw08_envdir_tool/testdata/echo.sh vendored Executable file
View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
echo -e "HELLO is (${HELLO})
BAR is (${BAR})
FOO is (${FOO})
UNSET is (${UNSET})
ADDED is (${ADDED})
EMPTY is (${EMPTY})
arguments are $*"

2
hw08_envdir_tool/testdata/env/BAR vendored Normal file
View File

@@ -0,0 +1,2 @@
bar
PLEASE IGNORE SECOND LINE

1
hw08_envdir_tool/testdata/env/EMPTY vendored Normal file
View File

@@ -0,0 +1 @@

BIN
hw08_envdir_tool/testdata/env/FOO vendored Normal file

Binary file not shown.

1
hw08_envdir_tool/testdata/env/HELLO vendored Normal file
View File

@@ -0,0 +1 @@
"hello"

0
hw08_envdir_tool/testdata/env/UNSET vendored Normal file
View File