Mercurial > hg
view contrib/editmerge @ 45001:a25343d16ebe
compat: initialize LC_CTYPE locale on all Python versions and platforms
Previously, the LC_CTYPE locale was not initialized according to user settings
on all Python versions (e.g. never on Python 2) and platforms (e.g. not on
some Python < 3.8 on Windows).
This broke e.g. non-ASCII filenames passed to the Subversion bindings on Python
2, resulting in error messages like "file:///tmp/a%C3%A4 does not look like a
Subversion repository to libsvn version 1.14.0".
The following command could be used to test this functionality. Adding it to the
test suite would be pointless, as the locale is always set to "C" during test
runs.
@command(b'check_initial_codeset', norepo=True)
def check_initial_codeset(ui):
codeset1 = locale.nl_langinfo(locale.CODESET)
locale.setlocale(locale.LC_ALL, '')
codeset2 = locale.nl_langinfo(locale.CODESET)
assert codeset1 == codeset2
author | Manuel Jacob <me@manueljacob.de> |
---|---|
date | Fri, 26 Jun 2020 04:07:50 +0200 |
parents | 612502900a2d |
children |
line wrap: on
line source
#!/usr/bin/env bash # A simple script for opening merge conflicts in the editor. # Use the following Mercurial settings to enable it. # # [ui] # merge = editmerge # # [merge-tools] # editmerge.args=$output # editmerge.check=changed # editmerge.premerge=keep FILE="$1" getlines() { grep -n "^<<<<<<" "$FILE" | cut -f1 -d: } # editor preference loosely based on https://mercurial-scm.org/wiki/editor # hg showconfig is at the bottom though, since it's slow to run (0.15 seconds) ED="$HGEDITOR" if [ "$ED" = "" ] ; then ED="$VISUAL" fi if [ "$ED" = "" ] ; then ED="$EDITOR" fi if [ "$ED" = "" ] ; then ED="$(hg showconfig ui.editor)" fi if [ "$ED" = "" ] ; then echo "merge failed - unable to find editor" exit 1 fi if [ "$ED" = "emacs" ] || [ "$ED" = "nano" ] || [ "$ED" = "vim" ] ; then FIRSTLINE="$(getlines | head -n 1)" PREVIOUSLINE="" # open the editor to the first conflict until there are no more # or the user stops editing the file while [ ! "$FIRSTLINE" = "" ] && [ ! "$FIRSTLINE" = "$PREVIOUSLINE" ] ; do $ED "+$FIRSTLINE" "$FILE" PREVIOUSLINE="$FIRSTLINE" FIRSTLINE="$(getlines | head -n 1)" done else $ED "$FILE" fi # get the line numbers of the remaining conflicts CONFLICTS="$(getlines | sed ':a;N;$!ba;s/\n/, /g')" if [ ! "$CONFLICTS" = "" ] ; then echo "merge failed - resolve the conflicts (line $CONFLICTS) then use 'hg resolve --mark'" exit 1 fi exit 0