mercurial/patch.py
changeset 14453 ea3d548132cc
parent 14452 ee574cfd0c32
child 14494 1ffeeb91c55d
--- a/mercurial/patch.py	Fri May 27 21:50:10 2011 +0200
+++ b/mercurial/patch.py	Fri May 27 21:50:11 2011 +0200
@@ -445,13 +445,19 @@
         self.changed = set()
         self.copied = []
 
+    def _checkknown(self, fname):
+        if self.repo.dirstate[fname] == '?' and self.exists(fname):
+            raise PatchError(_('cannot patch %s: file is not tracked') % fname)
+
     def setfile(self, fname, data, mode, copysource):
+        self._checkknown(fname)
         super(workingbackend, self).setfile(fname, data, mode, copysource)
         if copysource is not None:
             self.copied.append((copysource, fname))
         self.changed.add(fname)
 
     def unlink(self, fname):
+        self._checkknown(fname)
         super(workingbackend, self).unlink(fname)
         self.removed.add(fname)
         self.changed.add(fname)