[PATCH] import: report directory-relative paths in error messages (issue5224)

liscju piotr.listkiewicz at gmail.com
Thu Sep 1 14:18:49 UTC 2016


# HG changeset patch
# User liscju <piotr.listkiewicz at gmail.com>
# Date 1472208500 -7200
#      Fri Aug 26 12:48:20 2016 +0200
# Node ID 6437b071045756ba8b76c90ece76df83afc52989
# Parent  b1809f5d7630a3fff0fa715bbd30dba0f07672a8
import: report directory-relative paths in error messages (issue5224)

Import uses paths relative to the root of the repository, so when
user imports patch with paths relative to the current working directory
import aborts with 'unable to find file for patching'.

This patch improves this situation by warning the user that paths are
relative to the root of repository when the path exists from
current working directory.

diff --git a/mercurial/patch.py b/mercurial/patch.py
--- a/mercurial/patch.py
+++ b/mercurial/patch.py
@@ -669,6 +669,11 @@ class patchfile(object):
                 self.mode = (False, False)
         if self.missing:
             self.ui.warn(_("unable to find '%s' for patching\n") % self.fname)
+            wvfs = backend.repo.wvfs
+            if wvfs.exists(wvfs.reljoin(backend.repo.getcwd(), self.fname)):
+                self.ui.warn(_("Note that paths are relative to the root "
+                               "of repository, use --prefix option to "
+                               "change it\n"))
 
         self.hash = {}
         self.dirty = 0
diff --git a/tests/test-import.t b/tests/test-import.t
--- a/tests/test-import.t
+++ b/tests/test-import.t
@@ -1764,3 +1764,32 @@ Importing some extra header
   $ hg log --debug -r . | grep extra
   extra:       branch=default
   extra:       foo=bar
+
+Warn the user that paths are relative to the root of
+repository when the paths exist from current working
+directory
+
+  $ mkdir filedir
+  $ echo "file1" >> filedir/file1
+  $ hg add filedir/file1
+  $ hg commit -m "file1"
+  $ cd filedir
+  $ hg import -p 2 - <<EOF
+  > # HG changeset patch
+  > # User test
+  > # Date 0 0
+  > file2
+  > 
+  > diff --git a/filedir/file1 b/filedir/file1
+  > --- a/filedir/file1
+  > +++ b/filedir/file1
+  > @@ -1,1 +1,2 @@
+  >  file1
+  > +file2
+  > EOF
+  applying patch from stdin
+  unable to find 'file1' for patching
+  Note that paths are relative to the root of repository, use --prefix option to change it
+  1 out of 1 hunks FAILED -- saving rejects to file file1.rej
+  abort: patch failed to apply
+  [255]


More information about the Mercurial-devel mailing list