3 /// Special parser class to support creation of Barry Backup files
7 Copyright (C) 2010, Net Direct Inc. (http://www.netdirect.ca/)
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU General Public License in the COPYING file at the
19 root directory of this project for more details.
31 Backup::Backup(const std::string
&tarpath
)
34 m_tar
.reset( new reuse::TarFile(tarpath
.c_str(), true,
35 &reuse::gztar_ops_nonthread
, true) );
37 catch( reuse::TarFile::TarError
&te
) {
38 throw Barry::BackupError(te
.what());
44 std::cout
<< "Closing Backup parser" << std::endl
;
48 catch( Barry::BackupError
& ) {
55 if( m_tar
.get() ) try {
59 catch( reuse::TarFile::TarError
&te
) {
60 throw Barry::BackupError(te
.what());
65 //////////////////////////////////////////////////////////////////////////////
66 // Barry::Parser overrides
68 void Backup::ParseRecord(const Barry::DBData
&data
,
69 const Barry::IConverter
*ic
)
71 m_current_dbname
= data
.GetDBName();
73 std::ostringstream oss
;
74 oss
<< std::hex
<< data
.GetUniqueId()
75 << " " << (unsigned int)data
.GetRecType();
76 m_tar_id_text
= oss
.str();
78 if( m_current_dbname
.size() == 0 )
79 throw Barry::BackupError("Backup: No database name available");
80 if( m_tar_id_text
.size() == 0 )
81 throw Barry::BackupError("Backup: No unique ID available!");
84 (const char*)data
.GetData().GetData() + data
.GetOffset(),
85 data
.GetData().GetSize() - data
.GetOffset());
88 std::string tarname
= m_current_dbname
+ "/" + m_tar_id_text
;
89 std::cout
<< "Saving: " << tarname
<< std::endl
;
90 m_tar
->AppendFile(tarname
.c_str(), m_record_data
);