diff --git a/grive/src/main.cc b/grive/src/main.cc index 5209c94..b7b2585 100644 --- a/grive/src/main.cc +++ b/grive/src/main.cc @@ -110,6 +110,7 @@ int Main( int argc, char **argv ) ( "version,v", "Display Grive version" ) ( "auth,a", "Request authorization token" ) ( "path,p", po::value(), "Path to sync") + ( "dir,s", po::value(), "Subdirectory to sync") ( "verbose,V", "Verbose mode. Enable more messages than normal.") ( "log-xml", "Log more HTTP responses as XML for debugging.") ( "new-rev", "Create new revisions in server for updated files.") diff --git a/libgrive/src/drive/State.cc b/libgrive/src/drive/State.cc index 2d1dc94..cf0c30b 100644 --- a/libgrive/src/drive/State.cc +++ b/libgrive/src/drive/State.cc @@ -35,6 +35,7 @@ namespace gr { namespace v1 { State::State( const fs::path& filename, const Json& options ) : m_res ( options["path"].Str() ), + m_dir ( options["dir"].Str() ), m_cstamp ( -1 ) { Read( filename ) ; @@ -78,6 +79,10 @@ void State::FromLocal( const fs::path& p, Resource* folder ) if ( IsIgnore(fname) ) Log( "file %1% is ignored by grive", fname, log::verbose ) ; + // check if it is ignored + else if ( folder == m_res.Root() && m_dir != "" && fname != m_dir ) + Log( "%1% %2% is ignored", fs::is_directory(i->path()) ? "folder" : "file", fname, log::verbose ); + // check for broken symblic links else if ( !fs::exists( i->path() ) ) Log( "file %1% doesn't exist (broken link?), ignored", i->path(), log::verbose ) ; @@ -109,6 +114,10 @@ void State::FromRemote( const Entry& e ) if ( IsIgnore( e.Name() ) ) Log( "%1% %2% is ignored by grive", e.Kind(), e.Name(), log::verbose ) ; + // check if it is ignored + else if ( e.ParentHref() == m_res.Root()->SelfHref() && m_dir != "" && e.Name() != m_dir ) + Log( "%1% %2% is ignored", e.Kind(), e.Name(), log::verbose ); + // common checkings else if ( e.Kind() != "folder" && (fn.empty() || e.ContentSrc().empty()) ) Log( "%1% \"%2%\" is a google document, ignored", e.Kind(), e.Name(), log::verbose ) ; diff --git a/libgrive/src/drive/State.hh b/libgrive/src/drive/State.hh index 8c64189..98cce39 100644 --- a/libgrive/src/drive/State.hh +++ b/libgrive/src/drive/State.hh @@ -79,6 +79,7 @@ private : ResourceTree m_res ; DateTime m_last_sync ; long m_cstamp ; + std::string m_dir ; std::vector m_unresolved ; } ; diff --git a/libgrive/src/util/Config.cc b/libgrive/src/util/Config.cc index b5a9f15..12c22c7 100644 --- a/libgrive/src/util/Config.cc +++ b/libgrive/src/util/Config.cc @@ -42,6 +42,9 @@ Config::Config( const po::variables_map& vm ) m_cmd.Add( "path", Json(vm.count("path") > 0 ? vm["path"].as() : default_root_folder ) ) ; + m_cmd.Add( "dir", Json(vm.count("dir") > 0 + ? vm["dir"].as() + : "" ) ) ; m_path = GetPath( fs::path(m_cmd["path"].Str()) ) ; m_file = Read( ) ;