# HG changeset patch # User Vadim Gelfer # Date 1150928106 25200 # Node ID 0f7e4a39d9afa59531aca8dfe030d60d806844dc # Parent 7a77934ece466cc4680b7dc83cb2a605ede44a8e archive: make "hg archive -t XXX -" to write to stdout diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -780,12 +780,19 @@ def archive(ui, repo, dest, **opts): 'specific revision')) dest = make_filename(repo, repo.changelog, dest, node) - prefix = make_filename(repo, repo.changelog, opts['prefix'], node) if os.path.realpath(dest) == repo.root: raise util.Abort(_('repository root cannot be destination')) dummy, matchfn, dummy = matchpats(repo, [], opts) - archival.archive(repo, dest, node, opts.get('type') or 'files', - not opts['no_decode'], matchfn, prefix) + kind = opts.get('type') or 'files' + prefix = opts['prefix'] + if dest == '-': + if kind == 'files': + raise util.Abort(_('cannot archive plain files to stdout')) + dest = sys.stdout + if not prefix: prefix = os.path.basename(repo.root) + '-%h' + prefix = make_filename(repo, repo.changelog, prefix, node) + archival.archive(repo, dest, node, kind, not opts['no_decode'], + matchfn, prefix) def backout(ui, repo, rev, **opts): '''reverse effect of earlier changeset diff --git a/tests/test-archive b/tests/test-archive --- a/tests/test-archive +++ b/tests/test-archive @@ -51,3 +51,5 @@ hg archive -t zip -p very/../bad test.zi hg archive -t zip -r 2 test.zip unzip -t test.zip + +hg archive -t tar - | tar tf - | sed "s/$QTIP/TIP/" diff --git a/tests/test-archive.out b/tests/test-archive.out --- a/tests/test-archive.out +++ b/tests/test-archive.out @@ -36,3 +36,7 @@ Archive: test.zip testing: test/baz/bletch OK testing: test/foo OK No errors detected in compressed data of test.zip. +test-TIP/.hg_archival.txt +test-TIP/bar +test-TIP/baz/bletch +test-TIP/foo