Skip to content
Snippets Groups Projects

Fix env vars precedence

Merged Alexey Protsenko requested to merge env-precedence into master
2 unresolved threads

The clap module we use for parsing command-line arguments allows specifying default_value. Unfortunately, it makes impossible to tell if an argument was actually passed. So it always overrides env var with a default value, which is undesirable.

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
8 11 - data-dir:
9 12 long: data-dir
10 help: Here instance persists all its data
13 help: >
14 Here instance persists all its data
15 (default: .)
11 16 takes_value: true
12 default_value: "."
13 17 value_name: path
14 18
15 19 - listen:
16 20 # short: l
17 21 long: listen
18 help: Socket bind address
22 help: >
23 Socket bind address (default: 3301)
  • Теперь у нас эти значения дублируются в ямле и мейне. Какие вообще преимущества описывания опций через отдельный ямл файл? Если перенести их описание в мейн, дублирования можно было бы избежать

    By Georgy Moshkin on 2022-01-18T13:29:51 (imported from GitLab)

  • Преимущество в лаконичности и читаемости. Но вообще так исторически сложилось - я взял первое что показалось проще. В качестве альтернативы Сережа предлагал переехать на https://crates.io/crates/structopt, можно его потом попробовать.

    By Yaroslav Dynnikov on 2022-01-18T13:44:22 (imported from GitLab)

  • нам даже переезжать не понадобится. clap, который сейчас используется позволяет не только ямл использовать, но и ещё кучу всяких способов в коде: строкой, билдером, макросом... К тому же он совместим с structopt

    By Georgy Moshkin on 2022-01-18T14:03:57 (imported from GitLab)

  • Please register or sign in to reply
  • 12 12 cmd.current_dir(temp_path);
    13 13 cmd.arg("run");
    14 cmd.args(["-e", "os.exit()"]);
    14 cmd.arg("-e").arg(
    15 r#"
    16 function assert_eq(l, r)
    17 if l ~= r then
    18 error(('Assertion failed: %q ~= %q'):format(l, r), 2)
    19 end
    20 end
    21 assert_eq(os.environ()['PICODATA_LISTEN'], "3301")
    22 assert_eq(os.environ()['PICODATA_DATA_DIR'], ".")
    23 os.exit()
    24 "#,
    25 );
    15 26 cmd.timeout(Duration::from_secs(1)).assert().success();
  • Alexey Protsenko approved this merge request

    approved this merge request

    By Sergey V on 2022-01-18T13:33:48 (imported from GitLab)

  • Please register or sign in to reply
    Loading