mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
Make 'eden config' print valid TOML
Summary: The 'eden config' command prints output naively. This leads to confusing output when using the hg.extra_hgrc option. For example, in the following output, `mode = off` is part of hg.extra_hgrc's value, but it looks like it's a separate option in Eden's config: ``` $ eden config [clone] default-revision=master [rage] reporter=pastry --title "eden rage from $(hostname)" [hg] extra_hgrc=[fsmonitor] mode = off %include /etc/mercurial/repo-specific/eden.rc [service] experimental_systemd=True ``` Fix this issue by making 'eden config' output valid TOML: ``` [clone] default-revision = "master" [rage] reporter = "pastry --title \"eden rage from $(hostname)\"" [hg] extra_hgrc = "[fsmonitor]\nmode = off\n\n%include /etc/mercurial/repo-specific/eden.rc\n" [service] experimental_systemd = "True" ``` Reviewed By: simpkins Differential Revision: D13661229 fbshipit-source-id: 76e4fa83ad186d04451623e3d8d87a78e4b821d8
This commit is contained in:
parent
2ba72dc18e
commit
82e63507aa
@ -246,12 +246,12 @@ class EdenInstance:
|
||||
pass
|
||||
return False
|
||||
|
||||
def print_full_config(self) -> None:
|
||||
def print_full_config(self, file: typing.TextIO) -> None:
|
||||
parser = self._loadConfig()
|
||||
data: Dict[str, Dict[str, str]] = {}
|
||||
for section in parser.sections():
|
||||
print("[%s]" % section)
|
||||
for k, v in parser.items(section):
|
||||
print("%s=%s" % (k, v))
|
||||
data[section] = {k: v for k, v in parser.items(section)}
|
||||
toml.dump(data, file) # pyre-ignore[T39129461]
|
||||
|
||||
def find_config_for_alias(self, alias: str) -> Optional[CheckoutConfig]:
|
||||
"""Looks through the existing config files and searches for a
|
||||
|
@ -418,7 +418,7 @@ class ConfigCmd(Subcmd):
|
||||
# mirrors `git config --get invalid`; just exit with code 1
|
||||
return 1
|
||||
else:
|
||||
instance.print_full_config()
|
||||
instance.print_full_config(file=sys.stdout)
|
||||
return 0
|
||||
|
||||
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
import abc
|
||||
import configparser
|
||||
import io
|
||||
import os
|
||||
import unittest
|
||||
from typing import Dict, List, Optional
|
||||
@ -304,6 +305,36 @@ experimental_systemd = false
|
||||
)
|
||||
self.assertFalse(self.get_config().should_use_experimental_systemd_mode())
|
||||
|
||||
def test_printed_config_is_valid_toml(self) -> None:
|
||||
self.write_user_config(
|
||||
"""
|
||||
[clone]
|
||||
default-revision = "master"
|
||||
"""
|
||||
)
|
||||
|
||||
printed_config = io.StringIO()
|
||||
self.get_config().print_full_config(file=printed_config)
|
||||
printed_config.seek(0)
|
||||
parsed_config = toml.load(printed_config)
|
||||
|
||||
self.assertIn("clone", parsed_config)
|
||||
self.assertEqual(parsed_config["clone"].get("default-revision"), "master")
|
||||
|
||||
def test_printed_config_expands_variables(self) -> None:
|
||||
self.write_user_config(
|
||||
"""
|
||||
["repository fbsource"]
|
||||
type = "hg"
|
||||
path = "/data/users/${USER}/fbsource"
|
||||
"""
|
||||
)
|
||||
|
||||
printed_config = io.StringIO()
|
||||
self.get_config().print_full_config(file=printed_config)
|
||||
|
||||
self.assertIn("/data/users/bob/fbsource", printed_config.getvalue())
|
||||
|
||||
def get_config(self) -> EdenInstance:
|
||||
return EdenInstance(
|
||||
self._state_dir, self._etc_eden_dir, self._home_dir, self._interpolate_dict
|
||||
|
Loading…
Reference in New Issue
Block a user