]> git.ipfire.org Git - thirdparty/snapper.git/commitdiff
- show absolute path in diff output
authorArvin Schnell <aschnell@suse.de>
Wed, 3 Aug 2011 12:25:22 +0000 (14:25 +0200)
committerArvin Schnell <aschnell@suse.de>
Wed, 3 Aug 2011 12:25:22 +0000 (14:25 +0200)
LIBVERSION
snapper/File.cc
snapper/File.h
tools/snapper.cc

index 9084fa2f716a7117829f3f32a5f4cef400e02903..26aaba0e86632e4d537006e45b0ec918d780b3b4 100644 (file)
@@ -1 +1 @@
-1.1.0
+1.2.0
index da205120afe0c7bbd1765807bfa51c18129e182e..1cbf0be8fd1e10f08cdd37ac281607e55f6ab16e 100644 (file)
@@ -26,6 +26,7 @@
 #include <unistd.h>
 #include <fnmatch.h>
 #include <errno.h>
+#include <boost/algorithm/string.hpp>
 
 #include "snapper/File.h"
 #include "snapper/Snapper.h"
@@ -311,6 +312,26 @@ namespace snapper
     }
 
 
+    Files::iterator
+    Files::findAbsolutePath(const string& filename)
+    {
+       if (!boost::starts_with(filename, getSnapper()->subvolumeDir()))
+           return end();
+
+       return find(string(filename, getSnapper()->subvolumeDir().size()));
+    }
+
+
+    Files::const_iterator
+    Files::findAbsolutePath(const string& filename) const
+    {
+       if (!boost::starts_with(filename, getSnapper()->subvolumeDir()))
+           return end();
+
+       return find(string(filename, getSnapper()->subvolumeDir().size()));
+    }
+
+
     unsigned int
     File::getPreToSystemStatus()
     {
index cda5da0ebac9513a1674345bac6a00af0eedf5ab..ce37c6e697ee110c4b6741521cc854f106d77cff 100644 (file)
@@ -163,6 +163,9 @@ namespace snapper
        iterator find(const string& name);
        const_iterator find(const string& name) const;
 
+       iterator findAbsolutePath(const string& name);
+       const_iterator findAbsolutePath(const string& name) const;
+
     private:
 
        void initialize();
index eea1100cd955d76510625d7578ad30a7e84469d9..2069e63138d2d1aaf1b65f57a67f34f3f0b60479 100644 (file)
@@ -568,7 +568,7 @@ command_diff()
 
     if ((opt = opts.find("file")) != opts.end())
     {
-       tmp = files.find(opt->second);
+       tmp = files.findAbsolutePath(opt->second);
        if (tmp == files.end())
        {
            cerr << sformat(_("File '%s' not included in diff."), opt->second.c_str()) << endl;
@@ -591,7 +591,8 @@ command_diff()
     if (tmp == files.end())
     {
        for (Files::const_iterator it = files.begin(); it != files.end(); ++it)
-           fprintf(file, "%s %s\n", statusToString(it->getPreToPostStatus()).c_str(), it->getName().c_str());
+           fprintf(file, "%s %s\n", statusToString(it->getPreToPostStatus()).c_str(),
+                   it->getAbsolutePath(LOC_SYSTEM).c_str());
     }
     else
     {
@@ -675,7 +676,7 @@ command_rollback()
                name.erase(0, pos + 1);
            }
 
-           Files::iterator it = files.find(name);
+           Files::iterator it = files.findAbsolutePath(name);
            if (it == files.end())
            {
                cerr << sformat(_("File '%s' not found in diff."), name.c_str()) << endl;