}
+ void
+ Snapper::deleteSnapshot(Snapshots::iterator snapshot)
+ {
+ assert(snapshot != snapshots.end());
+
+ snapshots.deleteSnapshot(snapshot);
+ }
+
+
void
Snapper::startBackgroundComparsion(Snapshots::const_iterator snapshot1,
Snapshots::const_iterator snapshot2)
Snapper();
~Snapper();
+ Snapshots& getSnapshots() { return snapshots; }
const Snapshots& getSnapshots() const { return snapshots; }
Snapshots::iterator createSingleSnapshot(string description);
Snapshots::iterator createPreSnapshot(string description);
Snapshots::iterator createPostSnapshot(Snapshots::const_iterator pre);
+ void deleteSnapshot(Snapshots::iterator snapshot);
+
void startBackgroundComparsion(Snapshots::const_iterator snapshot1,
Snapshots::const_iterator snapshot2);
}
+ bool
+ Snapshot::deleteFilesystemSnapshot() const
+ {
+ SystemCmd cmd(BTRFSBIN " subvolume delete /" + snapshotDir());
+ return cmd.retcode() == 0;
+ }
+
+
Snapshots::iterator
Snapshots::createSingleSnapshot(string description)
{
}
+ void
+ Snapshots::deleteSnapshot(iterator snapshot)
+ {
+ assert(!snapshot->isCurrent());
+
+ snapshot->deleteFilesystemSnapshot();
+
+ unlink((snapshot->baseDir() + "/info.xml").c_str());
+
+ list<string> tmp = glob(snapshot->baseDir() + "/filelist-*.txt", GLOB_NOSORT);
+ for (list<string>::const_iterator it = tmp.begin(); it != tmp.end(); ++it)
+ unlink(it->c_str());
+
+ rmdir(snapshot->baseDir().c_str());
+ }
+
+
struct num_is
{
num_is(unsigned int num) : num(num) {}
bool writeInfo() const;
bool createFilesystemSnapshot() const;
-
+ bool deleteFilesystemSnapshot() const;
};
iterator createPreSnapshot(string description);
iterator createPostSnapshot(const_iterator pre);
+ void deleteSnapshot(iterator snapshot);
+
unsigned int nextNumber();
bool initialized;
}
+void
+deleteSnap(const list<string>& args)
+{
+ Snapshots& snapshots = sh->getSnapshots();
+
+ list<string>::const_iterator s = args.begin();
+ while (s != args.end())
+ {
+ unsigned int number;
+ *s >> number;
+ s++;
+
+ Snapshots::iterator snapshot = snapshots.find(number);
+ if (snapshot == snapshots.end())
+ {
+ cerr << "snapshots not found" << endl;
+ exit(EXIT_FAILURE);
+ }
+
+ sh->deleteSnapshot(snapshot);
+ }
+}
+
+
void
readNums(const list<string>& args, Snapshots::const_iterator& snap1, Snapshots::const_iterator& snap2)
{
cmds["list"] = listSnap;
cmds["help"] = showHelp;
cmds["create"] = createSnap;
+ cmds["delete"] = deleteSnap;
cmds["diff"] = showDifference;
cmds["rollback"] = doRollback;
sh = createSnapper();
-
+
sh->setCompareCallback(&compare_callback_impl);
int cnt = optind;