Skip to content

Fix the issue when var is empty but not None#4199

Merged
YvanY0 merged 1 commit intoavocado-framework:masterfrom
leidwang:issue4169
Aug 20, 2025
Merged

Fix the issue when var is empty but not None#4199
YvanY0 merged 1 commit intoavocado-framework:masterfrom
leidwang:issue4169

Conversation

@leidwang
Copy link
Copy Markdown
Contributor

@leidwang leidwang commented Jul 28, 2025

Currently if var is empty but not None it will cause findmnt cmd run into error, so update the code logic to fix this issue. Also add some log output for the exception.

ID:4169

Summary by CodeRabbit

  • Bug Fixes

    • Improved error handling and logging for mount checks, providing clearer feedback and avoiding silent failures.
    • Broader detection of shell-command errors and immediate handling to reduce unreliable behavior.
  • Behavior Changes

    • Mount option validation tightened — empty or meaningless options now produce an explicit error.
    • Mount checks prefer provided interactive sessions when available, improving reliability.

@leidwang leidwang changed the title Fix the issue when var is empty Fix the issue when var is empty but not None Jul 28, 2025
@leidwang
Copy link
Copy Markdown
Contributor Author

leidwang commented Jul 28, 2025

Hi @PaulYuuu @fbq815 Could you please help review this MR?Thanks.

Comment thread virttest/utils_disk.py Outdated
LOG.info("Output of findmnt: %s", mount_result)
except process.CmdError:
pass
except Exception as e:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

session.cmd_output_safe will not raise exception if the status is not zero, please use session.cmd instead. and here should be process.CmdError, aexpect.exceptions.ShellCmdError

Copy link
Copy Markdown
Contributor Author

@leidwang leidwang Jul 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, yes, forgot to update that, thanks!

@YvanY0
Copy link
Copy Markdown
Contributor

YvanY0 commented Jul 29, 2025

Hello @YongxueHong @qingwangrh @hellohellenmao, this is a regression from #4098, please review and verify the fix, thanks.

Comment thread virttest/utils_disk.py Outdated
except process.CmdError:
pass
except Exception as e:
LOG.info("Exception info: %s", e)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
LOG.info("Exception info: %s", e)
LOG.error("Exception info: %s", e)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, thanks @YongxueHong

Comment thread virttest/utils_disk.py Outdated
@YvanY0
Copy link
Copy Markdown
Contributor

YvanY0 commented Jul 30, 2025

@coderabbitai full review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jul 30, 2025

✅ Actions performed

Full review triggered.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jul 30, 2025

📝 Walkthrough

Walkthrough

Adds aexpect import and updates is_mount in virttest/utils_disk.py: src is now optional; mount-option filtering skips falsy values and raises on empty options; uses session.cmd(...) when session is given; broadens exception handling to catch process.CmdError and aexpect.exceptions.ShellCmdError, logging and returning False on error.

Changes

Cohort / File(s) Change Summary
is_mount function & imports
virttest/utils_disk.py
Adds aexpect import; changes is_mount signature to src=None; filters mount options by truthiness (skips falsy), raises TestError if no options remain; uses session.cmd(...) instead of session.cmd_output_safe(...) when session provided; broadens exception handling to catch process.CmdError and aexpect.exceptions.ShellCmdError, logs exceptions and returns False on error.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~15 minutes

Note

🔌 MCP (Model Context Protocol) integration is now available in Early Access!

Pro users can now connect to remote MCP servers under the Integrations page to get reviews and chat conversations that understand additional development context.


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e4b69dc and 5fe8174.

📒 Files selected for processing (1)
  • virttest/utils_disk.py (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • virttest/utils_disk.py
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Static checks

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Copy Markdown

@YongxueHong YongxueHong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.

@qingwangrh
Copy link
Copy Markdown
Contributor

LGTM

Copy link
Copy Markdown
Contributor

@fbq815 fbq815 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, details in jira ticket

@YongxueHong
Copy link
Copy Markdown

Hi @smitterl
Would you help review it from the libvirt side? I think some tp-libvirt test cases might call the related interface.
Thanks in advance.

@qingwangrh
Copy link
Copy Markdown
Contributor

change
def is_mount(src, dst=None, fstype=None, options=None, verbose=False, session=None)
to
def is_mount(src=None, dst=None, fstype=None, options=None, verbose=False, session=None)

findmnt supports finding by src or dst.
Some cases use the mount point (dst) as a search. So the src is not required.

@leidwang
Copy link
Copy Markdown
Contributor Author

change def is_mount(src, dst=None, fstype=None, options=None, verbose=False, session=None) to def is_mount(src=None, dst=None, fstype=None, options=None, verbose=False, session=None)

findmnt supports finding by src or dst. Some cases use the mount point (dst) as a search. So the src is not required.

@PaulYuuu Could you please share your thoughts about that? Thanks.

@YvanY0
Copy link
Copy Markdown
Contributor

YvanY0 commented Aug 11, 2025

change def is_mount(src, dst=None, fstype=None, options=None, verbose=False, session=None) to def is_mount(src=None, dst=None, fstype=None, options=None, verbose=False, session=None)
findmnt supports finding by src or dst. Some cases use the mount point (dst) as a search. So the src is not required.

@PaulYuuu Could you please share your thoughts about that? Thanks.

I was also mentioned this in the previous PR: #4098 (comment)

@leidwang
Copy link
Copy Markdown
Contributor Author

change def is_mount(src, dst=None, fstype=None, options=None, verbose=False, session=None) to def is_mount(src=None, dst=None, fstype=None, options=None, verbose=False, session=None)
findmnt supports finding by src or dst. Some cases use the mount point (dst) as a search. So the src is not required.

@PaulYuuu Could you please share your thoughts about that? Thanks.

I was also mentioned this in the previous PR: #4098 (comment)

Yes, but we (Yongxue, Yihuang, and Leidong) discussed this issue at a Google meeting before. I'm not sure why we decided not to change it last time, but we did discuss it.
I agree with setting a default value for src , but I just wanted to share my concerns: Is there a risk if all parameters are set to optional?

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (5)
virttest/utils_disk.py (5)

68-83: Signature made src optional and added empty-args guard — refine docstring and error message

The behavior change is correct for dst-only searches. Please tighten docs and make the error message clearer.

Apply this diff to improve clarity:

 def is_mount(src=None, dst=None, fstype=None, options=None, verbose=False, session=None):
     """
-    Check is src or dst mounted.
+    Check whether src and/or dst is mounted using findmnt.

-    :param src: source device or directory
-    :param dst: mountpoint, if None will skip to check
-    :param fstype: file system type, if None will skip to check
-    :param options: mount options should be separated by ","
-    :param session: check within the session if given
+    :param src: source device or directory; if None, skip src criterion
+    :param dst: mountpoint; if None, skip dst criterion
+    :param fstype: file system type; if None, skip fstype criterion
+    :param options: findmnt -O filter string (comma-separated)
+    :param verbose: when True, log command output and status
+    :param session: check within the given session, if provided

-    :return: True if mounted, else return False
+    :return: True if mounted, else False
     """
@@
-    if mount_opts == "":
-        raise exceptions.TestError("Mount options is empty, it is meaningless")
+    if mount_opts == "":
+        raise exceptions.TestError(
+            "No query parameters provided to findmnt; set at least one of src, dst, fstype, or options"
+        )

81-81: Quote findmnt argument values to handle whitespace and reduce shell risks

Quoting values avoids breakage on paths with spaces and reduces injection risk.

Apply this diff:

-    mount_opts = " ".join(f"{opt} {val}" for opt, val in mount_options if val)
+    mount_opts = " ".join(f"{opt} {shlex.quote(str(val))}" for opt, val in mount_options if val)

Add the missing import near the other stdlib imports:

import shlex

94-96: Exception handling broadened — add context about the command

Current logging prints only the exception string. Including the command greatly helps troubleshooting.

Apply this diff:

-    except (process.CmdError, aexpect.exceptions.ShellCmdError) as e:
-        LOG.error("Exception info: %s", e)
+    except (process.CmdError, aexpect.exceptions.ShellCmdError) as e:
+        LOG.error("Exception running '%s': %s", mount_check_cmd, e)
         return False

99-104: Logging src when it may be None

When src is None, logs show “None is mounted”. Prefer logging whichever identifier is provided.

Apply this diff:

-        if verbose:
-            LOG.info("%s is mounted", src)
+        if verbose:
+            LOG.info("%s is mounted", src or dst)
         return True
     if verbose:
-        LOG.info("%s is not mounted", src)
+        LOG.info("%s is not mounted", src or dst)

68-96: Prefer status-based result over output truthiness

findmnt signals matches via exit status; you already catch non-zero and return False. You can simplify by returning True after a successful run, instead of checking output truthiness.

Apply this minimal diff:

     try:
         if session:
             mount_result = session.cmd(mount_check_cmd)
         else:
             mount_result = process.run(mount_check_cmd, shell=True).stdout_text
         if verbose:
             LOG.info("Output of findmnt: %s", mount_result)
+        return True
     except (process.CmdError, aexpect.exceptions.ShellCmdError) as e:
         LOG.error("Exception info: %s", e)
         return False
-
-    if mount_result:
-        if verbose:
-            LOG.info("%s is mounted", src)
-        return True
-    if verbose:
-        LOG.info("%s is not mounted", src)
-    return False
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0cfdc10 and e4b69dc.

📒 Files selected for processing (1)
  • virttest/utils_disk.py (3 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
virttest/utils_disk.py (5)
virttest/utils_libguestfs.py (2)
  • cmd (392-403)
  • run (655-662)
virttest/remote_commander/remote_master.py (1)
  • cmd (326-339)
virttest/qemu_monitor.py (2)
  • cmd (931-981)
  • cmd (2033-2093)
virttest/ovs_utils.py (1)
  • cmd (36-40)
virttest/remote_commander/remote_runner.py (1)
  • shell (660-676)
🪛 GitHub Actions: CI
virttest/utils_disk.py

[error] 63-75: Black formatting would reformat 1 file; 'make check' failed due to formatting issues in virttest/utils_disk.py. Run 'black .' or 'make format' to fix.

🔇 Additional comments (3)
virttest/utils_disk.py (3)

20-20: Import aexpect to catch ShellCmdError — good

This aligns with the broadened exception handling you added below.


89-91: Using session.cmd is correct

This matches the earlier review guidance; session.cmd raises on non-zero, which we handle below.


1-1755: Ensure Black formatting is applied

I was unable to run make format or black . in this environment. Please run the formatter locally to resolve any Black formatting issues in virttest/utils_disk.py before merging.

Currently if var is empty but not None it will cause findmnt
cmd run into error, so update the code logic to fix this issue.
Also add some log output for the exception.

Signed-off-by: Leidong Wang <leidwang@redhat.com>
@qingwangrh
Copy link
Copy Markdown
Contributor

change def is_mount(src, dst=None, fstype=None, options=None, verbose=False, session=None) to def is_mount(src=None, dst=None, fstype=None, options=None, verbose=False, session=None)
findmnt supports finding by src or dst. Some cases use the mount point (dst) as a search. So the src is not required.

@PaulYuuu Could you please share your thoughts about that? Thanks.

I was also mentioned this in the previous PR: #4098 (comment)

Yes, but we (Yongxue, Yihuang, and Leidong) discussed this issue at a Google meeting before. I'm not sure why we decided not to change it last time, but we did discuss it. I agree with setting a default value for src , but I just wanted to share my concerns: Is there a risk if all parameters are set to optional?

If you design the src and dst as parameters, it means the user needs to care which parameter is passed.
Since the src is not MUST, setting it to None makes sense.
Setting it in the first place means it covers most scenarios.

@JinLiul
Copy link
Copy Markdown
Contributor

JinLiul commented Aug 12, 2025

After applying this patch, the block related cases passed.

@YongxueHong
Copy link
Copy Markdown

Hi @dzhengfy @chunfuwen @nanli1 @Yingshun @smitterl
Could you help review it based on your side? Thanks in advance.
Please feel free to add other stakeholders here if I missed.

@YvanY0
Copy link
Copy Markdown
Contributor

YvanY0 commented Aug 12, 2025

#4214 is invalid and can be solved by the current PR

@qcheng-redhat
Copy link
Copy Markdown
Contributor

This patch fixed the empty string issue for block job loop:

(025/225) Host_RHEL.m9.u7.ovmf.qcow2.virtio_blk.up.virtio_net.Guest.RHEL.9.7.0.x86_64.io-github-autotest-qemu.blockdev_stream_filter_nodename.q35: STARTED
(025/225) Host_RHEL.m9.u7.ovmf.qcow2.virtio_blk.up.virtio_net.Guest.RHEL.9.7.0.x86_64.io-github-autotest-qemu.blockdev_stream_filter_nodename.q35: PASS (70.45 s)

Got L0097 ERROR| Exception info: Shell command failed: 'findmnt -J -S /dev/vdb1 -M /mnt/vdb1 -t ext4' (status: 1, output: '') in log file

ACK

@XueqiangWei
Copy link
Copy Markdown
Contributor

After applying this patch, the usb_multi_disk related cases passed.

(1/2) Host_RHEL.m10.u0.ovmf.qcow2.virtio_scsi.up.virtio_net.Guest.RHEL.10.0.x86_64.io-github-autotest-qemu.usb.usb_multi_disk.max_disk.without_usb_hub.nec-xhci.q35: STARTED
(1/2) Host_RHEL.m10.u0.ovmf.qcow2.virtio_scsi.up.virtio_net.Guest.RHEL.10.0.x86_64.io-github-autotest-qemu.usb.usb_multi_disk.max_disk.without_usb_hub.nec-xhci.q35: PASS (210.70 s)
(2/2) Host_RHEL.m10.u0.ovmf.qcow2.virtio_scsi.up.virtio_net.Guest.RHEL.10.0.x86_64.io-github-autotest-qemu.usb.usb_multi_disk.max_disk.without_usb_hub.qemu-xhci.q35: STARTED
(2/2) Host_RHEL.m10.u0.ovmf.qcow2.virtio_scsi.up.virtio_net.Guest.RHEL.10.0.x86_64.io-github-autotest-qemu.usb.usb_multi_disk.max_disk.without_usb_hub.qemu-xhci.q35: PASS (215.75 s)

@leidwang
Copy link
Copy Markdown
Contributor Author

change def is_mount(src, dst=None, fstype=None, options=None, verbose=False, session=None) to def is_mount(src=None, dst=None, fstype=None, options=None, verbose=False, session=None)
findmnt supports finding by src or dst. Some cases use the mount point (dst) as a search. So the src is not required.

@PaulYuuu Could you please share your thoughts about that? Thanks.

I was also mentioned this in the previous PR: #4098 (comment)

Yes, but we (Yongxue, Yihuang, and Leidong) discussed this issue at a Google meeting before. I'm not sure why we decided not to change it last time, but we did discuss it. I agree with setting a default value for src , but I just wanted to share my concerns: Is there a risk if all parameters are set to optional?

If you design the src and dst as parameters, it means the user needs to care which parameter is passed. Since the src is not MUST, setting it to None makes sense. Setting it in the first place means it covers most scenarios.

I saw @qingwangrh opened a new PR to fix some regression issues autotest/tp-qemu#4357, which was caused by setting src=None. I am not sure if there are other places where such changes are needed? Or can we keep the previous usage/definition of is_mount? cc @PaulYuuu

@cliping
Copy link
Copy Markdown
Contributor

cliping commented Aug 13, 2025

This patch fixes the mount failure issue in the migration job.

(1/1) type_specific.io-github-autotest-libvirt.migration_with_copy_storage.migration_retain_sparsity.disk_num_1.dest1_raw.src1_qcow2.copy_storage_all: STARTED
(1/1) type_specific.io-github-autotest-libvirt.migration_with_copy_storage.migration_retain_sparsity.disk_num_1.dest1_raw.src1_qcow2.copy_storage_all: PASS (232.25 s)

Copy link
Copy Markdown
Contributor

@cliping cliping left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@nanli1
Copy link
Copy Markdown
Contributor

nanli1 commented Aug 13, 2025

@chunfuwen hi chunfu , Maybe you need to check if this pr passed on virtual disk test cases

@YvanY0
Copy link
Copy Markdown
Contributor

YvanY0 commented Aug 13, 2025

I saw @qingwangrh opened a new PR to fix some regression issues autotest/tp-qemu#4357, which was caused by setting src=None. I am not sure if there are other places where such changes are needed? Or can we keep the previous usage/definition of is_mount? cc @PaulYuuu

We cannot say it's a regression from the previous PR, because mnt_dir should be dst, that PR just fix the wrong call.

@leidwang
Copy link
Copy Markdown
Contributor Author

leidwang commented Aug 13, 2025

I saw @qingwangrh opened a new PR to fix some regression issues autotest/tp-qemu#4357, which was caused by setting src=None. I am not sure if there are other places where such changes are needed? Or can we keep the previous usage/definition of is_mount? cc @PaulYuuu

We cannot say it's a regression from the previous PR, because mnt_dir should be dst, that PR just fix the wrong call.

Oh, got it, I misunderstood it before.Thanks.

@YvanY0
Copy link
Copy Markdown
Contributor

YvanY0 commented Aug 13, 2025

I saw @qingwangrh opened a new PR to fix some regression issues autotest/tp-qemu#4357, which was caused by setting src=None. I am not sure if there are other places where such changes are needed? Or can we keep the previous usage/definition of is_mount? cc @PaulYuuu

We cannot say it's a regression from the previous PR, because mnt_dir should be dst, that PR just fix the wrong call.

Oh, got it, I misunderstood it before.Thanks.

Not worry, we can double confirm with @qingwangrh

@qingwangrh
Copy link
Copy Markdown
Contributor

qingwangrh commented Aug 13, 2025

I saw @qingwangrh opened a new PR to fix some regression issues autotest/tp-qemu#4357, which was caused by setting src=None. I am not sure if there are other places where such changes are needed? Or can we keep the previous usage/definition of is_mount? cc @PaulYuuu

We cannot say it's a regression from the previous PR, because mnt_dir should be dst, that PR just fix the wrong call.

Oh, got it, I misunderstood it before.Thanks.

Not worry, we can double confirm with @qingwangrh

I mean the regression is the relevant patch: #4098
The previous implementation will ignore src/dst in the search.
Even if the caller pass the wrong parameter but it get the expected result.

mount_str = "%s %s %s" % (src, dst, fstype)
mount_str = mount_str.replace("None", "").strip()

for result in mount_result.splitlines():
if mount_str in result: <- fuzzy search

===========================

The caller must care the src/dst in the present implementation.

You need not to concern the other place change. It helps to correct the wrong usage.
Any change is acceptable IMHO.

But if you want to support fuzzy search or tolerate wrong usage, you may change to

mount_options = [ ("-t", fstype), ("-O", options)]

if src and dst:
mount_opts = "-S %s -M %s" %(src,dst) # precise
else:
mount_opts = src if src else dst # fuzzy # will hide wrong usage

mount_opts =mount_opts +"".join(f"{opt} {val}" for opt, val in mount_options if val)

if not mount_opts :
raise exceptions.TestError("Mount options is empty, it is meaningless")

mount_check_cmd = f"findmnt {mount_opts} -J"

.....

(PS: you may decide the final solution.)

@meinaLi
Copy link
Copy Markdown
Contributor

meinaLi commented Aug 14, 2025

@chunfuwen hi chunfu , Maybe you need to check if this pr passed on virtual disk test cases

After replying this PR, 1 failed libvirt virtual disk case virtual_disks.vhostvdpa.lifecycle can be passed now.

# avocado run --vt-type libvirt --vt-omit-data-loss --vt-machine-type q35 virtual_disks.vhostvdpa.lifecycle
JOB ID     : eaa735e3b760e9a4cc46ea5aa2447b0e6bf30016
JOB LOG    : /var/log/avocado/job-results/job-2025-08-14T02.43-eaa735e/job.log
 (1/1) type_specific.io-github-autotest-libvirt.virtual_disks.vhostvdpa.lifecycle: STARTED
 (1/1) type_specific.io-github-autotest-libvirt.virtual_disks.vhostvdpa.lifecycle: PASS (122.50 s)
RESULTS    : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB HTML   : /var/log/avocado/job-results/job-2025-08-14T02.43-eaa735e/results.html
JOB TIME   : 125.47 s

Copy link
Copy Markdown
Contributor

@dzhengfy dzhengfy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this increase the adaption scope, so it is low risk for existing code. LGTM

@YvanY0 YvanY0 merged commit 7f04953 into avocado-framework:master Aug 20, 2025
25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.