-
Notifications
You must be signed in to change notification settings - Fork 701
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Regression: local repository file+noindex ignores noindex part #9891
Comments
It'd be great to see where the bug has been introduced and whether the fix would be contained to cabal-install (together with cabal-install-solver) or whether it might involve any fixes to the Cabal API or file format (the latter probably unlikely). For now, I'm going to assume this does not block the release of Cabal 3.12.0.0, but is a likely blocker for cabal-install 3.12.1.0. |
Hi! I believe this bug location lives within this
Note that I tested this using git tag of cabal-install-v3.12.0.0-prerelease (I tested for this bug in cabal-3.10.3.0 beforehand and found it works without this bug, the same as in cabal-3.10.2.1) This was introduced in this commit to be specific: d608d02. For relevant relevant ad-hoc patch to restore this file+noindex behavior for testing, though I'm pretty sure it breaks the recently introduced behavior. diff --git a/cabal-install/src/Distribution/Client/IndexUtils.hs b/cabal-install/src/Distribution/Client/IndexUtils.hs
index 2dc7d37e2..945afcc0a 100644
--- a/cabal-install/src/Distribution/Client/IndexUtils.hs
+++ b/cabal-install/src/Distribution/Client/IndexUtils.hs
@@ -430,16 +430,15 @@ readRepoIndex
-> IO (PackageIndex UnresolvedSourcePackage, [Dependency], IndexStateInfo)
readRepoIndex verbosity repoCtxt repo idxState =
handleNotFound $ do
- ret@(_, _, isi) <-
- readPackageIndexCacheFile
- verbosity
- mkAvailablePackage
- (RepoIndex repoCtxt repo)
- idxState
- when (isRepoRemote repo) $ do
- warnIfIndexIsOld =<< getIndexFileAge repo
- dieIfRequestedIdxIsNewer isi
- pure ret
+ when (isRepoRemote repo) $ warnIfIndexIsOld =<< getIndexFileAge repo
+ -- note that if this step fails due to a bad repo cache, the the procedure can still succeed by reading from the existing cache, which is updated regardless.
+ updateRepoIndexCache verbosity (RepoIndex repoCtxt repo)
+ `catchIO` (\e -> warn verbosity $ "unable to update the repo index cache -- " ++ displayException e)
+ readPackageIndexCacheFile
+ verbosity
+ mkAvailablePackage
+ (RepoIndex repoCtxt repo)
+ idxState
where
mkAvailablePackage pkgEntry =
SourcePackage
@@ -460,8 +459,8 @@ readRepoIndex verbosity repoCtxt repo idxState =
if isDoesNotExistError e
then do
case repo of
- RepoRemote{..} -> dieWithException verbosity $ MissingPackageList repoRemote
- RepoSecure{..} -> dieWithException verbosity $ MissingPackageList repoRemote
+ RepoRemote{..} -> warn verbosity $ errMissingPackageList repoRemote
+ RepoSecure{..} -> warn verbosity $ errMissingPackageList repoRemote
RepoLocalNoIndex local _ ->
warn verbosity $
"Error during construction of local+noindex "
@@ -479,15 +478,10 @@ readRepoIndex verbosity repoCtxt repo idxState =
RepoSecure{..} -> warn verbosity $ warnOutdatedPackageList repoRemote dt
RepoLocalNoIndex{} -> return ()
- dieIfRequestedIdxIsNewer isi =
- let latestTime = isiHeadTime isi
- in case idxState of
- IndexStateTime t -> when (t > latestTime) $ case repo of
- RepoSecure{..} ->
- dieWithException verbosity $ UnusableIndexState repoRemote latestTime t
- RepoRemote{} -> pure ()
- RepoLocalNoIndex{} -> return ()
- IndexStateHead -> pure ()
+ errMissingPackageList repoRemote =
+ "The package list for '"
+ ++ unRepoName (remoteRepoName repoRemote)
+ ++ "' does not exist. Run 'cabal update' to download it."
warnOutdatedPackageList repoRemote dt =
"The package list for '" Hope this helps a bit in narrowing down the actual problem. |
@jasagredo @andreabedini tagging you as the authors of the commit which introduced the regression. |
Thanks for investigating @cloudyluna ! |
Thank you @alt-romes, I'll have a look. |
I think I understand where the problem is. I am working on a patch. |
This change also affects |
Describe the bug
Having a cabal project with a local repository using
url: file+noindex://...
works with cabal 3.10.2.1 but fails with HEAD.To Reproduce
Then, building with
cabal
from HEAD will produce an error message like the following:If your package depends on a package from the local repository the build will simply fail.
Then, building with
cabal-3.10.2.1
will succeed. In fact, it looks likecabal-3.10.2.1
will create anoindex.cache
file in the repository.The text was updated successfully, but these errors were encountered: