| Message ID | 20260325071342.47272-2-adrian.freihofer@siemens.com |
|---|---|
| State | New |
| Headers | show |
| Series | bitbake-setup: improvements, VSCode workspace generation | expand |
On Wed, 25 Mar 2026 at 08:14, Adrian Freihofer via lists.openembedded.org <adrian.freihofer=siemens.com@lists.openembedded.org> wrote: > output = runfetchcmd("%s status --untracked-files=no --porcelain" % (ud.basecmd), d, workdir=destdir) > if output: > - raise bb.fetch2.UnpackError("Repository at %s has uncommitted changes, unable to update:\n%s" % (destdir, output), ud.url) > + raise bb.fetch2.LocalModificationsError(destdir, ud.url, output) A bit further there's this block that handles rebase conflicts: except bb.fetch2.FetchError as e: # If rebase failed, abort it try: runfetchcmd("%s rebase --abort" % (ud.basecmd), d, workdir=destdir) except Exception: pass raise bb.fetch2.UnpackError("Failed to update checkout in place: %s" % str(e), ud.url) I think this too needs its own exception, bb.fetch2.RebaseError. So that bitbake-setup can handle these two exceptions specifically, and raise other UnpackErrors without assuming anything about them. Alex
diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py index 909ae9814..b39cfcd45 100644 --- a/lib/bb/fetch2/__init__.py +++ b/lib/bb/fetch2/__init__.py @@ -96,6 +96,14 @@ class UnpackError(BBFetchException): BBFetchException.__init__(self, msg) self.args = (message, url) +class LocalModificationsError(UnpackError): + """Exception raised when a checkout cannot be updated due to local modifications""" + def __init__(self, repodir, url, git_output): + message = ("Repository at %s has uncommitted changes, unable to update:\n%s\n" + "Please commit, stash or discard your changes and re-run the update." % (repodir, git_output)) + UnpackError.__init__(self, message, url) + self.args = (repodir, url, git_output) + class NoMethodError(BBFetchException): """Exception raised when there is no method to obtain a supplied url or set of urls""" def __init__(self, url): diff --git a/lib/bb/fetch2/git.py b/lib/bb/fetch2/git.py index 84fecdad0..c398f7e9d 100644 --- a/lib/bb/fetch2/git.py +++ b/lib/bb/fetch2/git.py @@ -730,7 +730,7 @@ class Git(FetchMethod): output = runfetchcmd("%s status --untracked-files=no --porcelain" % (ud.basecmd), d, workdir=destdir) if output: - raise bb.fetch2.UnpackError("Repository at %s has uncommitted changes, unable to update:\n%s" % (destdir, output), ud.url) + raise bb.fetch2.LocalModificationsError(destdir, ud.url, output) # Set up remote for the download location if it doesn't exist try: