[PATCH] Fix issue483 - mq does not work under windows with gnu-win32 patch

Patrick Mezard pmezard at gmail.com
Thu May 10 16:00:48 CDT 2007


# HG changeset patch
# User Patrick Mezard <pmezard at gmail.com>
# Date 1178830466 -7200
# Node ID 2e0f3a96803dafabc4860556198239c5e39aa19f
# Parent  ba22e867cb23fb11f83c37705743e050afd66a6a
Fix issue483 - mq does not work under windows with gnu-win32 patch.

Look in hgrc.ui.patch for a patch command, then default to PATH. If hgrc.ui.patch is not supplied, add a --binary option under win32.

diff -r ba22e867cb23 -r 2e0f3a96803d doc/hgrc.5.txt
--- a/doc/hgrc.5.txt	Mon May 07 21:44:11 2007 +0900
+++ b/doc/hgrc.5.txt	Thu May 10 22:54:26 2007 +0200
@@ -432,6 +432,9 @@ ui::
   merge;;
     The conflict resolution program to use during a manual merge.
     Default is "hgmerge".
+  patch;;
+    command to use to apply patches. Look for 'gpatch' or 'patch' in PATH if
+    unset.
   quiet;;
     Reduce the amount of output printed.  True or False.  Default is False.
   remotecmd;;
diff -r ba22e867cb23 -r 2e0f3a96803d mercurial/commands.py
--- a/mercurial/commands.py	Mon May 07 21:44:11 2007 +0900
+++ b/mercurial/commands.py	Thu May 10 22:54:26 2007 +0200
@@ -881,8 +881,10 @@ def debuginstall(ui):
     # patch
     ui.status(_("Checking patch...\n"))
     path = os.environ.get('PATH', '')
-    patcher = util.find_in_path('gpatch', path,
-                                util.find_in_path('patch', path, None))
+    patcher = ui.config('ui', 'patch')
+    if not patcher:
+        patcher = util.find_in_path('gpatch', path,
+                                    util.find_in_path('patch', path, None))
     if not patcher:
         ui.write(_(" Can't find patch or gpatch in PATH\n"))
         ui.write(_(" (specify a patch utility in your .hgrc file)\n"))
diff -r ba22e867cb23 -r 2e0f3a96803d mercurial/patch.py
--- a/mercurial/patch.py	Mon May 07 21:44:11 2007 +0900
+++ b/mercurial/patch.py	Thu May 10 22:54:26 2007 +0200
@@ -293,9 +293,15 @@ def patch(patchname, ui, strip=1, cwd=No
         """patch and updates the files and fuzz variables"""
         fuzz = False
 
-        patcher = util.find_in_path('gpatch', os.environ.get('PATH', ''),
-                                    'patch')
         args = []
+        patcher = ui.config('ui', 'patch')
+        
+        if not patcher:
+            patcher = util.find_in_path('gpatch', os.environ.get('PATH', ''),
+                                        'patch')
+            if util.needbinarypatch():
+                args.append('--binary')
+                                    
         if cwd:
             args.append('-d %s' % util.shellquote(cwd))
         fp = os.popen('%s %s -p%d < %s' % (patcher, ' '.join(args), strip,
diff -r ba22e867cb23 -r 2e0f3a96803d mercurial/util.py
--- a/mercurial/util.py	Mon May 07 21:44:11 2007 +0900
+++ b/mercurial/util.py	Thu May 10 22:54:26 2007 +0200
@@ -793,6 +793,10 @@ _umask = os.umask(0)
 _umask = os.umask(0)
 os.umask(_umask)
 
+def needbinarypatch():
+    """return True if patches should be applied in binary mode by default."""
+    return os.name == 'nt'
+
 # Platform specific variants
 if os.name == 'nt':
     import msvcrt


More information about the Mercurial-devel mailing list