[GHC] #13436: feature for checking files in temp location

GHC ghc-devs at haskell.org
Fri Mar 17 09:50:13 UTC 2017


#13436: feature for checking files in temp location
-------------------------------------+-------------------------------------
           Reporter:  duncan         |             Owner:  (none)
               Type:  feature        |            Status:  new
  request                            |
           Priority:  normal         |         Milestone:
          Component:  ghc-pkg        |           Version:  8.1
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 ghc-pkg register can do sanity checks on files being in the right place.
 These are a useful sanity check. The checks can also be disabled with the
 `--force-files` flag.

 When installing package files and registering we can either install files
 and then register or the reverse. The reverse style can be helpful in
 simplifying the locking system that allows concurrent package installation
 and use.

 In particular, new versions of cabal will

 1. prepare all package files in a temporary directory;
 2. register with ghc-pkg; and
 3. use an atomic directory rename to move the package files to their final
 location

 This procedure simplifies the locking considerably by not requiring any
 locks between concurrent package readers and writers, just requiring locks
 between concurrent writers.

 Step 2 above requires that we be able to register when the files are not
 yet in their final location. This can be done with the `--force-files`
 flag, but we lose out on the useful sanity checks.

 So this feature request is for a flag that lets us say "do please do the
 file checks, but instead of looking for files in their final locations,
 look for them here".

 Since file paths in the package registration info are usually absolute
 paths, then the specification of where to look for files would need to be
 done in terms of changing a prefix.

 For example, a registration file may contain:

 {{{
 import-dirs: /home/me/.cabal/store/uniplate-1.6.12-3K1HlYoxKOQ3XlQlOoSFWj
 }}}

 And this is used to check for the .hi files for all the modules. But in
 the above scenario the files will actually all be in
 /home/me/.cabal/store/**incoming**/uniplate-1.6.12-3K1HlYoxKOQ3XlQlOoSFWj
 so we will want to say something like:

 {{{
 ghc-pkg register uniplate.conf \
    --file-root=/home/me/.cabal/store/=/home/me/.cabal/store/incoming/
 }}}

 or another example of a slightly different use case would be

 {{{
 ghc-pkg register uniplate.conf \
    --file-root=/=$PWD/image/
 }}}

 this is for the case of `--prefix=/usr/local` and `make install
 DESTDIR=$PWD/image`

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13436>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list