haskell / haskell/cabal

Cabal can't handle source-repository-packages with submodules on Windows

Open
#11,136 8 comments 0 reactions 0 assignees View on GitHub
platform: windows status: fixed in master type: bug
Dominant language
Haskell
Stars
1.7k
Forks
750
Avg merge
4d 3h
Merged PRs (30d)
28

Description

**Describe the bug**

I observed this with the https://github.com/TeofilC/digest package:
```
❯ rm -rf dist-newstyle
❯ cabal build
Cloning into 'C:\Users\Javier\aa\dist-newstyle\src\digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e'...
remote: Enumerating objects: 195, done.
remote: Counting objects: 100% (89/89), done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 195 (delta 45), reused 53 (delta 27), pack-reused 106 (from 1)
Receiving objects: 100% (195/195), 43.58 KiB | 602.00 KiB/s, done.
Resolving deltas: 100% (85/85), done.
HEAD is now at 0fe4c40 Make zlib dependency logic more similar to the zlib hackage package
Submodule 'external/crc32c' (https://github.com/google/crc32c.git) registered for path 'external/crc32c'
Cloning into 'C:/Users/Javier/aa/dist-newstyle/src/digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e/external/crc32c'...
Submodule path 'external/crc32c': checked out '21fc8ef30415a635e7351ffa0e5d5367943d4a94'
Submodule 'third_party/benchmark' (https://github.com/google/benchmark.git) registered for path 'external/crc32c/third_party/benchmark'
Submodule 'third_party/glog' (https://github.com/google/glog.git) registered for path 'external/crc32c/third_party/glog'
Submodule 'third_party/googletest' (https://github.com/google/googletest.git) registered for path 'external/crc32c/third_party/googletest'
Cloning into 'C:/Users/Javier/aa/dist-newstyle/src/digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e/external/crc32c/third_party/benchmark'...
Cloning into 'C:/Users/Javier/aa/dist-newstyle/src/digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e/external/crc32c/third_party/glog'...
Cloning into 'C:/Users/Javier/aa/dist-newstyle/src/digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e/external/crc32c/third_party/googletest'...
Submodule path 'external/crc32c/third_party/benchmark': checked out 'e991355c02b93fe17713efe04cbc2e278e00fdbd'
Submodule path 'external/crc32c/third_party/glog': checked out '56523194b3ce1212414c93d55f31832e94677f55'
Submodule path 'external/crc32c/third_party/googletest': checked out '3b49be074d5c1340eeb447e6a8e78427051e675a'
Entering 'external/crc32c'
Entering 'external/crc32c/third_party/benchmark'
Entering 'external/crc32c/third_party/glog'
Entering 'external/crc32c/third_party/googletest'
Configuration is affected by the following files:
- cabal.project
Resolving dependencies...
Build profile: -w ghc-9.12.2 -O1
In order, the following will be built (use -v for more details):
- aa-0.1.0.0 (lib) (first run)
Configuring library for aa-0.1.0.0...
Preprocessing library for aa-0.1.0.0...
Building library for aa-0.1.0.0...
[1 of 1] Compiling MyLib ( src\MyLib.hs, dist-newstyle\build\x86_64-windows\ghc-9.12.2\aa-0.1.0.0\build\MyLib.o )
❯ cabal build
Cleared directory 'external/crc32c'
Submodule 'external/crc32c' (https://github.com/google/crc32c.git) unregistered for path 'external/crc32c'
C:\Users\Javier\aa\dist-newstyle\src\digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e\.git\modules\external\crc32c\objects\pack\pack-62647e289e8548892047744fd5b0dbfdf2314826.rev: removeDirectoryRecursive:DeleteFile "\\\\?\\C:\\Users\\Javier\\aa\\dist-newstyle\\src\\digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e\\.git\\modules\\external\\crc32c\\objects\\pack\\pack-62647e289e8548892047744fd5b0dbfdf2314826.rev": permission denied (Access is denied.)
```

The verbose output shows it crashes when doing `git submodule deinit --force --all`:
```
❯ cabal build --verbose=3 | grep -v "with environ"
Searching for curl in path.
Found curl at C:\WINDOWS\SYSTEM32\curl.exe
Searching for powershell in path.
Found powershell at C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe
Searching for wget in path.
Found wget at C:\msys64\usr\bin\wget.exe
Selected http transport implementation: curl
File monitor 'config' changed: file
C:\Users\Javier\aa\dist-newstyle\src\digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e\digest.cabal
Project settings changed, reconfiguring...
creating C:\Users\Javier\aa\dist-newstyle
creating C:\Users\Javier\aa\dist-newstyle\cache
File monitor
'digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e.cache'
changed: file
C:\Users\Javier\aa\dist-newstyle\src\digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e\digest.cabal
Including the following directories in PATH:
- C:\ghcup\bin
- C:\Users\Javier\AppData\Roaming\cabal\bin
- C:\msys64\clang64\bin
- C:\msys64\usr\bin
Searching for git in path.
Found git at C:\Users\Javier\scoop\shims\git.exe
Running: "C:\Users\Javier\scoop\shims\git.exe" "--version"
C:\Users\Javier\scoop\shims\git.exe is version 2.50.0
creating C:\Users\Javier\aa\dist-newstyle\src
Running: "C:\Users\Javier\scoop\shims\git.exe" "fetch"
with working directory: "C:\\Users\\Javier\\aa\\dist-newstyle\\src\\digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e"
Running: "C:\Users\Javier\scoop\shims\git.exe" "submodule" "deinit" "--force" "--all"
with working directory: "C:\\Users\\Javier\\aa\\dist-newstyle\\src\\digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e"
Cleared directory 'external/crc32c'
Submodule 'external/crc32c' (https://github.com/google/crc32c.git) unregistered for path 'external/crc32c'
C:\Users\Javier\aa\dist-newstyle\src\digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e\.git\modules\external\crc32c\objects\pack\pack-62647e289e8548892047744fd5b0dbfdf2314826.rev: removeDirectoryRecursive:DeleteFile "\\\\?\\C:\\Users\\Javier\\aa\\dist-newstyle\\src\\digest-999ee59776010cd6d06baf588136f566fa2037e71721da9159a01782459e0b0e\\.git\\modules\\external\\crc32c\\objects\\pack\\pack-62647e289e8548892047744fd5b0dbfdf2314826.rev": permission denied (Access is denied.)
```

**To Reproduce**
Doing `cabal build` twice in this project should trigger the error:
```
❯ cat aa.cabal
cabal-version: 3.0
name: aa
version: 0.1.0.0
build-type: Simple

library
default-language: Haskell2010
❯ cat cabal.project
packages: .

source-repository-package
type: git
location: https://github.com/TeofilC/digest
tag: 0fe4c403b9a90b60ed937af685dbc9a98e3af39a
```

**System information**
- Operating system: Windows 11
- `cabal`: 3.14.2.0, `ghc` versions

**Additional context**
Add any other context about the problem here.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.