Index: vcpx/tests/config.py
===================================================================
--- vcpx/tests/config.py	(revision 521)
+++ vcpx/tests/config.py	(revision 522)
@@ -88,4 +88,5 @@
         self.assertEqual(p2.target.repository, 'svn://some.server/svn')
         self.assertEqual(len(p2.before_commit), 1)
+        self.assertEqual(p2.state_file.filename, '/tmp/test/project2.state')
         p1 = config['project1']
         self.assertEqual(p1.source.repository, 'svn://some.server/svn')
Index: vcpx/project.py
===================================================================
--- vcpx/project.py	(revision 511)
+++ vcpx/project.py	(revision 522)
@@ -76,5 +76,5 @@
 
         from os import getcwd, makedirs
-        from os.path import join, exists
+        from os.path import join, exists, expanduser
         import logging
 
@@ -88,6 +88,7 @@
         self.source = self.__loadRepository('source')
         self.target = self.__loadRepository('target')
-        self.state_file = StateFile(self.config.get(self.name, 'state-file'),
-                                    self.config)
+        sfpath = join(self.rootdir,
+                      expanduser(self.config.get(self.name, 'state-file')))
+        self.state_file = StateFile(sfpath, self.config)
 
         before = self.config.getTuple(self.name, 'before-commit')
Index: vcpx/darcs.py
===================================================================
--- vcpx/darcs.py	(revision 515)
+++ vcpx/darcs.py	(revision 523)
@@ -201,6 +201,9 @@
             revtag = changeset.revision[7:]
         else:
-            selector = '--patches'
-            revtag = escape(changeset.revision)
+            selector = '--match'
+            revtag = 'date "%s" && author "%s" && exact "%s"' % (
+                changeset.date.strftime("%a %b %d %H:%M:%S UTC %Y"),
+                changeset.author,
+                changeset.revision)
 
         cmd = [self.repository.DARCS_CMD, "pull", "--all", selector, revtag]
@@ -244,5 +247,9 @@
 
             csets = changesets_from_darcschanges(output)
-            revision = escape(csets[0].revision)
+            changeset = csets[0]
+            revision = 'date "%s" && author "%s" && exact "%s"' % (
+                changeset.date.strftime("%a %b %d %H:%M:%S UTC %Y"),
+                changeset.author,
+                changeset.revision)
         else:
             initial = False
