[PATCH] iotests: fix source directory location

John Snow posted 1 patch 1 year, 11 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20220526002512.1585246-1-jsnow@redhat.com
Maintainers: Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>
tests/qemu-iotests/testenv.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] iotests: fix source directory location
Posted by John Snow 1 year, 11 months ago
If you invoke the check script from outside of the tests/qemu-iotests
directory, the directories initialized as source_iotests and
build_iotests will be incorrect.

We can use the location of the source file itself to be more accurate.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
 tests/qemu-iotests/testenv.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/qemu-iotests/testenv.py b/tests/qemu-iotests/testenv.py
index a864c74b123..9b0f01e84db 100644
--- a/tests/qemu-iotests/testenv.py
+++ b/tests/qemu-iotests/testenv.py
@@ -217,10 +217,10 @@ def __init__(self, imgfmt: str, imgproto: str, aiomode: str,
             self.build_iotests = os.path.dirname(os.path.abspath(sys.argv[0]))
         else:
             # called from the source tree
-            self.source_iotests = os.getcwd()
+            self.source_iotests = str(Path(__file__, '..').resolve())
             self.build_iotests = self.source_iotests
 
-        self.build_root = os.path.join(self.build_iotests, '..', '..')
+        self.build_root = str(Path(self.build_iotests, '../..').resolve())
 
         self.init_directories()
         self.init_binaries()
-- 
2.34.1
Re: [PATCH] iotests: fix source directory location
Posted by Daniel P. Berrangé 1 year, 11 months ago
On Wed, May 25, 2022 at 08:25:12PM -0400, John Snow wrote:
> If you invoke the check script from outside of the tests/qemu-iotests
> directory, the directories initialized as source_iotests and
> build_iotests will be incorrect.
> 
> We can use the location of the source file itself to be more accurate.
> 
> Signed-off-by: John Snow <jsnow@redhat.com>
> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  tests/qemu-iotests/testenv.py | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tests/qemu-iotests/testenv.py b/tests/qemu-iotests/testenv.py
> index a864c74b123..9b0f01e84db 100644
> --- a/tests/qemu-iotests/testenv.py
> +++ b/tests/qemu-iotests/testenv.py
> @@ -217,10 +217,10 @@ def __init__(self, imgfmt: str, imgproto: str, aiomode: str,
>              self.build_iotests = os.path.dirname(os.path.abspath(sys.argv[0]))
>          else:
>              # called from the source tree
> -            self.source_iotests = os.getcwd()
> +            self.source_iotests = str(Path(__file__, '..').resolve())

Path(__file__).parent

>              self.build_iotests = self.source_iotests
>  
> -        self.build_root = os.path.join(self.build_iotests, '..', '..')
> +        self.build_root = str(Path(self.build_iotests, '../..').resolve())

Path(self.build_iotests).parent.parent

to be portable

>  
>          self.init_directories()
>          self.init_binaries()
> -- 
> 2.34.1
> 
> 

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|
Re: [PATCH] iotests: fix source directory location
Posted by John Snow 1 year, 11 months ago
On Thu, May 26, 2022, 3:54 AM Daniel P. Berrangé <berrange@redhat.com>
wrote:

> On Wed, May 25, 2022 at 08:25:12PM -0400, John Snow wrote:
> > If you invoke the check script from outside of the tests/qemu-iotests
> > directory, the directories initialized as source_iotests and
> > build_iotests will be incorrect.
> >
> > We can use the location of the source file itself to be more accurate.
> >
> > Signed-off-by: John Snow <jsnow@redhat.com>
> > Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
> > ---
> >  tests/qemu-iotests/testenv.py | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/tests/qemu-iotests/testenv.py
> b/tests/qemu-iotests/testenv.py
> > index a864c74b123..9b0f01e84db 100644
> > --- a/tests/qemu-iotests/testenv.py
> > +++ b/tests/qemu-iotests/testenv.py
> > @@ -217,10 +217,10 @@ def __init__(self, imgfmt: str, imgproto: str,
> aiomode: str,
> >              self.build_iotests =
> os.path.dirname(os.path.abspath(sys.argv[0]))
> >          else:
> >              # called from the source tree
> > -            self.source_iotests = os.getcwd()
> > +            self.source_iotests = str(Path(__file__, '..').resolve())
>
> Path(__file__).parent
>
> >              self.build_iotests = self.source_iotests
> >
> > -        self.build_root = os.path.join(self.build_iotests, '..', '..')
> > +        self.build_root = str(Path(self.build_iotests,
> '../..').resolve())
>
> Path(self.build_iotests).parent.parent
>
> to be portable
>

With windows? I think Path() is meant to be a fully portable class as-is,
but I'll double-check my assumption. I use ".." elsewhere in code already
checked in, so if it's a problem I ought to fix it everywhere.
Re: [PATCH] iotests: fix source directory location
Posted by Kevin Wolf 1 year, 11 months ago
Am 26.05.2022 um 16:21 hat John Snow geschrieben:
> On Thu, May 26, 2022, 3:54 AM Daniel P. Berrangé <berrange@redhat.com>
> wrote:
> 
> > On Wed, May 25, 2022 at 08:25:12PM -0400, John Snow wrote:
> > > If you invoke the check script from outside of the tests/qemu-iotests
> > > directory, the directories initialized as source_iotests and
> > > build_iotests will be incorrect.
> > >
> > > We can use the location of the source file itself to be more accurate.
> > >
> > > Signed-off-by: John Snow <jsnow@redhat.com>
> > > Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
> > > ---
> > >  tests/qemu-iotests/testenv.py | 4 ++--
> > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/tests/qemu-iotests/testenv.py
> > b/tests/qemu-iotests/testenv.py
> > > index a864c74b123..9b0f01e84db 100644
> > > --- a/tests/qemu-iotests/testenv.py
> > > +++ b/tests/qemu-iotests/testenv.py
> > > @@ -217,10 +217,10 @@ def __init__(self, imgfmt: str, imgproto: str,
> > aiomode: str,
> > >              self.build_iotests =
> > os.path.dirname(os.path.abspath(sys.argv[0]))
> > >          else:
> > >              # called from the source tree
> > > -            self.source_iotests = os.getcwd()
> > > +            self.source_iotests = str(Path(__file__, '..').resolve())
> >
> > Path(__file__).parent
> >
> > >              self.build_iotests = self.source_iotests
> > >
> > > -        self.build_root = os.path.join(self.build_iotests, '..', '..')
> > > +        self.build_root = str(Path(self.build_iotests,
> > '../..').resolve())
> >
> > Path(self.build_iotests).parent.parent
> >
> > to be portable
> >
> 
> With windows? I think Path() is meant to be a fully portable class as-is,
> but I'll double-check my assumption. I use ".." elsewhere in code already
> checked in, so if it's a problem I ought to fix it everywhere.

I don't see any potential problem with the second hunk because we're
dealing with the path of a directory there, but "regular_file.py/.."
looks a bit fishy to me and doesn't work if you ask the kernel. Is this
guaranteed to work in Python or is it an implementation detail of Path
that may change?

Kevin
Re: [PATCH] iotests: fix source directory location
Posted by John Snow 1 year, 9 months ago
On Fri, May 27, 2022, 12:29 PM Kevin Wolf <kwolf@redhat.com> wrote:

> Am 26.05.2022 um 16:21 hat John Snow geschrieben:
> > On Thu, May 26, 2022, 3:54 AM Daniel P. Berrangé <berrange@redhat.com>
> > wrote:
> >
> > > On Wed, May 25, 2022 at 08:25:12PM -0400, John Snow wrote:
> > > > If you invoke the check script from outside of the tests/qemu-iotests
> > > > directory, the directories initialized as source_iotests and
> > > > build_iotests will be incorrect.
> > > >
> > > > We can use the location of the source file itself to be more
> accurate.
> > > >
> > > > Signed-off-by: John Snow <jsnow@redhat.com>
> > > > Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
> > > > ---
> > > >  tests/qemu-iotests/testenv.py | 4 ++--
> > > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/tests/qemu-iotests/testenv.py
> > > b/tests/qemu-iotests/testenv.py
> > > > index a864c74b123..9b0f01e84db 100644
> > > > --- a/tests/qemu-iotests/testenv.py
> > > > +++ b/tests/qemu-iotests/testenv.py
> > > > @@ -217,10 +217,10 @@ def __init__(self, imgfmt: str, imgproto: str,
> > > aiomode: str,
> > > >              self.build_iotests =
> > > os.path.dirname(os.path.abspath(sys.argv[0]))
> > > >          else:
> > > >              # called from the source tree
> > > > -            self.source_iotests = os.getcwd()
> > > > +            self.source_iotests = str(Path(__file__,
> '..').resolve())
> > >
> > > Path(__file__).parent
> > >
> > > >              self.build_iotests = self.source_iotests
> > > >
> > > > -        self.build_root = os.path.join(self.build_iotests, '..',
> '..')
> > > > +        self.build_root = str(Path(self.build_iotests,
> > > '../..').resolve())
> > >
> > > Path(self.build_iotests).parent.parent
> > >
> > > to be portable
> > >
> >
> > With windows? I think Path() is meant to be a fully portable class as-is,
> > but I'll double-check my assumption. I use ".." elsewhere in code already
> > checked in, so if it's a problem I ought to fix it everywhere.
>
> I don't see any potential problem with the second hunk because we're
> dealing with the path of a directory there, but "regular_file.py/.."
> looks a bit fishy to me and doesn't work if you ask the kernel. Is this
> guaranteed to work in Python or is it an implementation detail of Path
> that may change?
>

... I apparently never hit send on this draft reply:

Good question, I don't know. I just know that when starting from __file__,
it seems to work in that manner. I used that trick when I added the
PYTHONPATH stuff directly into testenv a while back and never thought more
of it.

If it makes people uneasy to look at, I can just use .parent for the
Principle of Least Surprise.
Re: [PATCH] iotests: fix source directory location
Posted by John Snow 1 year, 11 months ago
On Thu, May 26, 2022 at 10:21 AM John Snow <jsnow@redhat.com> wrote:
>
>
>
> On Thu, May 26, 2022, 3:54 AM Daniel P. Berrangé <berrange@redhat.com> wrote:
>>
>> On Wed, May 25, 2022 at 08:25:12PM -0400, John Snow wrote:
>> > If you invoke the check script from outside of the tests/qemu-iotests
>> > directory, the directories initialized as source_iotests and
>> > build_iotests will be incorrect.
>> >
>> > We can use the location of the source file itself to be more accurate.
>> >
>> > Signed-off-by: John Snow <jsnow@redhat.com>
>> > Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
>> > ---
>> >  tests/qemu-iotests/testenv.py | 4 ++--
>> >  1 file changed, 2 insertions(+), 2 deletions(-)
>> >
>> > diff --git a/tests/qemu-iotests/testenv.py b/tests/qemu-iotests/testenv.py
>> > index a864c74b123..9b0f01e84db 100644
>> > --- a/tests/qemu-iotests/testenv.py
>> > +++ b/tests/qemu-iotests/testenv.py
>> > @@ -217,10 +217,10 @@ def __init__(self, imgfmt: str, imgproto: str, aiomode: str,
>> >              self.build_iotests = os.path.dirname(os.path.abspath(sys.argv[0]))
>> >          else:
>> >              # called from the source tree
>> > -            self.source_iotests = os.getcwd()
>> > +            self.source_iotests = str(Path(__file__, '..').resolve())
>>
>> Path(__file__).parent
>>
>> >              self.build_iotests = self.source_iotests
>> >
>> > -        self.build_root = os.path.join(self.build_iotests, '..', '..')
>> > +        self.build_root = str(Path(self.build_iotests, '../..').resolve())
>>
>> Path(self.build_iotests).parent.parent
>>
>> to be portable
>
>
> With windows? I think Path() is meant to be a fully portable class as-is, but I'll double-check my assumption. I use ".." elsewhere in code already checked in, so if it's a problem I ought to fix it everywhere.

Found a Windows box, it works there too. Good enough?

--js
Re: [PATCH] iotests: fix source directory location
Posted by Daniel P. Berrangé 1 year, 11 months ago
On Thu, May 26, 2022 at 11:20:18AM -0400, John Snow wrote:
> On Thu, May 26, 2022 at 10:21 AM John Snow <jsnow@redhat.com> wrote:
> >
> >
> >
> > On Thu, May 26, 2022, 3:54 AM Daniel P. Berrangé <berrange@redhat.com> wrote:
> >>
> >> On Wed, May 25, 2022 at 08:25:12PM -0400, John Snow wrote:
> >> > If you invoke the check script from outside of the tests/qemu-iotests
> >> > directory, the directories initialized as source_iotests and
> >> > build_iotests will be incorrect.
> >> >
> >> > We can use the location of the source file itself to be more accurate.
> >> >
> >> > Signed-off-by: John Snow <jsnow@redhat.com>
> >> > Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
> >> > ---
> >> >  tests/qemu-iotests/testenv.py | 4 ++--
> >> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >> >
> >> > diff --git a/tests/qemu-iotests/testenv.py b/tests/qemu-iotests/testenv.py
> >> > index a864c74b123..9b0f01e84db 100644
> >> > --- a/tests/qemu-iotests/testenv.py
> >> > +++ b/tests/qemu-iotests/testenv.py
> >> > @@ -217,10 +217,10 @@ def __init__(self, imgfmt: str, imgproto: str, aiomode: str,
> >> >              self.build_iotests = os.path.dirname(os.path.abspath(sys.argv[0]))
> >> >          else:
> >> >              # called from the source tree
> >> > -            self.source_iotests = os.getcwd()
> >> > +            self.source_iotests = str(Path(__file__, '..').resolve())
> >>
> >> Path(__file__).parent
> >>
> >> >              self.build_iotests = self.source_iotests
> >> >
> >> > -        self.build_root = os.path.join(self.build_iotests, '..', '..')
> >> > +        self.build_root = str(Path(self.build_iotests, '../..').resolve())
> >>
> >> Path(self.build_iotests).parent.parent
> >>
> >> to be portable
> >
> >
> > With windows? I think Path() is meant to be a fully portable class as-is, but I'll double-check my assumption. I use ".." elsewhere in code already checked in, so if it's a problem I ought to fix it everywhere.
> 
> Found a Windows box, it works there too. Good enough?

I don't mind

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|