Index: vcpx/darcs.py
===================================================================
--- vcpx/darcs.py	(revision 625)
+++ vcpx/darcs.py	(revision 632)
@@ -203,5 +203,4 @@
 
         from re import escape
-        from os.path import join
 
         needspatchesopt = False
@@ -244,7 +243,8 @@
         while line:
             if line.startswith('We have conflicts in the following files:'):
-                self.log_info("Conflict after 'darcs pull': '%s'" % line)
                 files = output.readline()[:-1].split('./')[1:]
-                conflicts.extend([join(self.basedir,f) for f in files])
+                self.log_info("Conflict after 'darcs pull': '%s'" %
+                              ' '.join(files))
+                conflicts.extend(['./' + f for f in files])
             line = output.readline()
 
@@ -257,4 +257,19 @@
 
         return conflicts
+
+    def _handleConflict(self, changeset, conflicts, conflict):
+        """
+        Handle the conflict raised by the application of the upstream changeset.
+
+        Override parent behaviour: with darcs, we need to execute a revert
+        on the conflicted files, **trashing** local changes, but there should
+        be none of them in tailor context.
+        """
+
+        self.log_info("Reverting changes to '%s', to solve the conflict" %
+                      ' '.join(conflict))
+        cmd = [self.repository.DARCS_CMD, "revert", "--all"]
+        revert = ExternalCommand(cwd=self.basedir, command=cmd)
+        revert.execute(conflict)
 
     def _checkoutUpstreamRevision(self, revision):
@@ -489,6 +504,10 @@
             boring.write('$\n')
         if self.state_file.filename.startswith(self.basedir):
+            sfrelname = self.state_file.filename[len(self.basedir)+1:]
             boring.write('^')
-            boring.write(self.state_file.filename[len(self.basedir)+1:])
+            boring.write(sfrelname)
+            boring.write('$\n')
+            boring.write('^')
+            boring.write(sfrelname+'.journal')
             boring.write('$\n')
         boring.close()
Index: vcpx/target.py
===================================================================
--- vcpx/target.py	(revision 625)
+++ vcpx/target.py	(revision 632)
@@ -175,5 +175,7 @@
 
         if self.state_file.filename.startswith(self.basedir):
-            exclude.append(self.state_file.filename[len(self.basedir)+1:])
+            sfrelname = self.state_file.filename[len(self.basedir)+1:]
+            exclude.append(sfrelname)
+            exclude.append(sfrelname+'.journal')
 
         if self.logfile.startswith(self.basedir):
Index: vcpx/bzr.py
===================================================================
--- vcpx/bzr.py	(revision 625)
+++ vcpx/bzr.py	(revision 632)
@@ -121,6 +121,10 @@
             ignore.write('$\n')
         if self.state_file.filename.startswith(self.basedir):
+            sfrelname = self.state_file.filename[len(self.basedir)+1:]
             ignore.write('^')
-            ignore.write(self.state_file.filename[len(self.basedir)+1:])
+            ignore.write(sfrelname)
+            ignore.write('\n')
+            ignore.write('^')
+            ignore.write(sfrelname+'.journal')
             ignore.write('\n')
         ignore.close()
Index: vcpx/hg.py
===================================================================
--- vcpx/hg.py	(revision 625)
+++ vcpx/hg.py	(revision 632)
@@ -153,6 +153,10 @@
             ignore.write('$\n')
         if self.state_file.filename.startswith(self.basedir):
+            sfrelname = self.state_file.filename[len(self.basedir)+1:]
             ignore.write('^')
-            ignore.write(self.state_file.filename[len(self.basedir)+1:])
+            ignore.write(sfrelname)
+            ignore.write('$\n')
+            ignore.write('^')
+            ignore.write(sfrelname+'.journal')
             ignore.write('$\n')
         ignore.close()
