mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Merge pull request #563 from davidgiven/includes
Allow including config files from other config files.
This commit is contained in:
@@ -12,10 +12,11 @@ import "lib/mapper.proto";
|
||||
import "lib/common.proto";
|
||||
import "lib/layout.proto";
|
||||
|
||||
// NEXT_TAG: 18
|
||||
// NEXT_TAG: 19
|
||||
message ConfigProto {
|
||||
optional string comment = 8;
|
||||
optional bool is_extension = 13;
|
||||
repeated string include = 19;
|
||||
|
||||
optional LayoutProto layout = 17;
|
||||
|
||||
|
||||
30
lib/flags.cc
30
lib/flags.cc
@@ -188,17 +188,17 @@ void FlagGroup::parseFlagsWithConfigFiles(int argc, const char* argv[],
|
||||
);
|
||||
}
|
||||
|
||||
void FlagGroup::parseConfigFile(
|
||||
ConfigProto FlagGroup::parseSingleConfigFile(
|
||||
const std::string& filename,
|
||||
const std::map<std::string, std::string>& configFiles)
|
||||
{
|
||||
const auto& it = configFiles.find(filename);
|
||||
if (it != configFiles.end())
|
||||
{
|
||||
ConfigProto newConfig;
|
||||
if (!newConfig.ParseFromString(it->second))
|
||||
ConfigProto config;
|
||||
if (!config.ParseFromString(it->second))
|
||||
Error() << "couldn't load built-in config proto";
|
||||
config.MergeFrom(newConfig);
|
||||
return config;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -209,11 +209,33 @@ void FlagGroup::parseConfigFile(
|
||||
std::ostringstream ss;
|
||||
ss << f.rdbuf();
|
||||
|
||||
ConfigProto config;
|
||||
if (!google::protobuf::TextFormat::MergeFromString(ss.str(), &config))
|
||||
Error() << "couldn't load external config proto";
|
||||
return config;
|
||||
}
|
||||
}
|
||||
|
||||
void FlagGroup::parseConfigFile(
|
||||
const std::string& filename,
|
||||
const std::map<std::string, std::string>& configFiles)
|
||||
{
|
||||
auto newConfig = parseSingleConfigFile(filename, configFiles);
|
||||
|
||||
/* The includes need to be merged _first_. */
|
||||
|
||||
for (const auto& include : newConfig.include())
|
||||
{
|
||||
auto included = parseSingleConfigFile(include, configFiles);
|
||||
if (included.include_size() != 0)
|
||||
Error() << "only one level of config file includes are supported (so far, if you need this, complain)";
|
||||
|
||||
config.MergeFrom(included);
|
||||
}
|
||||
|
||||
config.MergeFrom(newConfig);
|
||||
}
|
||||
|
||||
void FlagGroup::checkInitialised() const
|
||||
{
|
||||
if (!_initialised)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
class DataSpec;
|
||||
class Flag;
|
||||
class ConfigProto;
|
||||
|
||||
class FlagGroup
|
||||
{
|
||||
@@ -21,6 +22,9 @@ public:
|
||||
[](const auto&){ return false; });
|
||||
void parseFlagsWithConfigFiles(int argc, const char* argv[],
|
||||
const std::map<std::string, std::string>& configFiles);
|
||||
static ConfigProto parseSingleConfigFile(
|
||||
const std::string& filename,
|
||||
const std::map<std::string, std::string>& configFiles);
|
||||
static void parseConfigFile(
|
||||
const std::string& filename,
|
||||
const std::map<std::string, std::string>& configFiles);
|
||||
|
||||
35
src/formats/_micropolis.textpb
Normal file
35
src/formats/_micropolis.textpb
Normal file
@@ -0,0 +1,35 @@
|
||||
comment: 'Common Micropolis definitions'
|
||||
is_extension: true
|
||||
|
||||
drive {
|
||||
hard_sector_count: 16
|
||||
}
|
||||
|
||||
image_reader {
|
||||
filename: "micropolis.img"
|
||||
img {}
|
||||
}
|
||||
|
||||
image_writer {
|
||||
filename: "micropolis.img"
|
||||
img {}
|
||||
}
|
||||
|
||||
layout {
|
||||
trackdata {
|
||||
sector_size: 256
|
||||
sector_range {
|
||||
start_sector: 0
|
||||
sector_count: 16
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
encoder {
|
||||
micropolis {}
|
||||
}
|
||||
|
||||
decoder {
|
||||
micropolis {}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
FORMATS = \
|
||||
_micropolis \
|
||||
40track_drive \
|
||||
acornadfs \
|
||||
acorndfs \
|
||||
|
||||
@@ -1,36 +1,10 @@
|
||||
comment: 'Micropolis MetaFloppy Mod I 143kB 5.25" SSDD hard-sectored'
|
||||
|
||||
drive {
|
||||
hard_sector_count: 16
|
||||
}
|
||||
|
||||
image_reader {
|
||||
filename: "micropolis.img"
|
||||
img {}
|
||||
}
|
||||
|
||||
image_writer {
|
||||
filename: "micropolis.img"
|
||||
img {}
|
||||
}
|
||||
include: '_micropolis'
|
||||
|
||||
layout {
|
||||
tracks: 35
|
||||
trackdata {
|
||||
sector_size: 256
|
||||
sector_range {
|
||||
start_sector: 0
|
||||
sector_count: 16
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
encoder {
|
||||
micropolis {}
|
||||
}
|
||||
|
||||
decoder {
|
||||
micropolis {}
|
||||
sides: 1
|
||||
}
|
||||
|
||||
tracks {
|
||||
|
||||
@@ -1,36 +1,10 @@
|
||||
comment: 'Micropolis MetaFloppy Mod I 287kB 5.25" DSDD hard-sectored'
|
||||
|
||||
drive {
|
||||
hard_sector_count: 16
|
||||
}
|
||||
|
||||
image_reader {
|
||||
filename: "micropolis.img"
|
||||
img {}
|
||||
}
|
||||
|
||||
image_writer {
|
||||
filename: "micropolis.img"
|
||||
img {}
|
||||
}
|
||||
include: '_micropolis'
|
||||
|
||||
layout {
|
||||
tracks: 35
|
||||
trackdata {
|
||||
sector_size: 256
|
||||
sector_range {
|
||||
start_sector: 0
|
||||
sector_count: 16
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
encoder {
|
||||
micropolis {}
|
||||
}
|
||||
|
||||
decoder {
|
||||
micropolis {}
|
||||
sides: 2
|
||||
}
|
||||
|
||||
tracks {
|
||||
|
||||
@@ -1,36 +1,10 @@
|
||||
comment: 'Micropolis MetaFloppy Mod II 315kB 5.25" SSDD hard-sectored'
|
||||
|
||||
drive {
|
||||
hard_sector_count: 16
|
||||
}
|
||||
|
||||
image_reader {
|
||||
filename: "micropolis.img"
|
||||
img {}
|
||||
}
|
||||
|
||||
image_writer {
|
||||
filename: "micropolis.img"
|
||||
img {}
|
||||
}
|
||||
include: '_micropolis'
|
||||
|
||||
layout {
|
||||
tracks: 77
|
||||
trackdata {
|
||||
sector_size: 256
|
||||
sector_range {
|
||||
start_sector: 0
|
||||
sector_count: 16
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
encoder {
|
||||
micropolis {}
|
||||
}
|
||||
|
||||
decoder {
|
||||
micropolis {}
|
||||
sides: 1
|
||||
}
|
||||
|
||||
tracks {
|
||||
|
||||
@@ -1,36 +1,10 @@
|
||||
comment: 'Micropolis MetaFloppy Mod II 630kB 5.25" DSDD hard-sectored'
|
||||
|
||||
drive {
|
||||
hard_sector_count: 16
|
||||
}
|
||||
|
||||
image_reader {
|
||||
filename: "micropolis.img"
|
||||
img {}
|
||||
}
|
||||
|
||||
image_writer {
|
||||
filename: "micropolis.img"
|
||||
img {}
|
||||
}
|
||||
include: '_micropolis'
|
||||
|
||||
layout {
|
||||
tracks: 77
|
||||
trackdata {
|
||||
sector_size: 256
|
||||
sector_range {
|
||||
start_sector: 0
|
||||
sector_count: 16
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
encoder {
|
||||
micropolis {}
|
||||
}
|
||||
|
||||
decoder {
|
||||
micropolis {}
|
||||
sides: 2
|
||||
}
|
||||
|
||||
tracks {
|
||||
|
||||
Reference in New Issue
Block a user