D1332: cmdutil: create dirs for templated cat file output
ryanmce (Ryan McElroy)
phabricator at mercurial-scm.org
Tue Nov 7 21:49:31 UTC 2017
ryanmce created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
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.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D1332
AFFECTED FILES
mercurial/cmdutil.py
tests/test-cat.t
CHANGE DETAILS
diff --git a/tests/test-cat.t b/tests/test-cat.t
--- a/tests/test-cat.t
+++ b/tests/test-cat.t
@@ -126,7 +126,6 @@
$ echo a > foo/a
$ hg add foo/a
$ hg commit -qm "add foo/a"
- $ mkdir output
$ hg cat --output "output/%p" foo/a
- abort: No such file or directory: output/foo/a
- [255]
+ $ cat output/foo/a
+ a
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -3029,6 +3029,11 @@
if fntemplate:
filename = makefilename(repo, fntemplate, ctx.node(),
pathname=os.path.join(prefix, path))
+ # attempt to create the directory if it does not already exist
+ try:
+ os.makedirs(os.path.dirname(filename))
+ except OSError:
+ pass
with formatter.maybereopen(basefm, filename, opts) as fm:
data = ctx[path].data()
if opts.get('decode'):
To: ryanmce, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list