Message ID | 20251002131024.48843-1-naftaly.ralamboarivony@smile.fr |
---|---|
State | New |
Headers | show |
Series | patchtest: fix failure when oe-core repo is in detached HEAD | expand |
On 2025-10-02 09:10, naftaly.ralamboarivony via lists.openembedded.org wrote: > From: Naftaly RALAMBOARIVONY <naftaly.ralamboarivony@smile.fr> > > Patchtest fails when oe-core git repo is in a "detached HEAD" state: > > Error log: > >> File "/usr/lib/python3/dist-packages/git/repo/base.py", line 881, in > active_branch return self.head.reference ^^^^^^^^^^^^^^^^^^^ > >> File "/usr/lib/python3/dist-packages/git/refs/symbolic.py", line 311, in > _get_reference raise TypeError("%s is a detached symbolic reference as it > points to %r" % (self, sha)) TypeError: HEAD is a detached symbolic reference > as it points to '3dd31d3b29730fa1130645d76bb71914ac036335' None > > In this case, no current branch is available for the clean operation. > > To fix this, updates the checkout logic: > - if a current branch is available, use it, > - otherwise, fall back to the commit pointed to by HEAD. > > This ensures that the script works correctly even when HEAD is detached. > > Signed-off-by: Naftaly RALAMBOARIVONY <naftaly.ralamboarivony@smile.fr> Thanks for this. LGTM. > --- > meta/lib/patchtest/repo.py | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/meta/lib/patchtest/repo.py b/meta/lib/patchtest/repo.py > index 2cdd6736e4..6a7d7d2d3b 100644 > --- a/meta/lib/patchtest/repo.py > +++ b/meta/lib/patchtest/repo.py > @@ -21,7 +21,12 @@ class PatchTestRepo(object): > self.repodir = repodir > self.repo = git.Repo.init(repodir) > self.patch = mbox.PatchSeries(patch) > - self.current_branch = self.repo.active_branch.name > + > + if self.repo.head.is_detached: > + self.current_commit = self.repo.head.commit.hexsha > + self.current_branch = None > + else: > + self.current_branch = self.repo.active_branch.name > > # targeted branch defined on the patch may be invalid, so make sure there > # is a corresponding remote branch > @@ -80,6 +85,6 @@ class PatchTestRepo(object): > self._patchmerged = True > > def clean(self): > - self.repo.git.execute(['git', 'checkout', self.current_branch]) > + self.repo.git.execute(['git', 'checkout', self.current_branch if self.current_branch else self.current_commit]) > self.repo.git.execute(['git', 'branch', '-D', self._workingbranch]) > self._patchmerged = False > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#224357): https://lists.openembedded.org/g/openembedded-core/message/224357 > Mute This Topic: https://lists.openembedded.org/mt/115551792/7611679 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [tgamblin@baylibre.com] > -=-=-=-=-=-=-=-=-=-=-=- >
Le jeu. 2 oct. 2025 à 15:10, naftaly.ralamboarivony via lists.openembedded.org <naftaly.ralamboarivony= smile.fr@lists.openembedded.org> a écrit : > From: Naftaly RALAMBOARIVONY <naftaly.ralamboarivony@smile.fr> > > Patchtest fails when oe-core git repo is in a "detached HEAD" state: > > Error log: > > > File "/usr/lib/python3/dist-packages/git/repo/base.py", line 881, in > active_branch return self.head.reference ^^^^^^^^^^^^^^^^^^^ > > > File "/usr/lib/python3/dist-packages/git/refs/symbolic.py", line 311, in > _get_reference raise TypeError("%s is a detached symbolic reference as it > points to %r" % (self, sha)) TypeError: HEAD is a detached symbolic > reference > as it points to '3dd31d3b29730fa1130645d76bb71914ac036335' None > > In this case, no current branch is available for the clean operation. > > To fix this, updates the checkout logic: > - if a current branch is available, use it, > - otherwise, fall back to the commit pointed to by HEAD. > > This ensures that the script works correctly even when HEAD is detached. > > Signed-off-by: Naftaly RALAMBOARIVONY <naftaly.ralamboarivony@smile.fr> > Reviewed-by: Yoann Congal <yoann.congal@smile.fr> > --- > meta/lib/patchtest/repo.py | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/meta/lib/patchtest/repo.py b/meta/lib/patchtest/repo.py > index 2cdd6736e4..6a7d7d2d3b 100644 > --- a/meta/lib/patchtest/repo.py > +++ b/meta/lib/patchtest/repo.py > @@ -21,7 +21,12 @@ class PatchTestRepo(object): > self.repodir = repodir > self.repo = git.Repo.init(repodir) > self.patch = mbox.PatchSeries(patch) > - self.current_branch = self.repo.active_branch.name > + > + if self.repo.head.is_detached: > + self.current_commit = self.repo.head.commit.hexsha > + self.current_branch = None > + else: > + self.current_branch = self.repo.active_branch.name > > # targeted branch defined on the patch may be invalid, so make > sure there > # is a corresponding remote branch > @@ -80,6 +85,6 @@ class PatchTestRepo(object): > self._patchmerged = True > > def clean(self): > - self.repo.git.execute(['git', 'checkout', self.current_branch]) > + self.repo.git.execute(['git', 'checkout', self.current_branch if > self.current_branch else self.current_commit]) > self.repo.git.execute(['git', 'branch', '-D', > self._workingbranch]) > self._patchmerged = False > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#224357): > https://lists.openembedded.org/g/openembedded-core/message/224357 > Mute This Topic: https://lists.openembedded.org/mt/115551792/4316185 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [ > yoann.congal@smile.fr] > -=-=-=-=-=-=-=-=-=-=-=- > >
diff --git a/meta/lib/patchtest/repo.py b/meta/lib/patchtest/repo.py index 2cdd6736e4..6a7d7d2d3b 100644 --- a/meta/lib/patchtest/repo.py +++ b/meta/lib/patchtest/repo.py @@ -21,7 +21,12 @@ class PatchTestRepo(object): self.repodir = repodir self.repo = git.Repo.init(repodir) self.patch = mbox.PatchSeries(patch) - self.current_branch = self.repo.active_branch.name + + if self.repo.head.is_detached: + self.current_commit = self.repo.head.commit.hexsha + self.current_branch = None + else: + self.current_branch = self.repo.active_branch.name # targeted branch defined on the patch may be invalid, so make sure there # is a corresponding remote branch @@ -80,6 +85,6 @@ class PatchTestRepo(object): self._patchmerged = True def clean(self): - self.repo.git.execute(['git', 'checkout', self.current_branch]) + self.repo.git.execute(['git', 'checkout', self.current_branch if self.current_branch else self.current_commit]) self.repo.git.execute(['git', 'branch', '-D', self._workingbranch]) self._patchmerged = False