diff mbox series

[yocto-autobuilder-helper] scripts: run-docs-build: make the workdir pristine between builds

Message ID 20221003170401.12827-1-foss+yocto@0leil.net
State New
Headers show
Series [yocto-autobuilder-helper] scripts: run-docs-build: make the workdir pristine between builds | expand

Commit Message

Quentin Schulz Oct. 3, 2022, 5:04 p.m. UTC
From: Quentin Schulz <quentin.schulz@theobroma-systems.com>

It happened that the git repositories were dirty and resulted in
incorrect files being used. Let's use git clean -ffdx to force a
completely clean git repositories before and after checking out a branch
so that nothing is left from or to another branch build

Cc: Quentin Schulz <foss+yocto@0leil.net>
Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
---
 scripts/run-docs-build | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Quentin Schulz Oct. 3, 2022, 5:05 p.m. UTC | #1
Hi all,

On 10/3/22 19:04, Quentin Schulz wrote:
> From: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> 
> It happened that the git repositories were dirty and resulted in
> incorrect files being used. Let's use git clean -ffdx to force a
> completely clean git repositories before and after checking out a branch
> so that nothing is left from or to another branch build
> 
> Cc: Quentin Schulz <foss+yocto@0leil.net>
> Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> ---

Forgot to say this was not tested. Let's run this on the autobuilder and 
see if it helps? Is there a way to try without merging?

Cheers,
Quentin
Michael Opdenacker Oct. 3, 2022, 5:11 p.m. UTC | #2
Hi Quentin,

On 03.10.22 19:04, Quentin Schulz wrote:
> From: Quentin Schulz <quentin.schulz@theobroma-systems.com>
>
> It happened that the git repositories were dirty and resulted in
> incorrect files being used. Let's use git clean -ffdx to force a
> completely clean git repositories before and after checking out a branch
> so that nothing is left from or to another branch build
>
> Cc: Quentin Schulz <foss+yocto@0leil.net>
> Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> ---
>   scripts/run-docs-build | 10 +++++-----
>   1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/scripts/run-docs-build b/scripts/run-docs-build
> index c6b3965..69e3257 100755
> --- a/scripts/run-docs-build
> +++ b/scripts/run-docs-build
> @@ -61,6 +61,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
>   
>       echo Building bitbake $branch branch
>       git checkout $branch
> +    git clean -ffdx
>       git checkout origin/master releases.rst
>       make clean
>       SPHINXOPTS="-j auto" make publish
> @@ -80,7 +81,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
>       fi
>   
>       cp -r ./_build/final/* $outputdir/bitbake/$branch
> -    git reset --hard
> +    git clean -ffdx


In both cases, why "-ffdx"? Isn't it the same as "-fdx" (just checking 
the manual page).

Cheers
Michael.
Luca Ceresoli Oct. 3, 2022, 9:15 p.m. UTC | #3
Hi Quentin,

On Mon,  3 Oct 2022 19:04:01 +0200
"Quentin Schulz" <foss@0leil.net> wrote:

> From: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> 
> It happened that the git repositories were dirty and resulted in
> incorrect files being used. Let's use git clean -ffdx to force a
> completely clean git repositories before and after checking out a branch
> so that nothing is left from or to another branch build
> 
> Cc: Quentin Schulz <foss+yocto@0leil.net>
> Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> ---
>  scripts/run-docs-build | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/scripts/run-docs-build b/scripts/run-docs-build
> index c6b3965..69e3257 100755
> --- a/scripts/run-docs-build
> +++ b/scripts/run-docs-build
> @@ -61,6 +61,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
>  
>      echo Building bitbake $branch branch
>      git checkout $branch
> +    git clean -ffdx
>      git checkout origin/master releases.rst
>      make clean
>      SPHINXOPTS="-j auto" make publish
> @@ -80,7 +81,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
>      fi
>  
>      cp -r ./_build/final/* $outputdir/bitbake/$branch
> -    git reset --hard
> +    git clean -ffdx

Sure this is correct? 'git clean -ffdx' does not revert changes to
tracked files, be them staged or not.

>  done
>  
>  if [ "$PUBLISH" -ne 0 ]; then
> @@ -100,8 +101,7 @@ first_dunfell_sphinx_commit=c25fe058b88b893b0d146f3ed27320b47cdec236
>  git checkout origin/master set_versions.py
>  #latest_tag=$(git tag --contains "$first_sphinx_commit" --contains "$first_dunfell_sphinx_commit" --sort="version:refname" 'yocto-*' | tail -1 | sed 's/yocto-//')
>  latest_tag=$(./set_versions.py getlatest)
> -git reset --hard
> -git clean -f
> +git clean -ffdx
>  
>  for branch in dunfell $(git branch --remote --contains "$first_sphinx_commit" --format '%(refname:lstrip=3)') $(git tag --contains "$first_sphinx_commit" --contains "$first_dunfell_sphinx_commit" 'yocto-*') transition; do
>      if [ "$branch" = "HEAD" ]; then
> @@ -116,6 +116,7 @@ for branch in dunfell $(git branch --remote --contains "$first_sphinx_commit" --
>  
>      echo Building $branch
>      git checkout $branch
> +    git clean -ffdx
>  
>      if [ -e "${scriptdir}/docs-build-patches/${branch}/" ]; then
>          echo Adding patch for $branch
> @@ -160,8 +161,7 @@ for branch in dunfell $(git branch --remote --contains "$first_sphinx_commit" --
>      fi
>  
>      cp -r ./_build/final/* $outputdir/$branch
> -    git reset --hard
> -    git clean -f
> +    git clean -ffdx

Same here.
Luca Ceresoli Oct. 3, 2022, 9:15 p.m. UTC | #4
On Mon, 3 Oct 2022 19:11:34 +0200
"Michael Opdenacker via lists.yoctoproject.org"
<michael.opdenacker=bootlin.com@lists.yoctoproject.org> wrote:

> Hi Quentin,
> 
> On 03.10.22 19:04, Quentin Schulz wrote:
> > From: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> >
> > It happened that the git repositories were dirty and resulted in
> > incorrect files being used. Let's use git clean -ffdx to force a
> > completely clean git repositories before and after checking out a branch
> > so that nothing is left from or to another branch build
> >
> > Cc: Quentin Schulz <foss+yocto@0leil.net>
> > Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> > ---
> >   scripts/run-docs-build | 10 +++++-----
> >   1 file changed, 5 insertions(+), 5 deletions(-)
> >
> > diff --git a/scripts/run-docs-build b/scripts/run-docs-build
> > index c6b3965..69e3257 100755
> > --- a/scripts/run-docs-build
> > +++ b/scripts/run-docs-build
> > @@ -61,6 +61,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
> >   
> >       echo Building bitbake $branch branch
> >       git checkout $branch
> > +    git clean -ffdx
> >       git checkout origin/master releases.rst
> >       make clean
> >       SPHINXOPTS="-j auto" make publish
> > @@ -80,7 +81,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
> >       fi
> >   
> >       cp -r ./_build/final/* $outputdir/bitbake/$branch
> > -    git reset --hard
> > +    git clean -ffdx  
> 
> 
> In both cases, why "-ffdx"? Isn't it the same as "-fdx" (just checking 
> the manual page).

The manpage for git 2.34.1 has this extra detail:

> Git will refuse to modify untracked nested git repositories
> (directories with a .git subdirectory) unless a second -f is given.
Quentin Schulz Oct. 4, 2022, 8:15 a.m. UTC | #5
Hi Luca,

On 10/3/22 23:15, Luca Ceresoli wrote:
> Hi Quentin,
> 
> On Mon,  3 Oct 2022 19:04:01 +0200
> "Quentin Schulz" <foss@0leil.net> wrote:
> 
>> From: Quentin Schulz <quentin.schulz@theobroma-systems.com>
>>
>> It happened that the git repositories were dirty and resulted in
>> incorrect files being used. Let's use git clean -ffdx to force a
>> completely clean git repositories before and after checking out a branch
>> so that nothing is left from or to another branch build
>>
>> Cc: Quentin Schulz <foss+yocto@0leil.net>
>> Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
>> ---
>>   scripts/run-docs-build | 10 +++++-----
>>   1 file changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/scripts/run-docs-build b/scripts/run-docs-build
>> index c6b3965..69e3257 100755
>> --- a/scripts/run-docs-build
>> +++ b/scripts/run-docs-build
>> @@ -61,6 +61,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
>>   
>>       echo Building bitbake $branch branch
>>       git checkout $branch
>> +    git clean -ffdx
>>       git checkout origin/master releases.rst
>>       make clean
>>       SPHINXOPTS="-j auto" make publish
>> @@ -80,7 +81,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
>>       fi
>>   
>>       cp -r ./_build/final/* $outputdir/bitbake/$branch
>> -    git reset --hard
>> +    git clean -ffdx
> 
> Sure this is correct? 'git clean -ffdx' does not revert changes to
> tracked files, be them staged or not.
> 

Nope, not sure this is correct. I misread git clean manpage, we should 
have a git reset --hard and git clean -ffdx. Now the question is when 
those are necessary because with this patch we do it twice, before and 
after the git checkout. I did this because I remember doing checkouts 
between branches of U-Boot/kernel and while the pre-checkout branch was 
not dirty, the after-checkout branch was dirty. I assume this might have 
something to do with build artifacts of the pre-checkout build that 
weren't .gitignored in the afer-checkout branch? Something that git 
clean -ffdx should tackle I think.

Sooo, I guess only having git reset --hard and git clean -ffdx before a 
checkout should be enough and we don't need them both before and after 
the checkout like I did in this patch?

Cheers,
Quentin
Luca Ceresoli Oct. 4, 2022, 8:54 p.m. UTC | #6
Hi Quentin,

On Tue, 4 Oct 2022 10:15:20 +0200
Quentin Schulz <quentin.schulz@theobroma-systems.com> wrote:

> Hi Luca,
> 
> On 10/3/22 23:15, Luca Ceresoli wrote:
> > Hi Quentin,
> > 
> > On Mon,  3 Oct 2022 19:04:01 +0200
> > "Quentin Schulz" <foss@0leil.net> wrote:
> >   
> >> From: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> >>
> >> It happened that the git repositories were dirty and resulted in
> >> incorrect files being used. Let's use git clean -ffdx to force a
> >> completely clean git repositories before and after checking out a branch
> >> so that nothing is left from or to another branch build
> >>
> >> Cc: Quentin Schulz <foss+yocto@0leil.net>
> >> Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> >> ---
> >>   scripts/run-docs-build | 10 +++++-----
> >>   1 file changed, 5 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/scripts/run-docs-build b/scripts/run-docs-build
> >> index c6b3965..69e3257 100755
> >> --- a/scripts/run-docs-build
> >> +++ b/scripts/run-docs-build
> >> @@ -61,6 +61,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
> >>   
> >>       echo Building bitbake $branch branch
> >>       git checkout $branch
> >> +    git clean -ffdx
> >>       git checkout origin/master releases.rst
> >>       make clean
> >>       SPHINXOPTS="-j auto" make publish
> >> @@ -80,7 +81,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
> >>       fi
> >>   
> >>       cp -r ./_build/final/* $outputdir/bitbake/$branch
> >> -    git reset --hard
> >> +    git clean -ffdx  
> > 
> > Sure this is correct? 'git clean -ffdx' does not revert changes to
> > tracked files, be them staged or not.
> >   
> 
> Nope, not sure this is correct. I misread git clean manpage, we should 
> have a git reset --hard and git clean -ffdx. Now the question is when 
> those are necessary because with this patch we do it twice, before and 
> after the git checkout. I did this because I remember doing checkouts 
> between branches of U-Boot/kernel and while the pre-checkout branch was 
> not dirty, the after-checkout branch was dirty. I assume this might have 
> something to do with build artifacts of the pre-checkout build that 
> weren't .gitignored in the afer-checkout branch? Something that git 
> clean -ffdx should tackle I think.
> 
> Sooo, I guess only having git reset --hard and git clean -ffdx before a 
> checkout should be enough and we don't need them both before and after 
> the checkout like I did in this patch?

I think 'reset --hard' + 'clean -ffdx' only before the checkout should
be enough. However I'm not sure whether there are corner cases such as
a file that is .gitignored in commit A and versioned in commit B or
similar. Perhaps worth trying with reset+clean only before, and see
what happens. However I don't know exactly the initial problem you're
trying to fix.
Quentin Schulz Oct. 5, 2022, 8:55 a.m. UTC | #7
Hi Luka,

On 10/4/22 22:54, Luca Ceresoli wrote:
> Hi Quentin,
> 
> On Tue, 4 Oct 2022 10:15:20 +0200
> Quentin Schulz <quentin.schulz@theobroma-systems.com> wrote:
> 
>> Hi Luca,
>>
>> On 10/3/22 23:15, Luca Ceresoli wrote:
>>> Hi Quentin,
>>>
>>> On Mon,  3 Oct 2022 19:04:01 +0200
>>> "Quentin Schulz" <foss@0leil.net> wrote:
>>>    
>>>> From: Quentin Schulz <quentin.schulz@theobroma-systems.com>
>>>>
>>>> It happened that the git repositories were dirty and resulted in
>>>> incorrect files being used. Let's use git clean -ffdx to force a
>>>> completely clean git repositories before and after checking out a branch
>>>> so that nothing is left from or to another branch build
>>>>
>>>> Cc: Quentin Schulz <foss+yocto@0leil.net>
>>>> Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
>>>> ---
>>>>    scripts/run-docs-build | 10 +++++-----
>>>>    1 file changed, 5 insertions(+), 5 deletions(-)
>>>>
>>>> diff --git a/scripts/run-docs-build b/scripts/run-docs-build
>>>> index c6b3965..69e3257 100755
>>>> --- a/scripts/run-docs-build
>>>> +++ b/scripts/run-docs-build
>>>> @@ -61,6 +61,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
>>>>    
>>>>        echo Building bitbake $branch branch
>>>>        git checkout $branch
>>>> +    git clean -ffdx
>>>>        git checkout origin/master releases.rst
>>>>        make clean
>>>>        SPHINXOPTS="-j auto" make publish
>>>> @@ -80,7 +81,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
>>>>        fi
>>>>    
>>>>        cp -r ./_build/final/* $outputdir/bitbake/$branch
>>>> -    git reset --hard
>>>> +    git clean -ffdx
>>>
>>> Sure this is correct? 'git clean -ffdx' does not revert changes to
>>> tracked files, be them staged or not.
>>>    
>>
>> Nope, not sure this is correct. I misread git clean manpage, we should
>> have a git reset --hard and git clean -ffdx. Now the question is when
>> those are necessary because with this patch we do it twice, before and
>> after the git checkout. I did this because I remember doing checkouts
>> between branches of U-Boot/kernel and while the pre-checkout branch was
>> not dirty, the after-checkout branch was dirty. I assume this might have
>> something to do with build artifacts of the pre-checkout build that
>> weren't .gitignored in the afer-checkout branch? Something that git
>> clean -ffdx should tackle I think.
>>
>> Sooo, I guess only having git reset --hard and git clean -ffdx before a
>> checkout should be enough and we don't need them both before and after
>> the checkout like I did in this patch?
> 
> I think 'reset --hard' + 'clean -ffdx' only before the checkout should
> be enough. However I'm not sure whether there are corner cases such as
> a file that is .gitignored in commit A and versioned in commit B or
> similar. Perhaps worth trying with reset+clean only before, and see

I guess it does not hurt to be on the safe side by having them before 
and after the git checkout then? Since the current issue went unnoticed 
for months...

> what happens. However I don't know exactly the initial problem you're
> trying to fix.
> 

https://lore.kernel.org/yocto-docs/e50abe3c777e4a23a752a3ec25ad0b2a@axis.com/T/#t

Cheers,
Quentin
Luca Ceresoli Oct. 10, 2022, 2:34 p.m. UTC | #8
Hi Quentin,

On Wed, 5 Oct 2022 10:55:44 +0200
Quentin Schulz <quentin.schulz@theobroma-systems.com> wrote:

> Hi Luka,
> 
> On 10/4/22 22:54, Luca Ceresoli wrote:
> > Hi Quentin,
> > 
> > On Tue, 4 Oct 2022 10:15:20 +0200
> > Quentin Schulz <quentin.schulz@theobroma-systems.com> wrote:
> >   
> >> Hi Luca,
> >>
> >> On 10/3/22 23:15, Luca Ceresoli wrote:  
> >>> Hi Quentin,
> >>>
> >>> On Mon,  3 Oct 2022 19:04:01 +0200
> >>> "Quentin Schulz" <foss@0leil.net> wrote:
> >>>      
> >>>> From: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> >>>>
> >>>> It happened that the git repositories were dirty and resulted in
> >>>> incorrect files being used. Let's use git clean -ffdx to force a
> >>>> completely clean git repositories before and after checking out a branch
> >>>> so that nothing is left from or to another branch build
> >>>>
> >>>> Cc: Quentin Schulz <foss+yocto@0leil.net>
> >>>> Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> >>>> ---
> >>>>    scripts/run-docs-build | 10 +++++-----
> >>>>    1 file changed, 5 insertions(+), 5 deletions(-)
> >>>>
> >>>> diff --git a/scripts/run-docs-build b/scripts/run-docs-build
> >>>> index c6b3965..69e3257 100755
> >>>> --- a/scripts/run-docs-build
> >>>> +++ b/scripts/run-docs-build
> >>>> @@ -61,6 +61,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
> >>>>    
> >>>>        echo Building bitbake $branch branch
> >>>>        git checkout $branch
> >>>> +    git clean -ffdx
> >>>>        git checkout origin/master releases.rst
> >>>>        make clean
> >>>>        SPHINXOPTS="-j auto" make publish
> >>>> @@ -80,7 +81,7 @@ for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
> >>>>        fi
> >>>>    
> >>>>        cp -r ./_build/final/* $outputdir/bitbake/$branch
> >>>> -    git reset --hard
> >>>> +    git clean -ffdx  
> >>>
> >>> Sure this is correct? 'git clean -ffdx' does not revert changes to
> >>> tracked files, be them staged or not.
> >>>      
> >>
> >> Nope, not sure this is correct. I misread git clean manpage, we should
> >> have a git reset --hard and git clean -ffdx. Now the question is when
> >> those are necessary because with this patch we do it twice, before and
> >> after the git checkout. I did this because I remember doing checkouts
> >> between branches of U-Boot/kernel and while the pre-checkout branch was
> >> not dirty, the after-checkout branch was dirty. I assume this might have
> >> something to do with build artifacts of the pre-checkout build that
> >> weren't .gitignored in the afer-checkout branch? Something that git
> >> clean -ffdx should tackle I think.
> >>
> >> Sooo, I guess only having git reset --hard and git clean -ffdx before a
> >> checkout should be enough and we don't need them both before and after
> >> the checkout like I did in this patch?  
> > 
> > I think 'reset --hard' + 'clean -ffdx' only before the checkout should
> > be enough. However I'm not sure whether there are corner cases such as
> > a file that is .gitignored in commit A and versioned in commit B or
> > similar. Perhaps worth trying with reset+clean only before, and see  
> 
> I guess it does not hurt to be on the safe side by having them before 
> and after the git checkout then? Since the current issue went unnoticed 
> for months...

Sorry for the delayed reply. It took a while before I found a little
time to look at the script code...

Indeed cleaning before _and_ after would be safe, even though perhaps
unneeded.

> > what happens. However I don't know exactly the initial problem you're
> > trying to fix.
> >   
> 
> https://lore.kernel.org/yocto-docs/e50abe3c777e4a23a752a3ec25ad0b2a@axis.com/T/#t

Ah, interesting. Thanks for the link. Why not adding it to your commit
message, for reference?

Best regards.
diff mbox series

Patch

diff --git a/scripts/run-docs-build b/scripts/run-docs-build
index c6b3965..69e3257 100755
--- a/scripts/run-docs-build
+++ b/scripts/run-docs-build
@@ -61,6 +61,7 @@  for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
 
     echo Building bitbake $branch branch
     git checkout $branch
+    git clean -ffdx
     git checkout origin/master releases.rst
     make clean
     SPHINXOPTS="-j auto" make publish
@@ -80,7 +81,7 @@  for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --for
     fi
 
     cp -r ./_build/final/* $outputdir/bitbake/$branch
-    git reset --hard
+    git clean -ffdx
 done
 
 if [ "$PUBLISH" -ne 0 ]; then
@@ -100,8 +101,7 @@  first_dunfell_sphinx_commit=c25fe058b88b893b0d146f3ed27320b47cdec236
 git checkout origin/master set_versions.py
 #latest_tag=$(git tag --contains "$first_sphinx_commit" --contains "$first_dunfell_sphinx_commit" --sort="version:refname" 'yocto-*' | tail -1 | sed 's/yocto-//')
 latest_tag=$(./set_versions.py getlatest)
-git reset --hard
-git clean -f
+git clean -ffdx
 
 for branch in dunfell $(git branch --remote --contains "$first_sphinx_commit" --format '%(refname:lstrip=3)') $(git tag --contains "$first_sphinx_commit" --contains "$first_dunfell_sphinx_commit" 'yocto-*') transition; do
     if [ "$branch" = "HEAD" ]; then
@@ -116,6 +116,7 @@  for branch in dunfell $(git branch --remote --contains "$first_sphinx_commit" --
 
     echo Building $branch
     git checkout $branch
+    git clean -ffdx
 
     if [ -e "${scriptdir}/docs-build-patches/${branch}/" ]; then
         echo Adding patch for $branch
@@ -160,8 +161,7 @@  for branch in dunfell $(git branch --remote --contains "$first_sphinx_commit" --
     fi
 
     cp -r ./_build/final/* $outputdir/$branch
-    git reset --hard
-    git clean -f
+    git clean -ffdx
 done
 
 # Update bitbake switchers.js with the copy from master ypdocs