Mercurial > public > mercurial-scm > hg
comparison mercurial/cmdutil.py @ 19944:b7f76db06dc0 stable
cmdutil: fix makefileobj not to clobber default modemap dict
Problem occurs if "hg cat -o" is invoked more than once in the same process.
The output of "hg cat" will be appended because of modemap[fn] = 'ab'.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 22 Oct 2013 23:38:58 +0900 |
parents | df91e2df6ba3 |
children | f962870712da 64b4f0cd7336 |
comparison
equal
deleted
inserted
replaced
19943:4de116871044 | 19944:b7f76db06dc0 |
---|---|
168 except KeyError, inst: | 168 except KeyError, inst: |
169 raise util.Abort(_("invalid format spec '%%%s' in output filename") % | 169 raise util.Abort(_("invalid format spec '%%%s' in output filename") % |
170 inst.args[0]) | 170 inst.args[0]) |
171 | 171 |
172 def makefileobj(repo, pat, node=None, desc=None, total=None, | 172 def makefileobj(repo, pat, node=None, desc=None, total=None, |
173 seqno=None, revwidth=None, mode='wb', modemap={}, | 173 seqno=None, revwidth=None, mode='wb', modemap=None, |
174 pathname=None): | 174 pathname=None): |
175 | 175 |
176 writable = mode not in ('r', 'rb') | 176 writable = mode not in ('r', 'rb') |
177 | 177 |
178 if not pat or pat == '-': | 178 if not pat or pat == '-': |
196 if util.safehasattr(pat, 'write') and writable: | 196 if util.safehasattr(pat, 'write') and writable: |
197 return pat | 197 return pat |
198 if util.safehasattr(pat, 'read') and 'r' in mode: | 198 if util.safehasattr(pat, 'read') and 'r' in mode: |
199 return pat | 199 return pat |
200 fn = makefilename(repo, pat, node, desc, total, seqno, revwidth, pathname) | 200 fn = makefilename(repo, pat, node, desc, total, seqno, revwidth, pathname) |
201 mode = modemap.get(fn, mode) | 201 if modemap is not None: |
202 if mode == 'wb': | 202 mode = modemap.get(fn, mode) |
203 modemap[fn] = 'ab' | 203 if mode == 'wb': |
204 modemap[fn] = 'ab' | |
204 return open(fn, mode) | 205 return open(fn, mode) |
205 | 206 |
206 def openrevlog(repo, cmd, file_, opts): | 207 def openrevlog(repo, cmd, file_, opts): |
207 """opens the changelog, manifest, a filelog or a given revlog""" | 208 """opens the changelog, manifest, a filelog or a given revlog""" |
208 cl = opts['changelog'] | 209 cl = opts['changelog'] |