Mercurial > public > mercurial-scm > hg-stable
changeset 53033:7a4772e92f23 stable
procutil: fix passing of stdin_bytes to background command
When the command where run in the background, the std was closed. So we have to
so do some file description juggling to make sure it is passed down.
This was affecting automatic clone bundle generation and associated test was
added.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 06 Mar 2025 12:23:27 +0100 |
parents | c3e450bfdf34 |
children | 771706c5acfb |
files | hgext/clonebundles.py mercurial/configitems.toml mercurial/utils/procutil.py tests/test-clonebundles-autogen.t |
diffstat | 4 files changed, 64 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/clonebundles.py Thu Mar 06 10:15:00 2025 +0100 +++ b/hgext/clonebundles.py Thu Mar 06 12:23:27 2025 +0100 @@ -1029,8 +1029,10 @@ details about how to configure this feature. """ debug = repo.ui.configbool(b'devel', b'debug.clonebundles') + op_id = repo.ui.config(b'devel', b'clonebundles.override-operation-id') bundles = read_auto_gen(repo) - op_id = b"%d_acbr" % os.getpid() + if op_id is None: + op_id = b"%d_acbr" % os.getpid() create, delete = auto_bundle_needed_actions(repo, bundles, op_id) # if some bundles are scheduled for creation in the background, they will
--- a/mercurial/configitems.toml Thu Mar 06 10:15:00 2025 +0100 +++ b/mercurial/configitems.toml Thu Mar 06 12:23:27 2025 +0100 @@ -465,6 +465,15 @@ [[items]] section = "devel" +name = "clonebundles.override-operation-id" +documentation = """ +override the operation id used to produce unique filename at generation time. + +Useful to stabilize some filename in the tests. +""" + +[[items]] +section = "devel" name = "check-locks" default = false
--- a/mercurial/utils/procutil.py Thu Mar 06 10:15:00 2025 +0100 +++ b/mercurial/utils/procutil.py Thu Mar 06 12:23:27 2025 +0100 @@ -743,7 +743,7 @@ script = b' '.join(shellquote(x) for x in cmd) if record_wait is None: # double-fork to completely detach from the parent process - script = b'( %s ) &' % script + script = b'( ( %s ) <&3 3<&- &) 3<&0' % script start_new_session = True else: start_new_session = False
--- a/tests/test-clonebundles-autogen.t Thu Mar 06 10:15:00 2025 +0100 +++ b/tests/test-clonebundles-autogen.t Thu Mar 06 12:23:27 2025 +0100 @@ -411,12 +411,61 @@ full-bzip2-v2-11_revs-4226b1cd5fda_tip-*_acbr.hg (glob) $ ls -1 ../server/.hg/tmp-bundles +background generation without debug +----------------------------------- + +The debug option make the command wait for background process and change the +way stdin is accessible to the script. So we also test this variant. + +Gather the name of the expected bundle + + $ v1_file=$TESTTMP/final-upload/full-bzip2-v1-11_revs-4226b1cd5fda_tip-background_testing.hg + $ v2_file=$TESTTMP/final-upload/full-bzip2-v2-11_revs-4226b1cd5fda_tip-background_testing.hg + +cleanup things + + + $ hg -R ../server/ admin::clone-bundles-clear + clone-bundles: deleting bundle full-bzip2-v1-11_revs-4226b1cd5fda_tip-*_acbr.hg (glob) + clone-bundles: deleting bundle full-bzip2-v2-11_revs-4226b1cd5fda_tip-*_acbr.hg (glob) +(also delete the manifest to be sure) + $ rm ../server/.hg/clonebundles.manifest + +Nothing should remain + + $ cat ../server/.hg/clonebundles.auto-gen + $ ls -1 ../final-upload + $ ls -1 ../server/.hg/tmp-bundles + +Start a process in the background without the debug option + + $ hg -R ../server/ admin::clone-bundles-refresh --background \ + > --config devel.debug.clonebundles=no \ + > --config devel.clonebundles.override-operation-id=background_testing + + $ $RUNTESTDIR/testlib/wait-on-file 30 $v1_file + $ $RUNTESTDIR/testlib/wait-on-file 30 $v2_file + +We should have bundle now + + $ cat ../server/.hg/clonebundles.manifest + file:/*/$TESTTMP/final-upload/full-bzip2-v1-11_revs-4226b1cd5fda_tip-background_testing.hg BUNDLESPEC=bzip2-v1 (glob) + file:/*/$TESTTMP/final-upload/full-bzip2-v2-11_revs-4226b1cd5fda_tip-background_testing.hg BUNDLESPEC=bzip2-v2 (glob) + $ ls -1 ../final-upload + full-bzip2-v1-11_revs-4226b1cd5fda_tip-background_testing.hg + full-bzip2-v2-11_revs-4226b1cd5fda_tip-background_testing.hg + $ ls -1 ../server/.hg/tmp-bundles + + + + + Test HTTP URL ========================= $ hg -R ../server/ admin::clone-bundles-clear - clone-bundles: deleting bundle full-bzip2-v1-11_revs-4226b1cd5fda_tip-*_acbr.hg (glob) - clone-bundles: deleting bundle full-bzip2-v2-11_revs-4226b1cd5fda_tip-*_acbr.hg (glob) + clone-bundles: deleting bundle full-bzip2-v1-11_revs-4226b1cd5fda_tip-*.hg (glob) + clone-bundles: deleting bundle full-bzip2-v2-11_revs-4226b1cd5fda_tip-*.hg (glob) $ cat >> ../server/.hg/hgrc << EOF > [clone-bundles]