Mercurial > hg
comparison mercurial/cmdutil.py @ 35007:407ec7f3ff02
cmdutil: create dirs for templated cat file output
Previously, the caller was responsible for creating the directory structure of
files written out using a path template. This is onerous, especially if the
exact filenames are not known upfront, but are being accessed via a matcher.
This patch changes things so that hg will attempt to create the appropriate
directories before writing the output file.
Differential Revision: https://phab.mercurial-scm.org/D1332
author | Ryan McElroy <rmcelroy@fb.com> |
---|---|
date | Tue, 07 Nov 2017 13:48:33 -0800 |
parents | 602c168c0207 |
children | b22a0d9e0a83 |
comparison
equal
deleted
inserted
replaced
35006:8154119ed236 | 35007:407ec7f3ff02 |
---|---|
3027 def write(path): | 3027 def write(path): |
3028 filename = None | 3028 filename = None |
3029 if fntemplate: | 3029 if fntemplate: |
3030 filename = makefilename(repo, fntemplate, ctx.node(), | 3030 filename = makefilename(repo, fntemplate, ctx.node(), |
3031 pathname=os.path.join(prefix, path)) | 3031 pathname=os.path.join(prefix, path)) |
3032 # attempt to create the directory if it does not already exist | |
3033 try: | |
3034 os.makedirs(os.path.dirname(filename)) | |
3035 except OSError: | |
3036 pass | |
3032 with formatter.maybereopen(basefm, filename, opts) as fm: | 3037 with formatter.maybereopen(basefm, filename, opts) as fm: |
3033 data = ctx[path].data() | 3038 data = ctx[path].data() |
3034 if opts.get('decode'): | 3039 if opts.get('decode'): |
3035 data = repo.wwritedata(path, data) | 3040 data = repo.wwritedata(path, data) |
3036 fm.startitem() | 3041 fm.startitem() |