diff --git a/README b/README index 84c3df2..a713a75 100644 --- a/README +++ b/README @@ -50,8 +50,13 @@ Enjoy! Version History: -Grive v0.3: Bug fix release +Grive v0.3: Bug fix & minor feature release Fixed bugs: #93: missing reference count increment in one of the Json constructors #82: retry for HTTP error 500 & 503 #77: Fixed a bug where grive crashed on the first run. + +New features: + #87: support for revisions + #86: partial sync (contributed by justin at tierramedia.com) + \ No newline at end of file diff --git a/grive/src/main.cc b/grive/src/main.cc index d576001..9516a2c 100644 --- a/grive/src/main.cc +++ b/grive/src/main.cc @@ -51,6 +51,7 @@ const std::string defaultConfigFileName = ".grive"; const char *configFileEnvironmentVariable = "GR_CONFIG"; using namespace gr ; +namespace po = boost::program_options; // libgcrypt insist this to be done in application, not library void InitGCrypt() @@ -65,18 +66,46 @@ void InitGCrypt() gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0); } +void InitLog( const po::variables_map& vm ) +{ + std::auto_ptr comp_log(new log::CompositeLog) ; + LogBase* console_log = comp_log->Add( std::auto_ptr( new log::DefaultLog ) ) ; + + if ( vm.count( "log" ) ) + { + std::auto_ptr file_log(new log::DefaultLog( vm["log"].as() )) ; + file_log->Enable( log::debug ) ; + file_log->Enable( log::verbose ) ; + file_log->Enable( log::info ) ; + file_log->Enable( log::warning ) ; + file_log->Enable( log::error ) ; + file_log->Enable( log::critical ) ; + + // log grive version to log file + file_log->Log( log::Fmt("grive version " VERSION " " __DATE__ " " __TIME__), log::verbose ) ; + file_log->Log( log::Fmt("current time: %1%") % DateTime::Now(), log::verbose ) ; + + comp_log->Add( file_log ) ; + } + + if ( vm.count( "verbose" ) ) + { + console_log->Enable( log::verbose ) ; + } + + if ( vm.count( "debug" ) ) + { + console_log->Enable( log::verbose ) ; + console_log->Enable( log::debug ) ; + } + LogBase::Inst( std::auto_ptr(comp_log.release()) ) ; +} + int Main( int argc, char **argv ) { InitGCrypt() ; std::string rootFolder = defaultRootFolder; - - std::auto_ptr comp_log(new log::CompositeLog) ; - LogBase* console_log = comp_log->Add( std::auto_ptr( new log::DefaultLog ) ) ; - - Json options ; - - namespace po = boost::program_options; // construct the program options po::options_description desc( "Grive options" ); @@ -105,56 +134,41 @@ int Main( int argc, char **argv ) std::cout << desc << std::endl ; return 0 ; } + else if ( vm.count( "version" ) ) + { + std::cout + << "grive version " << VERSION << ' ' << __DATE__ << ' ' << __TIME__ << std::endl ; + return 0 ; + } - boost::shared_ptr config ; + // initialize logging + InitLog(vm) ; - if ( vm.count( "log" ) ) - { - std::auto_ptr file_log(new log::DefaultLog( vm["log"].as() )) ; - file_log->Enable( log::debug ) ; - file_log->Enable( log::verbose ) ; - file_log->Enable( log::info ) ; - file_log->Enable( log::warning ) ; - file_log->Enable( log::error ) ; - file_log->Enable( log::critical ) ; - - // log grive version to log file - file_log->Log( log::Fmt("grive version " VERSION " " __DATE__ " " __TIME__), log::verbose ) ; - file_log->Log( log::Fmt("current time: %1%") % DateTime::Now(), log::verbose ) ; - - comp_log->Add( file_log ) ; - } - if ( vm.count( "verbose" ) ) - { - console_log->Enable( log::verbose ) ; + boost::shared_ptr config ; + + // config file will be (in order of preference) + // value specified in environment string + // value specified in defaultConfigFileName in path from commandline --path + // value specified in defaultConfigFileName in current directory + const char *envConfigFileName = ::getenv( configFileEnvironmentVariable ) ; + if (envConfigFileName) { + config.reset(new Config(envConfigFileName)); + + } else if ( vm.count( "path" ) ) { + rootFolder = vm["path"].as(); + config.reset(new Config( fs::path(rootFolder) / fs::path(defaultConfigFileName) )); + + } else { + config.reset(new Config( defaultConfigFileName) ); } + // misc options + Json options ; options.Add( "log-xml", Json(vm.count("log-xml") > 0) ) ; options.Add( "new-rev", Json(vm.count("new-rev") > 0) ) ; + options.Add( "force", Json(vm.count("force") > 0 ) ) ; - if ( vm.count( "debug" ) ) - { - console_log->Enable( log::verbose ) ; - console_log->Enable( log::debug ) ; - } - - // config file will be (in order of preference) - // value specified in environment string - // value specified in defaultConfigFileName in path from commandline --path - // value specified in defaultConfigFileName in current directory - const char *envConfigFileName = ::getenv( configFileEnvironmentVariable ) ; - if (envConfigFileName) { - config.reset(new Config(envConfigFileName)); - - } else if ( vm.count( "path" ) ) { - rootFolder = vm["path"].as(); - config.reset(new Config( fs::path(rootFolder) / fs::path(defaultConfigFileName) )); - - } else { - config.reset(new Config( defaultConfigFileName) ); - } - - Log( "config file name %1%", config->ConfigFile().string(), log::verbose ); + Log( "config file name %1%", config->ConfigFile().string(), log::verbose ); if ( vm.count( "auth" ) ) { @@ -177,18 +191,6 @@ int Main( int argc, char **argv ) config->Get().Add( "refresh_token", Json( token.RefreshToken() ) ) ; config->Save() ; } - if ( vm.count( "version" ) ) - { - std::cout - << "grive version " << VERSION << ' ' << __DATE__ << ' ' << __TIME__ << std::endl ; - return 0 ; - } - if ( vm.count( "force" ) ) - { - options.Add( "force", Json(true) ) ; - } - - LogBase::Inst( std::auto_ptr(comp_log.release()) ) ; std::string refresh_token ; try diff --git a/libgrive/CMakeLists.txt b/libgrive/CMakeLists.txt index 5008a3c..a9d6018 100644 --- a/libgrive/CMakeLists.txt +++ b/libgrive/CMakeLists.txt @@ -6,7 +6,7 @@ find_package(LibGcrypt REQUIRED) find_package(JSONC REQUIRED) find_package(CURL REQUIRED) find_package(EXPAT REQUIRED) -find_package(Boost 1.40.0 COMPONENTS filesystem system REQUIRED) +find_package(Boost 1.40.0 COMPONENTS program_options filesystem system REQUIRED) find_package(BFD) find_package(CppUnit) find_package(Iberty) @@ -126,6 +126,7 @@ IF ( CPPUNIT_FOUND ) target_link_libraries( unittest grive ${CPPUNIT_LIBRARY} + ${Boost_LIBRARIES} ) ENDIF ( CPPUNIT_FOUND ) diff --git a/libgrive/src/util/Config.cc b/libgrive/src/util/Config.cc index d74307b..62a8333 100644 --- a/libgrive/src/util/Config.cc +++ b/libgrive/src/util/Config.cc @@ -21,18 +21,21 @@ #include "util/StdioFile.hh" +#include + #include #include -using namespace gr; +namespace gr { -Config::Config(const fs::path& configFile) - : m_configFile(configFile) - , m_cfg( Read() ) +Config::Config(const fs::path& configFile) : + m_configFile(configFile), + m_cfg( Read() ) { - if (configFile.empty()) { - throw Error() << expt::ErrMsg("Config cannot be initalised with an empty string."); - } + if (configFile.empty()) + { + throw Error() << expt::ErrMsg("Config cannot be initalised with an empty string."); + } } const fs::path& Config::ConfigFile() const @@ -63,3 +66,4 @@ Json Config::Read() } } +} // end of namespace diff --git a/libgrive/src/util/Config.hh b/libgrive/src/util/Config.hh index 63af600..30ef116 100644 --- a/libgrive/src/util/Config.hh +++ b/libgrive/src/util/Config.hh @@ -35,14 +35,14 @@ public : Json& Get() ; void Save() ; - const fs::path &ConfigFile() const; + const fs::path &ConfigFile() const; private : Json Read() ; private : - const fs::path m_configFile; - Json m_cfg ; + const fs::path m_configFile; + Json m_cfg ; } ; } // end of namespace