add program options to thin_dump
This commit is contained in:
parent
687525fdb0
commit
8389ca31a8
2
Makefile
2
Makefile
@ -19,7 +19,7 @@ OBJECTS=$(subst .cc,.o,$(SOURCE))
|
|||||||
TOP_DIR:=$(PWD)
|
TOP_DIR:=$(PWD)
|
||||||
CPPFLAGS=-Wall -g -I$(TOP_DIR)
|
CPPFLAGS=-Wall -g -I$(TOP_DIR)
|
||||||
#CPPFLAGS=-Wall -std=c++0x -g -I$(TOP_DIR)
|
#CPPFLAGS=-Wall -std=c++0x -g -I$(TOP_DIR)
|
||||||
LIBS=-lstdc++
|
LIBS=-lstdc++ -lboost_program_options
|
||||||
|
|
||||||
.PHONEY: test-programs
|
.PHONEY: test-programs
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "block.h"
|
#include "block.h"
|
||||||
#include "btree.h"
|
#include "btree.h"
|
||||||
|
#include "emitter.h"
|
||||||
#include "endian_utils.h"
|
#include "endian_utils.h"
|
||||||
#include "error_set.h"
|
#include "error_set.h"
|
||||||
#include "metadata_disk_structures.h"
|
#include "metadata_disk_structures.h"
|
||||||
@ -173,7 +174,7 @@ namespace thin_provisioning {
|
|||||||
boost::optional<persistent_data::error_set::ptr> check();
|
boost::optional<persistent_data::error_set::ptr> check();
|
||||||
|
|
||||||
// Dumping metadata
|
// Dumping metadata
|
||||||
void dump();
|
void dump(emitter::ptr e);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class thin;
|
friend class thin;
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
#include "metadata.h"
|
#include "metadata.h"
|
||||||
|
|
||||||
#include "human_readable_format.h"
|
|
||||||
#include "xml_format.h"
|
|
||||||
|
|
||||||
using namespace persistent_data;
|
using namespace persistent_data;
|
||||||
using namespace thin_provisioning;
|
using namespace thin_provisioning;
|
||||||
|
|
||||||
@ -124,10 +121,8 @@ namespace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
metadata::dump()
|
metadata::dump(emitter::ptr e)
|
||||||
{
|
{
|
||||||
emitter::ptr e = create_xml_emitter(cout);
|
|
||||||
|
|
||||||
details_extractor::ptr de(new details_extractor);
|
details_extractor::ptr de(new details_extractor);
|
||||||
|
|
||||||
details_.visit(de);
|
details_.visit(de);
|
||||||
|
55
thin_dump.cc
55
thin_dump.cc
@ -1,33 +1,70 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "human_readable_format.h"
|
||||||
#include "metadata.h"
|
#include "metadata.h"
|
||||||
|
#include "xml_format.h"
|
||||||
|
|
||||||
|
#include <boost/program_options.hpp>
|
||||||
|
|
||||||
using namespace persistent_data;
|
using namespace persistent_data;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace thin_provisioning;
|
using namespace thin_provisioning;
|
||||||
|
|
||||||
|
namespace po = boost::program_options;
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
void dump(string const &path) {
|
void dump(string const &path, string const &format) {
|
||||||
metadata md(path);
|
metadata md(path);
|
||||||
//human_readable::ptr emitter(new human_readable);
|
emitter::ptr e;
|
||||||
md.dump();
|
|
||||||
|
if (format == "xml")
|
||||||
|
e = create_xml_emitter(cout);
|
||||||
|
else if (format == "human_readable")
|
||||||
|
e = create_human_readable_emitter(cout);
|
||||||
|
else {
|
||||||
|
cerr << "unknown format '" << format << "'" << endl;
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
md.dump(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void usage(string const &cmd) {
|
void usage(po::options_description const &desc) {
|
||||||
cerr << "Usage: " << cmd << " <metadata device>" << endl;
|
cerr << "Usage: thin_dump [options] <metadata device or file>" << endl << endl;
|
||||||
|
cerr << desc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
if (argc != 2) {
|
po::options_description desc("Options");
|
||||||
usage(argv[0]);
|
desc.add_options()
|
||||||
exit(1);
|
("help", "Produce help message")
|
||||||
|
("format,f", po::value<string>()->default_value("xml"), "Select format (human_readable|xml)")
|
||||||
|
("input,i", po::value<string>(), "Input file")
|
||||||
|
;
|
||||||
|
|
||||||
|
po::positional_options_description p;
|
||||||
|
p.add("input", -1);
|
||||||
|
|
||||||
|
po::variables_map vm;
|
||||||
|
po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm);
|
||||||
|
po::notify(vm);
|
||||||
|
|
||||||
|
if (vm.count("help")) {
|
||||||
|
usage(desc);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dump(argv[1]);
|
if (vm.count("input") != 1) {
|
||||||
|
cerr << "No input file provided." << endl;
|
||||||
|
usage(desc);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
dump(vm["input"].as<string>(), vm["format"].as<string>());
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace thin_provisioning;
|
using namespace thin_provisioning;
|
||||||
|
|
||||||
|
namespace tp = thin_provisioning;
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@ -101,8 +103,8 @@ namespace {
|
|||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
thin_provisioning::emitter::ptr
|
tp::emitter::ptr
|
||||||
thin_provisioning::create_xml_emitter(ostream &out)
|
tp::create_xml_emitter(ostream &out)
|
||||||
{
|
{
|
||||||
return emitter::ptr(new xml_emitter(out));
|
return emitter::ptr(new xml_emitter(out));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user