[bitbake-devel] fetcher: Fixed remote removal not throwing exception.

Submitted by Paulo Neves on Aug. 27, 2018, 7:38 p.m. | Patch ID: 154327

Details

Message ID 1535398739-17159-1-git-send-email-ptsneves@gmail.com
State New
Headers show

Commit Message

Paulo Neves Aug. 27, 2018, 7:38 p.m.
Before this fix it is assumed that the removal of the
remote can only fail because there is not remote to remove. This
is a false assumption. Example error which would be ignored:

git -c core.fsyncobjectfiles=0 remote rm origin failed with exit code 1, output:
Note: A branch outside the refs/remotes/ hierarchy was not removed;
to delete it, use:
  git branch -d master
error: could not lock config file config
error: Could not remove config section 'remote.origin'

Due to the masking of this error a stranger error will be
presented to the user, because this time we do not mask the
exception:

git -c core.fsyncobjectfiles=0 remote add --mirror=fetch origin https://github.com/ptsneves/tl-wn722.git failed with exit code 128, output:
fatal: remote origin already exists.

The most likely reason that the remote cannot be removed nor
modified is that the DL_DIR/git2 does not have permissions
compatible with the user running bitbake.

This commit fixes:
https://bugzilla.yoctoproject.org/show_bug.cgi?id=12728

Signed-off-by: Paulo Neves <ptsneves@gmail.com>
---
 bitbake/lib/bb/fetch2/git.py | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

Patch hide | download patch | download mbox

diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
index 612aac4..35da14d 100644
--- a/bitbake/lib/bb/fetch2/git.py
+++ b/bitbake/lib/bb/fetch2/git.py
@@ -353,10 +353,9 @@  class Git(FetchMethod):
                 break
 
         if needupdate:
-            try: 
-                runfetchcmd("%s remote rm origin" % ud.basecmd, d, workdir=ud.clonedir)
-            except bb.fetch2.FetchError:
-                logger.debug(1, "No Origin")
+            output = runfetchcmd("%s remote" % ud.basecmd, d, quiet=True, workdir=ud.clonedir)
+            if "origin" in output:
+              runfetchcmd("%s remote rm origin" % ud.basecmd, d, workdir=ud.clonedir)
 
             runfetchcmd("%s remote add --mirror=fetch origin %s" % (ud.basecmd, repourl), d, workdir=ud.clonedir)
             fetch_cmd = "LANG=C %s fetch -f --prune --progress %s refs/*:refs/*" % (ud.basecmd, repourl)

Comments

Christopher Larson Aug. 29, 2018, 1:44 p.m.
This will try to rm origin even if there's an 'originfoo' remote, as you
don't check for an exact match on a line, but a general substring search.
Unlikely, I admit, but we should still work as correctly as possible, I
think.

On Mon, Aug 27, 2018 at 12:39 PM Paulo Neves <ptsneves@gmail.com> wrote:

> Before this fix it is assumed that the removal of the
> remote can only fail because there is not remote to remove. This
> is a false assumption. Example error which would be ignored:
>
> git -c core.fsyncobjectfiles=0 remote rm origin failed with exit code 1,
> output:
> Note: A branch outside the refs/remotes/ hierarchy was not removed;
> to delete it, use:
>   git branch -d master
> error: could not lock config file config
> error: Could not remove config section 'remote.origin'
>
> Due to the masking of this error a stranger error will be
> presented to the user, because this time we do not mask the
> exception:
>
> git -c core.fsyncobjectfiles=0 remote add --mirror=fetch origin
> https://github.com/ptsneves/tl-wn722.git failed with exit code 128,
> output:
> fatal: remote origin already exists.
>
> The most likely reason that the remote cannot be removed nor
> modified is that the DL_DIR/git2 does not have permissions
> compatible with the user running bitbake.
>
> This commit fixes:
> https://bugzilla.yoctoproject.org/show_bug.cgi?id=12728
>
> Signed-off-by: Paulo Neves <ptsneves@gmail.com>
> ---
>  bitbake/lib/bb/fetch2/git.py | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
> index 612aac4..35da14d 100644
> --- a/bitbake/lib/bb/fetch2/git.py
> +++ b/bitbake/lib/bb/fetch2/git.py
> @@ -353,10 +353,9 @@ class Git(FetchMethod):
>                  break
>
>          if needupdate:
> -            try:
> -                runfetchcmd("%s remote rm origin" % ud.basecmd, d,
> workdir=ud.clonedir)
> -            except bb.fetch2.FetchError:
> -                logger.debug(1, "No Origin")
> +            output = runfetchcmd("%s remote" % ud.basecmd, d, quiet=True,
> workdir=ud.clonedir)
> +            if "origin" in output:
> +              runfetchcmd("%s remote rm origin" % ud.basecmd, d,
> workdir=ud.clonedir)
>
>              runfetchcmd("%s remote add --mirror=fetch origin %s" %
> (ud.basecmd, repourl), d, workdir=ud.clonedir)
>              fetch_cmd = "LANG=C %s fetch -f --prune --progress %s
> refs/*:refs/*" % (ud.basecmd, repourl)
> --
> 2.7.4
>
> --
> _______________________________________________
> bitbake-devel mailing list
> bitbake-devel@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/bitbake-devel
>