Hello community, here is the log from the commit of package libstorage for openSUSE:Factory checked in at 2012-06-29 07:00:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libstorage (Old) and /work/SRC/openSUSE:Factory/.libstorage.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libstorage", Maintainer is "[email protected]" Changes: -------- --- /work/SRC/openSUSE:Factory/libstorage/libstorage.changes 2012-06-25 12:35:37.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.libstorage.new/libstorage.changes 2012-06-29 07:00:51.000000000 +0200 @@ -1,0 +2,11 @@ +Wed Jun 27 15:13:23 CEST 2012 - [email protected] + +- 2.22.7 +- add function to replace complete list of md component devices + +------------------------------------------------------------------- +Tue Jun 26 19:05:26 CEST 2012 - [email protected] + +- suppress helper dm maps for lvm pool and lvm raid volumes + +------------------------------------------------------------------- Old: ---- libstorage-2.22.6.tar.bz2 New: ---- libstorage-2.22.7.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libstorage.spec ++++++ --- /var/tmp/diff_new_pack.Wqn4x9/_old 2012-06-29 07:00:55.000000000 +0200 +++ /var/tmp/diff_new_pack.Wqn4x9/_new 2012-06-29 07:00:55.000000000 +0200 @@ -17,7 +17,7 @@ Name: libstorage -Version: 2.22.6 +Version: 2.22.7 Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build Source: libstorage-%{version}.tar.bz2 ++++++ libstorage-2.22.6.tar.bz2 -> libstorage-2.22.7.tar.bz2 ++++++ ++++ 17179 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/VERSION new/libstorage-2.22.7/VERSION --- old/libstorage-2.22.6/VERSION 2012-06-19 11:07:17.000000000 +0200 +++ new/libstorage-2.22.7/VERSION 2012-06-28 16:32:05.000000000 +0200 @@ -1 +1 @@ -2.22.6 +2.22.7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/bindings/python/libstorage.py new/libstorage-2.22.7/bindings/python/libstorage.py --- old/libstorage-2.22.6/bindings/python/libstorage.py 2012-06-19 11:11:40.000000000 +0200 +++ new/libstorage-2.22.7/bindings/python/libstorage.py 2012-06-25 12:47:06.000000000 +0200 @@ -1,9 +1,10 @@ # This file was automatically generated by SWIG (http://www.swig.org). -# Version 1.3.40 +# Version 2.0.4 # # Do not make changes to this file unless you know what you are doing--modify # the SWIG interface file instead. -# This file is compatible with both classic and new-style classes. + + from sys import version_info if version_info >= (2,6,0): @@ -39,7 +40,7 @@ return method = class_type.__swig_setmethods__.get(name,None) if method: return method(self,value) - if (not static) or hasattr(self,name): + if (not static): self.__dict__[name] = value else: raise AttributeError("You cannot add attributes to %s" % self) @@ -1614,6 +1615,7 @@ def createMdAny(self, *args): return _libstorage.StorageInterface_createMdAny(self, *args) def removeMd(self, *args): return _libstorage.StorageInterface_removeMd(self, *args) def extendMd(self, *args): return _libstorage.StorageInterface_extendMd(self, *args) + def updateMd(self, *args): return _libstorage.StorageInterface_updateMd(self, *args) def shrinkMd(self, *args): return _libstorage.StorageInterface_shrinkMd(self, *args) def changeMdType(self, *args): return _libstorage.StorageInterface_changeMdType(self, *args) def changeMdChunk(self, *args): return _libstorage.StorageInterface_changeMdChunk(self, *args) @@ -1993,5 +1995,6 @@ dequelvmlvinfo_swigregister = _libstorage.dequelvmlvinfo_swigregister dequelvmlvinfo_swigregister(dequelvmlvinfo) +# This file is compatible with both classic and new-style classes. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/examples/Makefile.example new/libstorage-2.22.7/examples/Makefile.example --- old/libstorage-2.22.6/examples/Makefile.example 2012-06-14 11:03:35.000000000 +0200 +++ new/libstorage-2.22.7/examples/Makefile.example 2012-06-26 16:31:32.000000000 +0200 @@ -2,31 +2,33 @@ PROGRAMS = TestDisk TestDiskLog TestProbing TestLvm TestMd TestLoop \ SaveGraph ShowBytes +CPPFLAGS=-std=c++0x + all: $(PROGRAMS) TestDisk: TestDisk.cc - g++ $< -o $@ -Wall -O2 -lstorage + g++ $(CPPFLAGS) $< -o $@ -Wall -O2 -lstorage TestDiskLog: TestDiskLog.cc - g++ $< -o $@ -Wall -O2 -lstorage + g++ $(CPPFLAGS) $< -o $@ -Wall -O2 -lstorage TestProbing: TestProbing.cc - g++ $< -o $@ -Wall -O2 -lstorage + g++ $(CPPFLAGS) $< -o $@ -Wall -O2 -lstorage TestLvm: TestLvm.cc - g++ $< -o $@ -Wall -O2 -lstorage + g++ $(CPPFLAGS) $< -o $@ -Wall -O2 -lstorage TestMd: TestMd.cc - g++ $< -o $@ -Wall -O2 -lstorage + g++ $(CPPFLAGS) $< -o $@ -Wall -O2 -lstorage TestLoop: TestLoop.cc - g++ $< -o $@ -Wall -O2 -lstorage + g++ $(CPPFLAGS) $< -o $@ -Wall -O2 -lstorage SaveGraph: SaveGraph.cc - g++ $< -o $@ -Wall -O2 -lstorage + g++ $(CPPFLAGS) $< -o $@ -Wall -O2 -lstorage ShowBytes: ShowBytes.cc - g++ $< -o $@ -Wall -O2 -lstorage + g++ $(CPPFLAGS) $< -o $@ -Wall -O2 -lstorage clean: rm $(PROGRAMS) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/storage/AppUtil.cc new/libstorage-2.22.7/storage/AppUtil.cc --- old/libstorage-2.22.6/storage/AppUtil.cc 2012-06-19 12:08:57.000000000 +0200 +++ new/libstorage-2.22.7/storage/AppUtil.cc 2012-06-19 16:35:26.000000000 +0200 @@ -392,8 +392,11 @@ if( !logf ) { logf = fopen(filename.c_str(), "a"); - setlinebuf(logf); - atexit( close_logf ); + if( logf ) + { + setlinebuf(logf); + atexit( close_logf ); + } } string::size_type pos1 = 0; @@ -691,6 +694,7 @@ #include "./gen_pathlist.cc" }; ign.push_back( PORTMAPBIN ); + ign.push_back( HFORMATBIN ); if( !boost::starts_with(arch,"s390") ) { ign.push_back( FDASDBIN ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/storage/Dm.cc new/libstorage-2.22.7/storage/Dm.cc --- old/libstorage-2.22.6/storage/Dm.cc 2012-06-14 11:03:35.000000000 +0200 +++ new/libstorage-2.22.7/storage/Dm.cc 2012-06-26 18:40:26.000000000 +0200 @@ -486,6 +486,21 @@ return( ret ); } +string Dm::lvmTableToDev( const string& tab ) + { + static Regex delim( "[^-]-[^-]" ); + string ret( tab ); + if( delim.match( ret ) ) + { + ret[delim.so(0)+1] = '/'; + boost::replace_all(ret,"--","-"); + ret = "/dev/" + ret; + } + return( ret ); + } + + + string Dm::dmDeviceName( unsigned long num ) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/storage/Dm.h new/libstorage-2.22.7/storage/Dm.h --- old/libstorage-2.22.6/storage/Dm.h 2012-06-14 11:03:35.000000000 +0200 +++ new/libstorage-2.22.7/storage/Dm.h 2012-06-26 18:37:17.000000000 +0200 @@ -84,6 +84,7 @@ static bool isActive() { return active; } static string devToTable( const string& dev ); + static string lvmTableToDev( const string& table ); virtual list<string> getUsing() const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/storage/DmCo.cc new/libstorage-2.22.7/storage/DmCo.cc --- old/libstorage-2.22.6/storage/DmCo.cc 2012-06-14 11:03:35.000000000 +0200 +++ new/libstorage-2.22.7/storage/DmCo.cc 2012-06-26 19:02:55.000000000 +0200 @@ -192,6 +192,26 @@ Storage::ConstDmmultipathPair dmm = getStorage()->dmmPair(); const CmdDmsetup& cmddmsetup = systeminfo.getCmdDmsetup(); + list<string> lvm_pools; + for (CmdDmsetup::const_iterator it1 = cmddmsetup.begin(); it1 != cmddmsetup.end(); ++it1) + { + if( boost::ends_with(it1->first,"-tpool") ) + { + string name = it1->first.substr( 0, it1->first.size()-6 ); + if( find( lvm_pools.begin(), lvm_pools.end(), name )==lvm_pools.end() ) + { + string tb = it1->first; + Dm* m = new Dm(*this, tb, "/dev/mapper/" + tb, tb, systeminfo); + if( m && m->getTargetName()=="thin-pool" ) + { + lvm_pools.push_back( name ); + } + if(m) + delete(m); + } + } + } + y2mil( "lvm_pools:" << lvm_pools ); for (CmdDmsetup::const_iterator it1 = cmddmsetup.begin(); it1 != cmddmsetup.end(); ++it1) { string table = it1->first; @@ -281,23 +301,39 @@ if (getStorage()->isUsedBy(it->first, UB_DM)) getStorage()->clearUsedBy(it->first); } + static Regex raid1( "_rimage_[0-9]+$" ); + static Regex raid2( "_rmeta_[0-9]+$" ); + if( !skip && (raid1.match(table)||raid2.match(table))) + { + string::size_type off = std::max( raid1.so(0), raid2.so(0) ); + string nm = Dm::lvmTableToDev( table.substr( 0, off ) ); + skip = getStorage()->knownDevice( nm ); + y2mil( "raid table:" << table << " name:" << nm << " skip:" << skip ); + } + if( !skip && (boost::ends_with(table,"-tpool")|| + boost::ends_with(table,"_tdata")|| + boost::ends_with(table,"_tmeta"))) + { + string nm = table.substr( 0, table.size()-6 ); + skip = find( lvm_pools.begin(), lvm_pools.end(), nm )!=lvm_pools.end(); + y2mil( "pool table:" << table << " name:" << nm << " skip:" << skip ); + } + if( !skip ) + { + skip = find( lvm_pools.begin(), lvm_pools.end(), table )!=lvm_pools.end(); + y2mil( "pool table:" << table << " skip:" << skip ); + } if( !skip && (boost::ends_with(table,"-real")|| boost::ends_with(table,"-cow"))) { - static Regex delim( "[^-]-[^-]" ); string on = table; if( boost::ends_with(on,"-real")) on.erase( on.size()-5 ); if( boost::ends_with(tmp,"-cow")) on.erase( on.size()-4 ); - if( delim.match( on ) ) - { - on[delim.so(0)+1] = '/'; - boost::replace_all(on,"--","-"); - on = "/dev/" + on; - skip = getStorage()->knownDevice( on ); - y2mil( "devname:" << on << " skip:" << skip ); - } + on = Dm::lvmTableToDev( on ); + skip = getStorage()->knownDevice( on ); + y2mil( "snap devname:" << on << " skip:" << skip ); } if (!skip && m->sizeK()>0 && !only_crypt ) addDm( m ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/storage/LvmVg.cc new/libstorage-2.22.7/storage/LvmVg.cc --- old/libstorage-2.22.6/storage/LvmVg.cc 2012-06-14 11:03:35.000000000 +0200 +++ new/libstorage-2.22.7/storage/LvmVg.cc 2012-06-26 17:46:39.000000000 +0200 @@ -772,16 +772,18 @@ unsigned long num_le = 0; unsigned long num_cow_le = 0; bool readOnly = false; + bool pool = false; while( line.find( "Physical volume" )==string::npos && i<cnt ) { line.erase( 0, line.find_first_not_of( app_ws )); if( line.find( "LV Name" ) == 0 ) { - if( !vname.empty() ) + if( !vname.empty() && !pool ) { addLv(origin.empty() ? num_le : num_cow_le, vname, origin, uuid, status, allocation, readOnly); } + pool = false; vname = extractNthWord( 2, line ); if( (pos=vname.rfind( "/" ))!=string::npos ) vname.erase( 0, pos+1 ); @@ -820,9 +822,13 @@ { uuid = extractNthWord( 2, line ); } + else if( line.find( "LV Pool metadata" ) == 0 ) + { + pool = true; + } line = c.getLine( i++ ); } - if( !vname.empty() ) + if( !vname.empty() && !pool ) { addLv(origin.empty() ? num_le : num_cow_le, vname, origin, uuid, status, allocation, readOnly); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/storage/MdCo.cc new/libstorage-2.22.7/storage/MdCo.cc --- old/libstorage-2.22.6/storage/MdCo.cc 2012-06-14 11:03:35.000000000 +0200 +++ new/libstorage-2.22.7/storage/MdCo.cc 2012-06-21 19:04:21.000000000 +0200 @@ -279,6 +279,56 @@ } int +MdCo::updateMd(unsigned num, const list<string>& devs, const list<string>& spares) + { + int ret = 0; + y2mil("num:" << num << " devs:" << devs << " spares:" << spares); + MdIter i; + if( readonly() ) + { + ret = MD_CHANGE_READONLY; + } + if( ret==0 ) + { + if( !findMd( num, i )) + ret = MD_UNKNOWN_NUMBER; + } + if( ret==0 && !i->created() ) + { + ret = MD_NO_RESIZE_ON_DISK; + } + if( ret==0 ) + { + list<string> ls = i->getDevs(); + for( list<string>::const_iterator it=ls.begin(); it!=ls.end(); ++it ) + if ((ret = i->removeDevice(*it)) != 0) + break; + } + if( ret==0 ) + { + ret = checkUse(devs, spares); + } + if( ret==0 ) + { + for (list<string>::const_iterator it = devs.begin(); it != devs.end(); ++it) + if ((ret = i->addDevice(*it)) != 0) + break; + } + if( ret==0 ) + { + for (list<string>::const_iterator it = spares.begin(); it != spares.end(); ++it) + if ((ret = i->addDevice(*it, true)) != 0) + break; + } + if( ret==0 && !getStorage()->isDisk(dev) ) + { + getStorage()->changeFormatVolume( dev, false, FSNONE ); + } + y2mil("ret:" << ret); + return( ret ); + } + +int MdCo::shrinkMd(unsigned num, const list<string>& devs, const list<string>& spares) { int ret = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/storage/MdCo.h new/libstorage-2.22.7/storage/MdCo.h --- old/libstorage-2.22.6/storage/MdCo.h 2012-06-14 11:03:35.000000000 +0200 +++ new/libstorage-2.22.7/storage/MdCo.h 2012-06-21 18:53:24.000000000 +0200 @@ -48,6 +48,7 @@ int createMd(unsigned num, MdType type, const list<string>& devs, const list<string>& spares); int removeMd( unsigned num, bool destroySb=true ); int extendMd(unsigned num, const list<string>& devs, const list<string>& spares); + int updateMd(unsigned num, const list<string>& devs, const list<string>& spares); int shrinkMd(unsigned num, const list<string>& devs, const list<string>& spares); int changeMdType( unsigned num, storage::MdType ptype ); int changeMdChunk( unsigned num, unsigned long chunk ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/storage/Storage.cc new/libstorage-2.22.7/storage/Storage.cc --- old/libstorage-2.22.6/storage/Storage.cc 2012-06-19 12:04:13.000000000 +0200 +++ new/libstorage-2.22.7/storage/Storage.cc 2012-06-21 18:52:59.000000000 +0200 @@ -3931,6 +3931,36 @@ return( ret ); } +int Storage::updateMd(const string& name, const list<string>& devs, const list<string>& spares) + { + int ret = 0; + assertInit(); + y2mil("name:" << name << " devs:" << devs << " spares:" << spares); + if (readonly()) + { + ret = STORAGE_CHANGE_READONLY; + } + unsigned num = 0; + if( ret==0 && !Md::mdStringNum( name, num )) + { + ret = STORAGE_MD_INVALID_NAME; + } + if( ret==0 ) + { + MdCo *md = NULL; + if( haveMd(md) ) + ret = md->updateMd(num, normalizeDevices(devs), normalizeDevices(spares)); + else + ret = STORAGE_MD_NOT_FOUND; + } + if( ret==0 ) + { + ret = checkCache(); + } + y2mil("ret:" << ret); + return( ret ); + } + int Storage::shrinkMd(const string& name, const list<string>& devs, const list<string>& spares) { int ret = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/storage/Storage.h new/libstorage-2.22.7/storage/Storage.h --- old/libstorage-2.22.6/storage/Storage.h 2012-06-19 11:07:17.000000000 +0200 +++ new/libstorage-2.22.7/storage/Storage.h 2012-06-21 18:52:10.000000000 +0200 @@ -513,6 +513,7 @@ string& device); int removeMd( const string& name, bool destroySb=true ); int extendMd(const string& name, const list<string>& devs, const list<string>& spares); + int updateMd(const string& name, const list<string>& devs, const list<string>& spares); int shrinkMd(const string& name, const list<string>& devs, const list<string>& spares); int changeMdType( const string& name, storage::MdType rtype ); int changeMdChunk( const string& name, unsigned long chunk ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/storage/StorageDefines.h new/libstorage-2.22.7/storage/StorageDefines.h --- old/libstorage-2.22.6/storage/StorageDefines.h 2012-06-19 11:07:17.000000000 +0200 +++ new/libstorage-2.22.7/storage/StorageDefines.h 2012-06-19 12:37:19.000000000 +0200 @@ -82,7 +82,6 @@ #define UDEVADMBIN "/sbin/udevadm" #define MODPROBEBIN "/sbin/modprobe" -#define PSBIN "/bin/ps" #define GREPBIN "/usr/bin/grep" #define PORTMAPBIN "/sbin/portmap" #define RPCBINDBIN "/sbin/rpcbind" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libstorage-2.22.6/storage/StorageInterface.h new/libstorage-2.22.7/storage/StorageInterface.h --- old/libstorage-2.22.6/storage/StorageInterface.h 2012-06-14 11:03:35.000000000 +0200 +++ new/libstorage-2.22.7/storage/StorageInterface.h 2012-06-21 18:51:23.000000000 +0200 @@ -2070,6 +2070,18 @@ const list<string>& spares) = 0; /** + * Update all partitions of a raid device. + * This can only be done before the raid is created on disk. + * + * @param name name of software raid device (e.g. /dev/md0) + * @param devices list with physical devices to create the raid with + * @param spares list with spare physical devices to create the raid with + * @return zero if all is ok, a negative number to indicate an error + */ + virtual int updateMd(const string& name, const list<string>& devices, + const list<string>& spares) = 0; + + /** * Remove a partition from a raid device. * This can only be done before the raid is created on disk. * @@ -2741,7 +2753,7 @@ */ struct Environment { - Environment(bool readonly, string logdr="/var/log/YaST2") : readonly(readonly), testmode(false), autodetect(true), + Environment(bool readonly, const string& logdr="/var/log/YaST2") : readonly(readonly), testmode(false), autodetect(true), instsys(false), logdir(logdr), testdir("tmp") { storage::initDefaultLogger( logdir ); -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
