comparison mercurial/filemerge.py @ 42565:4764e8436b2a

filemerge: make last line of prompts <40 english chars (issue6158) I've chosen <40 as the target so that other languages that may have a 2x blowup in character count can still have a chance to fit into an 80 column screen. Previously, we would show a prompt like: ``` keep (l)ocal [dest], take (o)ther [source], or leave (u)nresolved for some/potentially/really/long/path? ``` On at least some systems, if readline was in use then the last line of the prompt would be wrapped strangely if it couldn't fit entirely on one line. This strange wrapping may be just a carriage return without a line feed, overwriting the beginning of the line; example (100 columns wide, 65 character filename, and yes there's 10 spaces on the end, I assume this is to handle the user inputting longest word we provide as an option, "unresolved"): ``` ng/dir/name/that/does/not/work/well/with/readline/file.txt? ave (u)nresolved for some/lon ``` In some cases it may partially wrap onto the next line, but still be missing earlier parts in the line, such as below (60 columns wide, 65 character filename): ``` rev], or leave (u)nresolved for some/long/dir/name/that/do s/not/work/well/with/readline/file.txt? ``` With this fix, this looks like this on a 60 column screen: ``` tool vim_with_markers (for pattern some/long/dir/name/that/d oes/not/work/well/with/readline/file.txt) can't handle binar y tool meld can't handle binary tool vim_with_markers can't handle binary tool internal:merge3 can't handle binary tool merge can't handle binary no tool found to merge some/long/dir/name/that/does/not/work /well/with/readline/file.txt file 'some/long/dir/name/that/does/not/work/well/with/readli ne/file.txt' needs to be resolved. You can keep (l)ocal [working copy], take (o)ther [merge rev ], or leave (u)nresolved. What do you want to do? ``` Differential Revision: https://phab.mercurial-scm.org/D6562
author Kyle Lippincott <spectral@google.com>
date Thu, 20 Jun 2019 11:40:47 -0700
parents a8ccd821b7d2
children 2372284d9457
comparison
equal deleted inserted replaced
42561:44e99811bea7 42565:4764e8436b2a
58 # internal tool merge types 58 # internal tool merge types
59 nomerge = internaltool.nomerge 59 nomerge = internaltool.nomerge
60 mergeonly = internaltool.mergeonly # just the full merge, no premerge 60 mergeonly = internaltool.mergeonly # just the full merge, no premerge
61 fullmerge = internaltool.fullmerge # both premerge and merge 61 fullmerge = internaltool.fullmerge # both premerge and merge
62 62
63 # IMPORTANT: keep the last line of this prompt very short ("What do you want to
64 # do?") because of issue6158, ideally to <40 English characters (to allow other
65 # languages that may take more columns to still have a chance to fit in an
66 # 80-column screen).
63 _localchangedotherdeletedmsg = _( 67 _localchangedotherdeletedmsg = _(
64 "file '%(fd)s' was deleted in other%(o)s but was modified in local%(l)s.\n" 68 "file '%(fd)s' was deleted in other%(o)s but was modified in local%(l)s.\n"
65 "What do you want to do?\n" 69 "You can use (c)hanged version, (d)elete, or leave (u)nresolved.\n"
66 "use (c)hanged version, (d)elete, or leave (u)nresolved?" 70 "What do you want to do?"
67 "$$ &Changed $$ &Delete $$ &Unresolved") 71 "$$ &Changed $$ &Delete $$ &Unresolved")
68 72
69 _otherchangedlocaldeletedmsg = _( 73 _otherchangedlocaldeletedmsg = _(
70 "file '%(fd)s' was deleted in local%(l)s but was modified in other%(o)s.\n" 74 "file '%(fd)s' was deleted in local%(l)s but was modified in other%(o)s.\n"
71 "What do you want to do?\n" 75 "You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.\n"
72 "use (c)hanged version, leave (d)eleted, or " 76 "What do you want to do?"
73 "leave (u)nresolved?"
74 "$$ &Changed $$ &Deleted $$ &Unresolved") 77 "$$ &Changed $$ &Deleted $$ &Unresolved")
75 78
76 class absentfilectx(object): 79 class absentfilectx(object):
77 """Represents a file that's ostensibly in a context but is actually not 80 """Represents a file that's ostensibly in a context but is actually not
78 present in it. 81 present in it.
297 elif fcd.isabsent(): 300 elif fcd.isabsent():
298 index = ui.promptchoice( 301 index = ui.promptchoice(
299 _otherchangedlocaldeletedmsg % prompts, 2) 302 _otherchangedlocaldeletedmsg % prompts, 2)
300 choice = ['other', 'local', 'unresolved'][index] 303 choice = ['other', 'local', 'unresolved'][index]
301 else: 304 else:
305 # IMPORTANT: keep the last line of this prompt ("What do you want to
306 # do?") very short, see comment next to _localchangedotherdeletedmsg
307 # at the top of the file for details.
302 index = ui.promptchoice( 308 index = ui.promptchoice(
303 _("keep (l)ocal%(l)s, take (o)ther%(o)s, or leave (u)nresolved" 309 _("file '%(fd)s' needs to be resolved.\n"
304 " for %(fd)s?" 310 "You can keep (l)ocal%(l)s, take (o)ther%(o)s, or leave "
311 "(u)nresolved.\n"
312 "What do you want to do?"
305 "$$ &Local $$ &Other $$ &Unresolved") % prompts, 2) 313 "$$ &Local $$ &Other $$ &Unresolved") % prompts, 2)
306 choice = ['local', 'other', 'unresolved'][index] 314 choice = ['local', 'other', 'unresolved'][index]
307 315
308 if choice == 'other': 316 if choice == 'other':
309 return _iother(repo, mynode, orig, fcd, fco, fca, toolconf, 317 return _iother(repo, mynode, orig, fcd, fco, fca, toolconf,