Mercurial > public > mercurial-scm > hg
comparison mercurial/changelog.py @ 14379:bd23d5f28bbb stable
changelog: convert user and desc from local encoding early
Failing to do so makes it impossible to use the memctx API to create a
changeset with a commit message or username outside of the current
encoding.encoding setting.
author | Martin Geisler <mg@aragost.com> |
---|---|
date | Thu, 19 May 2011 18:09:25 +0200 |
parents | 41d0ed2c79df |
children | 10546bb7d201 |
comparison
equal
deleted
inserted
replaced
14360:ab687820c4cc | 14379:bd23d5f28bbb |
---|---|
197 files = l[3:] | 197 files = l[3:] |
198 return (manifest, user, (time, timezone), files, desc, extra) | 198 return (manifest, user, (time, timezone), files, desc, extra) |
199 | 199 |
200 def add(self, manifest, files, desc, transaction, p1, p2, | 200 def add(self, manifest, files, desc, transaction, p1, p2, |
201 user, date=None, extra=None): | 201 user, date=None, extra=None): |
202 # Convert to UTF-8 encoded bytestrings as the very first | |
203 # thing: calling any method on a localstr object will turn it | |
204 # into a str object and the cached UTF-8 string is thus lost. | |
205 user, desc = encoding.fromlocal(user), encoding.fromlocal(desc) | |
206 | |
202 user = user.strip() | 207 user = user.strip() |
203 # An empty username or a username with a "\n" will make the | 208 # An empty username or a username with a "\n" will make the |
204 # revision text contain two "\n\n" sequences -> corrupt | 209 # revision text contain two "\n\n" sequences -> corrupt |
205 # repository since read cannot unpack the revision. | 210 # repository since read cannot unpack the revision. |
206 if not user: | 211 if not user: |
209 raise error.RevlogError(_("username %s contains a newline") | 214 raise error.RevlogError(_("username %s contains a newline") |
210 % repr(user)) | 215 % repr(user)) |
211 | 216 |
212 # strip trailing whitespace and leading and trailing empty lines | 217 # strip trailing whitespace and leading and trailing empty lines |
213 desc = '\n'.join([l.rstrip() for l in desc.splitlines()]).strip('\n') | 218 desc = '\n'.join([l.rstrip() for l in desc.splitlines()]).strip('\n') |
214 | |
215 user, desc = encoding.fromlocal(user), encoding.fromlocal(desc) | |
216 | 219 |
217 if date: | 220 if date: |
218 parseddate = "%d %d" % util.parsedate(date) | 221 parseddate = "%d %d" % util.parsedate(date) |
219 else: | 222 else: |
220 parseddate = "%d %d" % util.makedate() | 223 parseddate = "%d %d" % util.makedate() |