http://code.google.com/p/boto
- paramiko, SSH2 protocol for python (for sftp storage)
http://www.lag.net/paramiko/
+ - Boost (smart_ptr)
Building should be a simple matter of running "make". This will produce
an executable called "cumulus".
--- /dev/null
+/* Cumulus: Efficient Filesystem Backup to the Cloud
+ * Copyright (C) 2013 The Cumulus Developers
+ * See the AUTHORS file for a list of contributors.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/* Header file with common definitions needed for cumulus. */
+
+#ifndef CUMULUS_CUMULUS_H__
+#define CUMULUS_CUMULUS_H__
+
+/* All Boost includes are grouped here, so we can more easily switch to other
+ * implementations in the future. */
+#include <boost/scoped_ptr.hpp>
+
+using boost::scoped_ptr;
+
+#endif // CUMULUS_CUMULUS_H__
#include <string>
#include <vector>
+#include "cumulus.h"
#include "exclude.h"
#include "hash.h"
#include "localdb.h"
/* If the file is new or changed, we must read in the contents a block at a
* time. */
if (!cached) {
- Hash *hash = Hash::New();
+ scoped_ptr<Hash> file_hash(Hash::New());
Subfile subfile(db);
subfile.load_old_blocks(old_blocks);
break;
}
- hash->update(block_buf, bytes);
+ file_hash->update(block_buf, bytes);
// Sparse file processing: if we read a block of all zeroes, encode
// that explicitly.
double block_age = 0.0;
ObjectReference ref;
- Hash *hash = Hash::New();
- hash->update(block_buf, bytes);
- string block_csum = hash->digest_str();
- delete hash;
+ scoped_ptr<Hash> block_hash(Hash::New());
+ block_hash->update(block_buf, bytes);
+ string block_csum = block_hash->digest_str();
if (all_zero) {
ref = ObjectReference(ObjectReference::REF_ZERO);
status = "old";
}
- file_info["checksum"] = hash->digest_str();
- delete hash;
+ file_info["checksum"] = file_hash->digest_str();
}
// Sanity check: if we are rebuilding the statcache, but the file looks