Skip to content

bug: configuration cache options dont propagate to pak's cache* functions #836

@jjjermiah

Description

@jjjermiah

Context

I was playing around with the configuration options described here and trying to understand how the cache directory configuration is supposed to work, as setting them via options changes where they are stored, but pak's cache_* functions don't reflect that.

Setup:

> getOption('pkg.package_cache_dir')
[1] "/var/cache/pak/library"

> getOption('pkg.cache_dir')
[1] "/var/cache/pak/pkg"

> getOption('pkg.metadata_cache_dir')
[1] "/var/cache/pak/metadata" 

> list.files("/var/cache/pak", recursive=T)
character(0)

after installing some packages:

pak::pkg_install("dplyr")

> pak::pkg_install("dplyr")
! Failed to update system requirement mappings, will use cached mappings.Updated metadata database: 5.20 MB in 6 files.Updating metadata database ... doneWill install 15 packages.Will download 15 packages with unknown size.
+ cli          3.6.5  [dl]
+ dplyr        1.1.4  [dl]
+ generics     0.1.4  [dl]
+ glue         1.8.0  [dl]
+ lifecycle    1.0.4  [dl]
+ magrittr     2.0.4  [dl]
+ pillar       1.11.1 [dl]
+ pkgconfig    2.0.3  [dl]
+ R6           2.6.1  [dl]
+ rlang        1.1.6  [dl]
+ tibble       3.3.0  [dl]
+ tidyselect   1.2.1  [dl]
+ utf8         1.2.6  [dl]
+ vctrs        0.6.5  [dl]
+ withr        3.0.2  [dl]
  
ℹ Getting 15 pkgs with unknown sizesGot lifecycle 1.0.4 (x86_64-pc-linux-gnu-ubuntu-22.04) (125.18 kB)                                                                                                         
✔ Got generics 0.1.4 (x86_64-pc-linux-gnu-ubuntu-22.04) (82.34 kB)                                                     
✔ Got glue 1.8.0 (x86_64-pc-linux-gnu-ubuntu-22.04) (168.36 kB)                                                         
✔ Got pkgconfig 2.0.3 (x86_64-pc-linux-gnu-ubuntu-22.04) (18.20 kB)                                                     
✔ Got utf8 1.2.6 (x86_64-pc-linux-gnu-ubuntu-22.04) (151.76 kB)                                                        
✔ Got magrittr 2.0.4 (x86_64-pc-linux-gnu-ubuntu-22.04) (222.13 kB)                                          
✔ Got pillar 1.11.1 (x86_64-pc-linux-gnu-ubuntu-22.04) (660.72 kB)                                                  
✔ Got tibble 3.3.0 (x86_64-pc-linux-gnu-ubuntu-22.04) (680.66 kB)                                       
✔ Got cli 3.6.5 (x86_64-pc-linux-gnu-ubuntu-22.04) (1.33 MB)                                                        
✔ Got R6 2.6.1 (x86_64-pc-linux-gnu-ubuntu-22.04) (86.87 kB)                                               
✔ Got withr 3.0.2 (x86_64-pc-linux-gnu-ubuntu-22.04) (224.16 kB)                                           
✔ Got dplyr 1.1.4 (x86_64-pc-linux-gnu-ubuntu-22.04) (1.50 MB)                                      
✔ Got tidyselect 1.2.1 (x86_64-pc-linux-gnu-ubuntu-22.04) (225.69 kB)                        
✔ Got vctrs 0.6.5 (x86_64-pc-linux-gnu-ubuntu-22.04) (1.32 MB)         
✔ Got rlang 1.1.6 (x86_64-pc-linux-gnu-ubuntu-22.04) (1.60 MB)         
✔ Downloaded 15 packages (8.39 MB) in 9.3sInstalled cli 3.6.5  (251ms)                                                                                                
✔ Installed dplyr 1.1.4  (392ms)                                                                                              
✔ Installed generics 0.1.4  (510ms)                                                                                           
✔ Installed glue 1.8.0  (603ms)                                                                                          
✔ Installed lifecycle 1.0.4  (709ms)                                                                              
✔ Installed magrittr 2.0.4  (801ms)                                                                     
✔ Installed pillar 1.11.1  (968ms)                                                                
✔ Installed pkgconfig 2.0.3  (1.1s)                                              
✔ Installed R6 2.6.1  (316ms)                                                    
✔ Installed rlang 1.1.6  (209ms)                                         
✔ Installed tibble 3.3.0  (262ms)                                              
✔ Installed tidyselect 1.2.1  (227ms)                                          
✔ Installed utf8 1.2.6  (229ms)                                              
✔ Installed vctrs 0.6.5  (223ms)                                         
✔ Installed withr 3.0.2  (232ms)                                         
✔ 1 pkg + 14 deps: added 15, dld 15 (8.39 MB) [47s]               

chosen cache directories listed with all files exists

> list.files("/var/cache/pak", recursive=T)
 [1] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/cli_3.6.5.tar.gz"       
 [2] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/dplyr_1.1.4.tar.gz"     
 [3] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/generics_0.1.4.tar.gz"  
 [4] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/glue_1.8.0.tar.gz"      
 [5] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/lifecycle_1.0.4.tar.gz" 
 [6] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/magrittr_2.0.4.tar.gz"  
 [7] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/pillar_1.11.1.tar.gz"   
 [8] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/pkgconfig_2.0.3.tar.gz" 
 [9] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/R6_2.6.1.tar.gz"        
[10] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/rlang_1.1.6.tar.gz"     
[11] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/tibble_3.3.0.tar.gz"    
[12] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/tidyselect_1.2.1.tar.gz"
[13] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/utf8_1.2.6.tar.gz"      
[14] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/vctrs_0.6.5.tar.gz"     
[15] "library/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/withr_3.0.2.tar.gz"     
[16] "metadata/_metadata/CRAN-e992d6ade7/src/contrib/METADATA2.gz"                     
[17] "metadata/_metadata/CRAN-e992d6ade7/src/contrib/METADATA2.gz.etag"                
[18] "metadata/_metadata/CRAN-e992d6ade7/src/contrib/PACKAGES.gz"                      
[19] "metadata/_metadata/CRAN-e992d6ade7/src/contrib/PACKAGES.gz.etag"                 
[20] "metadata/_metadata/pkgs-a38a46f50f.rds"                                          
[21] "metadata/_metadata/PPM-49260a4dff/src/contrib/METADATA2.gz"                      
[22] "metadata/_metadata/PPM-49260a4dff/src/contrib/METADATA2.gz.etag"                 
[23] "metadata/_metadata/PPM-49260a4dff/src/contrib/PACKAGES.gz"                       
[24] "metadata/_metadata/PPM-49260a4dff/src/contrib/PACKAGES2.gz"                      
[25] "metadata/_metadata/RnD-fb5c089e8b/src/contrib/PACKAGES.gz"                       
[26] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/cli_3.6.5.tar.gz"           
[27] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/dplyr_1.1.4.tar.gz"         
[28] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/generics_0.1.4.tar.gz"      
[29] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/glue_1.8.0.tar.gz"          
[30] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/lifecycle_1.0.4.tar.gz"     
[31] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/magrittr_2.0.4.tar.gz"      
[32] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/pillar_1.11.1.tar.gz"       
[33] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/pkgconfig_2.0.3.tar.gz"     
[34] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/R6_2.6.1.tar.gz"            
[35] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/rlang_1.1.6.tar.gz"         
[36] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/tibble_3.3.0.tar.gz"        
[37] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/tidyselect_1.2.1.tar.gz"    
[38] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/utf8_1.2.6.tar.gz"          
[39] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/vctrs_0.6.5.tar.gz"         
[40] "pkg/src/contrib/x86_64-pc-linux-gnu-ubuntu-22.04/4.5/withr_3.0.2.tar.gz"        

but pak::cache_* functions don't use those options

> pak::cache_summary()
$cachepath
[1] "/root/.cache/R/pkgcache/pkg"

$files
[1] 0

$size
[1] 0

Alternative

Looking through the source code, I noticed this in the pkgcache vendored code:

rdir <- Sys.getenv("R_USER_CACHE_DIR", "")
cdir <- Sys.getenv("R_PKG_CACHE_DIR", "")

root@b4efb3ea2368:~# export R_PKG_CACHE_DIR=/var/cache/pak

root@b4efb3ea2368:~# Rscript -e 'pak::cache_summary()'
$cachepath
[1] "/var/cache/pak/R/pkgcache/pkg"

$files
[1] 0

$size
[1] 0

So it looks like pkgdepends and pkgcache don't share the same logic to determine user-set config?

also willing to help sort this out, or extend this discussion to the specific pkg's repos if that makes this easier.

Thank you!

pak::pak_sitrep

> pak::pak_sitrep()
* pak version:
- 0.9.1
* Version information:
- pak platform: x86_64-pc-linux-musl (current: x86_64-pc-linux-gnu, compatible)
- pak repository: - (local install?)
* Optional packages installed:
- pillar
* Library path:
- /root/R/x86_64-pc-linux-gnu-library/4.5
- /opt/R/4.5.2/lib/R/library
* pak is installed at /root/R/x86_64-pc-linux-gnu-library/4.5/pak.
* Dependency versions:
- callr      3.7.6     
- cli        3.6.5     
- curl       5.2.3     
- desc       1.4.3     
- filelock   1.0.3     
- jsonlite   2.0.0     
- keyring    1.4.0.9000
- lpSolve    5.6.23    
- pkgbuild   1.4.8     
- pkgcache   2.2.4.9000
- pkgdepends 0.9.0.9000
- pkgsearch  3.1.5     
- processx   3.8.6     
- ps         1.9.1     
- R6         2.5.1     
- yaml       2.3.10    
- zip        2.3.3     
* Dependencies can be loaded
> 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions