3 /// Special parser class to support creation of Barry Backup files
7 Copyright (C) 2010-2012, 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());
47 catch( Barry::BackupError
& ) {
54 if( m_tar
.get() ) try {
58 catch( reuse::TarFile::TarError
&te
) {
59 throw Barry::BackupError(te
.what());
63 void Backup::ClearStats()
69 //////////////////////////////////////////////////////////////////////////////
70 // Barry::Parser overrides
72 void Backup::ParseRecord(const Barry::DBData
&data
,
73 const Barry::IConverter
*ic
)
75 m_current_dbname
= data
.GetDBName();
77 std::ostringstream oss
;
78 oss
<< std::hex
<< data
.GetUniqueId()
79 << " " << (unsigned int)data
.GetRecType();
80 m_tar_id_text
= oss
.str();
82 if( m_current_dbname
.size() == 0 )
83 throw Barry::BackupError("Backup: No database name available");
84 if( m_tar_id_text
.size() == 0 )
85 throw Barry::BackupError("Backup: No unique ID available!");
88 (const char*)data
.GetData().GetData() + data
.GetOffset(),
89 data
.GetData().GetSize() - data
.GetOffset());
92 std::string tarname
= m_current_dbname
+ "/" + m_tar_id_text
;
93 m_tar
->AppendFile(tarname
.c_str(), m_record_data
);
96 m_stats
[m_current_dbname
]++;