How sapi69/cabal-server works
hackage-server hosts Haskell packages, with user registration and uploads as its primary user workflow. The README also documents secure repository metadata and a separate hackage-mirror client that synchronizes packages between servers. The tree exposes package, documentation, search, and user subsystems, but no source excerpts were provided; their internal call paths and storage relationships therefore cannot be verified here.
Main entry points: CmdLine.hs Mirror client · Server.hs HTTP server · MemState.hs Persistent state · Upload.hs Package upload
Components 19
Repository server
- HTTP server
Distribution/Server.hs - Server framework
Distribution/Server/Framework - Persistent state
Distribution/Server/Framework/MemState.hs
Package services
- Package upload
Distribution/Server/Features/Upload.hs - Package index
Distribution/Server/Packages/PackageIndex.hs - Package pages
Distribution/Server/Pages/Package.hs - Documentation
Distribution/Server/Features/Documentation.hs - Package search
Distribution/Server/Features/Search.hs - TUF security
Distribution/Server/Features/Security.hs
Users and administration
- User accounts
Distribution/Server/Features/Users.hs - User signup
Distribution/Server/Features/UserSignup.hs - Admin frontend
Distribution/Server/Features/AdminFrontend.hs
Mirroring client
- Mirror client
Distribution/Client/Mirror/CmdLine.hs - Mirror session
Distribution/Client/Mirror/Session.hs - Mirror source adapters
Distribution/Client/Mirror/Repo - Mirror target adapters
Distribution/Client/Mirror/Repo
Other components
- Package user
- Source server
- Target server
Connections 6
- Package user → HTTP server: uses
README.md - Package user → Package upload: uploads packages
README.md - Package user → User signup: registers
README.md - Mirror client → Source server: syncs from
README.md - Mirror client → Target server: uploads to
README.md - HTTP server → Persistent state: resumes state
README.md