diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -214,9 +214,12 @@ def make_filename(repo, pat, node, def make_file(repo, pat, node=None, total=None, seqno=None, revwidth=None, mode='wb', pathname=None): + + writable = 'w' in mode or 'a' in mode + if not pat or pat == '-': - return 'w' in mode and sys.stdout or sys.stdin - if hasattr(pat, 'write') and 'w' in mode: + return writable and sys.stdout or sys.stdin + if hasattr(pat, 'write') and writable: return pat if hasattr(pat, 'read') and 'r' in mode: return pat diff --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -1294,7 +1294,8 @@ def export(repo, revs, template='hg-%h.p if not fp: fp = cmdutil.make_file(repo, template, node, total=total, - seqno=seqno, revwidth=revwidth) + seqno=seqno, revwidth=revwidth, + mode='ab') if fp != sys.stdout and hasattr(fp, 'name'): repo.ui.note("%s\n" % fp.name) diff --git a/tests/test-export b/tests/test-export --- a/tests/test-export +++ b/tests/test-export @@ -13,3 +13,9 @@ for out in "%nof%N" "%%%H" "%b-%R" "%h" echo "# foo-$out.patch" hg export -v -o "foo-$out.patch" 2:tip done + +echo "# exporting 4 changesets to a file" +hg export -o export_internal 1 2 3 4 +grep HG export_internal | wc -l +echo "# exporting 4 changesets to a file" +hg export 1 2 3 4 | grep HG | wc -l diff --git a/tests/test-export.out b/tests/test-export.out --- a/tests/test-export.out +++ b/tests/test-export.out @@ -58,3 +58,7 @@ foo-08.patch foo-09.patch foo-10.patch foo-11.patch +# exporting 4 changesets to a file +4 +# exporting 4 changesets to a file +4