comparison mercurial/commands.py @ 51879:3b8d92f71d92

archive: defer opening the output until a file is matched Before, if no file is matched, an error is thrown, but the archive is created anyway. When using hgweb, an error 500 is returned as the response body already exists when the error is seen. Afterwards, the archive is created before the first match is emitted. If no match is found, no archive is created. This is more consistent behavior as an empty archive is not a representable in all output formats, e.g. tar archives.
author Joerg Sonnenberger <joerg@bec.de>
date Wed, 15 Nov 2023 22:11:34 +0100
parents 45ba8416afc4
children 607e94e01851
comparison
equal deleted inserted replaced
51878:7933bcb02bfc 51879:3b8d92f71d92
707 prefix = opts.get('prefix') 707 prefix = opts.get('prefix')
708 708
709 if dest == b'-': 709 if dest == b'-':
710 if kind == b'files': 710 if kind == b'files':
711 raise error.InputError(_(b'cannot archive plain files to stdout')) 711 raise error.InputError(_(b'cannot archive plain files to stdout'))
712 dest = cmdutil.makefileobj(ctx, dest) 712 realdest = dest
713 dest = lambda: cmdutil.makefileobj(ctx, realdest)
713 if not prefix: 714 if not prefix:
714 prefix = os.path.basename(repo.root) + b'-%h' 715 prefix = os.path.basename(repo.root) + b'-%h'
715 716
716 prefix = cmdutil.makefilename(ctx, prefix) 717 prefix = cmdutil.makefilename(ctx, prefix)
717 match = scmutil.match(ctx, [], pycompat.byteskwargs(opts)) 718 match = scmutil.match(ctx, [], pycompat.byteskwargs(opts))