Switch to side-by-side view

--- a/src/utils/conftree.h
+++ b/src/utils/conftree.h
@@ -107,6 +107,7 @@
     virtual list<string> getSubKeys() = 0;
     virtual list<string> getSubKeys(bool) = 0;
     virtual bool holdWrites(bool) = 0;
+    virtual bool sourceChanged() = 0;
 };
 
 /** 
@@ -139,6 +140,9 @@
     ConfSimple(int readonly = 0, bool tildexp = false);
 
     virtual ~ConfSimple() {};
+
+    /** Origin file changed. Only makes sense if we read the data from a file */
+    virtual bool sourceChanged();
 
     /** 
      * Decide if we actually rewrite the backing-store after modifying the
@@ -252,6 +256,7 @@
 private:
     // Set if we're working with a file
     string                            m_filename; 
+    time_t                            m_fmtime;
     // Configuration data submaps (one per subkey, the main data has a
     // null subkey)
     map<string, map<string, string> > m_submaps;
@@ -267,6 +272,7 @@
     // Internal version of set: no RW checking
     virtual int i_set(const string &nm, const string &val, 
 		      const string &sk, bool init = false);
+    bool i_changed(bool upd);
 };
 
 /**
@@ -364,6 +370,16 @@
 		init_from(rhs);
 	}
 	return *this;
+    }
+
+    virtual bool sourceChanged()
+    {
+	typename list<T*>::const_iterator it;
+	for (it = m_confs.begin();it != m_confs.end();it++) {
+	    if ((*it)->sourceChanged())
+		return true;
+	}
+	return false;
     }
 
     virtual int get(const string &name, string &value, const string &sk) const