mercurial/commands.py
changeset 5310 ba3dc7883968
parent 5300 81575b7b505e
child 5321 599f3a690d8f
equal deleted inserted replaced
5309:e21644bbf01e 5310:ba3dc7883968
   861         ui.write(_(" (templates seem to have been installed incorrectly)\n"))
   861         ui.write(_(" (templates seem to have been installed incorrectly)\n"))
   862         problems += 1
   862         problems += 1
   863 
   863 
   864     # patch
   864     # patch
   865     ui.status(_("Checking patch...\n"))
   865     ui.status(_("Checking patch...\n"))
   866     patcher = ui.config('ui', 'patch')
   866     patchproblems = 0
   867     patcher = ((patcher and util.find_exe(patcher)) or
   867     a = "1\n2\n3\n4\n"
   868                util.find_exe('gpatch') or
   868     b = "1\n2\n3\ninsert\n4\n"
   869                util.find_exe('patch'))
   869     fa = writetemp(a)
   870     if not patcher:
   870     d = mdiff.unidiff(a, None, b, None, os.path.basename(fa))
   871         ui.write(_(" Can't find patch or gpatch in PATH\n"))
   871     fd = writetemp(d)
   872         ui.write(_(" (specify a patch utility in your .hgrc file)\n"))
   872 
   873         problems += 1
   873     files = {}
       
   874     try:
       
   875         patch.patch(fd, ui, cwd=os.path.dirname(fa), files=files)
       
   876     except util.Abort, e:
       
   877         ui.write(_(" patch call failed:\n"))
       
   878         ui.write(" " + str(e) + "\n")
       
   879         patchproblems += 1
   874     else:
   880     else:
   875         # actually attempt a patch here
   881         if list(files) != [os.path.basename(fa)]:
   876         a = "1\n2\n3\n4\n"
   882             ui.write(_(" unexpected patch output!\n"))
   877         b = "1\n2\n3\ninsert\n4\n"
   883             patchproblems += 1
   878         fa = writetemp(a)
   884         a = file(fa).read()
   879         d = mdiff.unidiff(a, None, b, None, os.path.basename(fa))
   885         if a != b:
   880         fd = writetemp(d)
   886             ui.write(_(" patch test failed!\n"))
   881 
   887             patchproblems += 1
   882         files = {}
   888 
   883         try:
   889     if patchproblems:
   884             patch.patch(fd, ui, cwd=os.path.dirname(fa), files=files)
   890         if ui.config('ui', 'patch'):
   885         except util.Abort, e:
   891             ui.write(_(" (Current patch tool may be incompatible with patch,"
   886             ui.write(_(" patch call failed:\n"))
   892                        " or misconfigured. Please check your .hgrc file)\n"))
   887             ui.write(" " + str(e) + "\n")
       
   888             problems += 1
       
   889         else:
   893         else:
   890             if list(files) != [os.path.basename(fa)]:
   894             ui.write(_(" Internal patcher failure, please report this error" 
   891                 ui.write(_(" unexpected patch output!"))
   895                        " to http://www.selenic.com/mercurial/bts\n"))
   892                 ui.write(_(" (you may have an incompatible version of patch)\n"))
   896     problems += patchproblems
   893                 problems += 1
   897 
   894             a = file(fa).read()
   898     os.unlink(fa)
   895             if a != b:
   899     os.unlink(fd)
   896                 ui.write(_(" patch test failed!"))
       
   897                 ui.write(_(" (you may have an incompatible version of patch)\n"))
       
   898                 problems += 1
       
   899 
       
   900         os.unlink(fa)
       
   901         os.unlink(fd)
       
   902 
   900 
   903     # merge helper
   901     # merge helper
   904     ui.status(_("Checking merge helper...\n"))
   902     ui.status(_("Checking merge helper...\n"))
   905     cmd = (os.environ.get("HGMERGE") or ui.config("ui", "merge")
   903     cmd = (os.environ.get("HGMERGE") or ui.config("ui", "merge")
   906            or "hgmerge")
   904            or "hgmerge")